2013-12-22 8 views
5

私はbwconvhullを使用して画像の特定の部分を検出しました。画像には特定の重心を持つオブジェクトの数があります。私がしたいのは、最大のエリア(左から1番目の大きなもの)のオブジェクトを検出し、他のものを無視することです。私はどの方法に従うべきですか?最大の領域を持つオブジェクトを選択する方法は?

私はあなたの助けに非常に感謝しています。 (事前にご不便のために申し訳ありませんが、私はまだそれに取り組んでいて、それは非常に大まかに書かれています。)コード

CH_objects = bwconvhull(c,'objects'); 
imshow(CH_objects); 
title('Objects Convex Hull'); 
bwarea(CH_objects) 
Ilabel = bwlabel(CH_objects,8); 
stat = regionprops(Ilabel,'centroid'); 
imshow(CH_objects); 
hold on; 
for x = 1:numel(stat) 
    plot(stat(x).Centroid(1),stat(x).Centroid(2),'ro'); 
end 

Hereがされて次はイメージです。 regionpropsに

答えて

10

使用AreaPixelIdxListが、これは次の行を編集することを意味する:

stat = regionprops(Ilabel,'Centroid','Area','PixelIdxList'); 

最大面積とそれが構造体インデックスは

[maxValue,index] = max([stat.Area]); 

ピクセルの線形インデックスによって与えられます`stat.PixelIdxList 'によって与えられた領域を削除するために使用することができます(これはゼロを割り当てることを意味します)

YourImage(stat(index).PixelIdxList)=0; 
2

1以外を無視してください。
上記の回答に似ています。 しかし、大きな領域を削除する代わりに、大きな領域を除くすべての領域を削除します。

stat=regionprops(label,'Centroid','Area','PixelIdxList'); 
[maxValue,index] = max([stat.Area]); 
[rw col]=size(stat); 
for i=1:rw 
    if (i~=index) 
     BW(stat(i).PixelIdxList)=0; % Remove all small regions except large area index 
    end 
end 
figure,imshow(BW); 
+0

非常に便利です。ありがとう –

関連する問題