2015-04-02 20 views

回答

1

簡單。使用bwareaopen。這需要一個二進制圖像,並且需要執行的最小區域。輸出是相同的圖像,但所有區域都在最小區域以下被刪除。

因此,假定thresh是你想保留的圖像中的物體的最小面積,千萬:

%// Remove those labels that are below an area of thresh 
out = bwareaopen(L ~= 0, thresh); 

%// Make a copy of the original label matrix and 
%// only copy the labels that appeared in the above result over 
Lfinal = zeros(size(L)); 
Lfinal(out) = L(out); 

Lfinal包含具有較小的區域除去最後一次的標籤矩陣。在你的情況,你可能要消除那些低於一定量從最大面積的物體對象......所以也許這樣做:

thresh = round(0.1*max(area)); 

這需要看看面積最大你的標籤矩陣,並且佔10%。任何面積低於此最大面積10%的物體都將從您的標籤矩陣中移除。

+0

謝謝你真的幫助完整..但我做了不同的方式。 BW2(vertcat((CC.PixelIdxList {cellfun(@ numel,CC.PixelIdxList)<100})))= 0; – 2015-04-19 06:14:21

+0

稍微複雜一點,但我很高興你明白了! – rayryeng 2015-04-19 06:40:29

+0

我用CC = bwconncomp(BW)標記圖像;並使用代碼掩蓋具有最大面積的標籤 numPixels = cellfun(@ numel,CC.PixelIdxList); [最大,idx] =最大(numPixels); BW(CC.PixelIdxList {idx})= 0; 現在我想把薄矩形框圍繞該最大面積,而不是掩蓋它......怎麼可以做? plz幫助我..解決這個問題.. – 2015-04-19 07:18:52