2013-12-22 36 views
5

我已經使用bwconvhull來檢測圖像的某個部分,正如您在圖像中看到的,有一定數量的對象具有某些質心。我想做的是檢測面積最大的物體(左起第一個大)並忽略其他物體。我應遵循哪種方法?如何選擇面積最大的物體?

我會非常感謝您的幫助。以下是代碼(這是非常粗略地寫成我仍然在做這個工作。提前對不起,任何不便之處)

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是圖像。

回答

10

使用AreaPixelIdxList在regionprops,這意味着修改的,以下面的行:

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

的最大面積和它的結構索引由

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

像素的線性索引給定每個區域由'stat.PixelIdxList'給出,你可以使用它們來刪除給定區域(我假設這意味着給它指定零)

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

對於忽略除一個以外的所有其他人..
與上述答案類似。 但刪除大區域,我刪除大區域以外的所有區域。

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

非常有用。謝謝 –