请使用
bwconncomp,因为它返回单独单元格中区域的坐标索引,其中每个单元格的大小都很容易辨别:
>> BW = [1 0 0; 0 0 0; 0 1 1]; % two regions
>> CC = bwconncomp(BW)
CC =
Connectivity: 8
ImageSize: [3 3]
NumObjects: 2
PixelIdxList: {[1] [2x1 double]}
PixelIdxList字段是一个单元格数组,其中包含每个区域的坐标索引.每个数组的长度是每个区域的大小:
>> numPixels = cellfun(@numel,CC.PixelIdxList)
numPixels =
1 2
>> [biggestSize,idx] = max(numPixels)
biggestSize =
2
idx =
2
然后,您可以使用此组件轻松创建新图像:
BW2 = false(size(BW));
BW2(CC.PixelIdxList{idx}) = true;
编辑:从评论中,需要裁剪输出图像以便区域到达边缘可以使用“BoundingBox”选项使用regionprops进行寻址:
s = regionprops(BW2, 'BoundingBox');
它给你一个矩形s.BoundingBox,你可以用它来裁剪BW3 = imcrop(BW2,s.BoundingBox);.