-2
我使用CC = bwconncomp(BW)標記了圖像。現在我必須刪除面積較小的標籤。我已使用以下代碼查找區域。如何計算不同標籤的面積並刪除面積較小的標籤
[B,L] = bwboundaries(Bw,'noholes');
stats = regionprops(L,'Area','perimeter');
area = [stats.Area];
但現在我該如何刪除較小區域的標籤?
我使用CC = bwconncomp(BW)標記了圖像。現在我必須刪除面積較小的標籤。我已使用以下代碼查找區域。如何計算不同標籤的面積並刪除面積較小的標籤
[B,L] = bwboundaries(Bw,'noholes');
stats = regionprops(L,'Area','perimeter');
area = [stats.Area];
但現在我該如何刪除較小區域的標籤?
簡單。使用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%的物體都將從您的標籤矩陣中移除。
謝謝你真的幫助完整..但我做了不同的方式。 BW2(vertcat((CC.PixelIdxList {cellfun(@ numel,CC.PixelIdxList)<100})))= 0; – 2015-04-19 06:14:21
稍微複雜一點,但我很高興你明白了! – rayryeng 2015-04-19 06:40:29
我用CC = bwconncomp(BW)標記圖像;並使用代碼掩蓋具有最大面積的標籤 numPixels = cellfun(@ numel,CC.PixelIdxList); [最大,idx] =最大(numPixels); BW(CC.PixelIdxList {idx})= 0; 現在我想把薄矩形框圍繞該最大面積,而不是掩蓋它......怎麼可以做? plz幫助我..解決這個問題.. – 2015-04-19 07:18:52