2016-05-02 5 views
0

Ich versuche, die Pixel innerhalb eines Bereichs zu berechnen. Ich die Reichweite berechnet, aber ich kann nicht die Pixel zählen enthält 0.Finden von Pixeln mit 0

Mein Code:

first_value_of_i = zeros(M,1); 
first_value_of_j = zeros(N,1); 

second_value_of_i = zeros(M,1); 
second_value_of_j =zeros(N,1); 

for i = 2:M-1  
    for j = 2:N-1 

     Pix = [image(i,j) image(i-1,j) image(i-1,j+1) image(i,j+1) image(i+1,j+1) image(i+1,j) image(i+1,j-1) image(i,j-1) image(i-1,j-1) image(i-1,j)]; 

     if((Pix(1)==0) && ((Pix(2)*Pix(3)*Pix(4)*Pix(5)*Pix(6)==0) || (Pix(2)*Pix(6)*Pix(7)*Pix(8)*Pix(9)==0))) 

      if (((Pix(2)+Pix(6)+Pix(7)+Pix(8)+Pix(9))>=5) || ((Pix(2)+Pix(3)+Pix(4)+Pix(5)+Pix(6))>=5))    
       first_value_of_i(i,1) = i; 
       first_value_of_j(j,1) = j; 
      end 

      if (((Pix(2)+Pix(3)+Pix(4)+Pix(8)+Pix(9))>=5) || ((Pix(4)+Pix(5)+Pix(6)+Pix(7)+Pix(8))>=5))    
       second_value_of_i(i,1) = i; 
       second_value_of_j(j,1) = j; 
      end    

     end % if 

    end %for 

end %for 

rest_stroke = zeros(M,2); 

for p = first_value_of_i : second_value_of_i 

    count_rest=0; 

    for q = first_value_of_j:second_value_of_j      
     if((image(p,q)==0)) 
      count_rest=count_rest+1; 
     end   
    end 

    rest_stroke(i,1)=i; 
    rest_stroke(i,2)=count_rest; 
end 

Aber die Ausgabe zeigt:

Subscript Indizes müssen entweder reale positive ganze Zahlen oder logische

Error (Linie 173)
if ((Bild (p, q) == 0)) bei dem Versuch,

Nach meiner Berechnung soll es in Ordnung sein, aber offenbar ist es nicht. Kann mir jemand helfen?

+1

Ich würde Ihren Code debuggen, indem ich es durchtrete und die Werte von 'p' und' q' beobachte. Offensichtlich ist einer von ihnen irgendwann Null oder negativ. – Suever

+0

'first_value_of_i' und andere ähnlich benannte Indizes werden mit' zeros() 'initialisiert ... das ist wahrscheinlich ein guter Startpunkt. –

+0

Vielen Dank für die Hilfe. – shamima

Antwort

2
for i=2:M-1 

    for j = 2:N-1 

i beginnt am 2. first_value_of_i(1,1) als 0 initialisiert wird und nicht verändert.

+0

anstelle von 'Nullen()', vielleicht 'Einsen() '? –

+0

@ElijahRockers keine Ahnung, was OP machen möchte, warum ist der erste Eintrag unberührt – Yvon

+0

Vielen Dank für Ihre Hilfe. – shamima

Verwandte Themen