2

バイナリ イメージ (の半分) をスキャンし、最初の黒いピクセルの位置のみを保存 (またはマーク) する必要があります。私はこれをmatlabで試しました。しかし、コードはすべての黒いピクセルの位置を表示しています。私のコードはこのようなものです。

I= imread('binary image');

imshow(I);

[r c] =size(I);

for j=1:c/2

    for i=1:r

        if(I(i,j)==1)
        [i j]    
        end
    end
end

これを改善するための提案...

4

2 に答える 2

3

ループを回避するには、Matlab のfind関数を使用することもできます。

[i,j] = find(I==1,1,'first')

これは、「1 に等しい I の最初の要素を見つける」ことを意味します。(find(I==1,k,first)番目の最初の k 個の要素を見つけます)。

(余談ですが、ドキュメントでは、最初のインデックスが見つかった後にマトリックスのスキャンを停止するかどうかについて言及していないようです(それが要求されたすべての場合)-効率のためにそうすると思いますか?)。

于 2012-01-29T11:33:15.790 に答える
1

ループを終了する必要があります。

found = 0; % a flag
for j=1:c/2
  for i=1:r

    if(I(i,j)==1)
        [i j]
        found = 1;
        break; % stop the inner loop  
    end

    if (found)
        break; % stop the outer loop
    end
  end
end
于 2012-01-29T11:02:33.507 に答える