2017-06-27 8 views
1

イメージ内の白いピクセルをカウントするループに問題があり、そのピクセルの合計白ピクセルとyとx の位置が格納されています画像内で、それぞれがそれ自身の配列上にある。MATLAB - FORループを閉じるときにデータが失われる

ループ内の値を印刷するとうまくいきますが、ループの後で右の の3つの配列に0が書き込まれます。

誰でも手助けできますか?

コッド:

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

あなたは確信していますか?それはすべてゼロですか?行列が大きい場合は、コマンドウィンドウに表示されている行列の一部しか表示されていない可能性があります。代わりに、各行列に対して 'imagesc(y);'を試してください。 – gnovice

+1

これは期待どおりに動作するはずです。[mcve]を指定してください。つまり、すべての変数を定義してください。 – m7913d

+0

おそらく真のmatlab形式で0ではなく1からインデックスする必要があります。あなたは別のプログラミング言語から来ているようです。 – toshiomagic

答えて

0

あなたのゼロ・コールが、私は考えていない(Alturaの largura)行列による(Alturaのlargura)を作成しているが、あなたが計算することにより、にデータを保存するよう意図したものです位置

そのような場合、マルチインデックス行列に単一のインデックスを使用することが可能である

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

を試してみてください、あなたのposの計算はこれを行うには正しくありません。

+0

線形索引付けを使用して多次元配列の要素要素にアクセスすることが可能であることに注意してください。 – m7913d

+0

true - 更新された回答 – lostbard

関連する問題