2017-06-27 5 views
1

Ich habe Probleme mit einer Schleife, die die weißen Pixel in einem Stück eines Bildes zählt, und speichert die gesamten weißen Pixel und die y und x Position dieses Stückes im Bild, jedes auf einem eigenen Array.MATLAB - Daten gehen beim Schließen der FOR Schleife verloren

Wenn ich die Werte innerhalb der Schleife drucke, funktioniert es gut, aber rechts nach der Schleife sind die 3 Felder mit Nullen gefüllt.

Kann jemand helfen?

Cod:

y = zeros(altura*largura); 
x = zeros(altura*largura); 
v = zeros(altura*largura); 


for j=0:altura-1 
    for k=0:largura-1 

     pedaco = f8(j*40+1 : j*40+40, k*40+1 : k*40+40); %binary piece 
     pedac = im2uint8(pedaco); 
     totalBrancos = sum(sum(pedac)); %sum white pixels 

     pos = altura*j+k+1; 

     y(pos) = j; 
     x(pos) = k; 
     v(pos) = totalBrancos; 

     disp(y(pos)); %works 
     disp(x(pos)); %works 
     disp(v(pos)); %works 

    end 
end 

disp(y); %all zeros 
disp(x); %all zeros 
disp(v); %all zeros 
+0

Sind Sie sicher, dass * * es nur Nullen ist? Wenn die Matrizen groß sind, sehen Sie möglicherweise nur einen Teil davon im Befehlsfenster. Probieren Sie stattdessen 'imagesc (y);' für jede Matrix aus. – gnovice

+1

Dies sollte wie erwartet funktionieren, bitte geben Sie ein [mcve], d. H. Definieren Sie alle Variablen. – m7913d

+0

Wahrscheinlich sollte von 1 anstelle von 0 im echten Matlab-Stil indexiert werden. Es scheint, dass Sie aus einer anderen Programmiersprache kommen. – toshiomagic

Antwort

0

Ihre Nullen Anrufe schaffen eine (altura largura) durch (altura largura) Matrix, die ich nicht glaube, ist, was Sie bestimmt, wie Sie Daten in sparen durch die Berechnung eine Position

Wenn das der Fall ist, versucht

y = zeros(1, altura*largura); 
x = zeros(1, altura*largura); 
v = zeros(1, altura*largura); 

Es ist möglich, einen einzigen Index in eine Multi-Index-Matrix zu verwenden, aber Ihre pos Berechnung ist nicht korrekt dafür.

+0

Beachten Sie, dass auf Elemente Elemente in einem multidimensionalen Array mithilfe linearer Indizierung zugegriffen werden kann. – m7913d

+0

true - aktualisierte Antwort, um das zu reflektieren – lostbard

Verwandte Themen