我的问题有两个部分。第一个是:
如何将背景作为组件包含在bwconncomp
函数中,因为它的默认行为不包括它。
另外,这是我的另一个问题,如何根据我使用bwconncomp
获得的内容选择第n个最大的组件。
目前我正在考虑这样的事情,但这不起作用:P
function out = getComponent(im,n)
CC = bwconncomp(im,4);
%image is an binary image here
numPixels = cellfun(@numel,CC.PixelIdxList);
sortedPixels = sort(numPixels,'descend');
w = sortedPixels(n);
[largest, index] = find(numPixels==w);
im(CC.PixelIdxList{index}) = 0;
out = im;
但这根本不起作用。但是我不太确定CC.PixelIdxList{index}
做了什么,它只是改变了数组中的元素。我还发现PixelIdxList
到底有点模糊。
答案 0 :(得分:3)
函数FindBackgroundAndLargestBlob
x = imread('peppers.png');
I = x(:,:,2);
level = graythresh(I);
bw = im2bw(I,level);
b = bwlabel(bw,8);
rp = regionprops(b,'Area','PixelIdxList');
areas = [rp.Area];
[未使用,indexOfMax] =最大(区域);
DISP(indexOfMax);
端
更新: 您也可以使用bwconncomp来实现:
函数FindBackgroundAndLargestBlob
x = imread('peppers.png');
I = x(:,:,2);
level = graythresh(I);
bw = im2bw(I,level);
c = bwconncomp(bw,4);
numOfPixels = cellfun(@ numel,c.PixelIdxList);
[unused,indexOfMax] = max(numOfPixels);
图; imshow(BW);
bw(c.PixelIdxList {indexOfMax})= 0;
图; imshow(BW);
结束
将产生以下结果: