选择图像中的第二大区域

时间:2016-12-14 10:12:26

标签: matlab image-processing image-segmentation

我使用bwareaopen删除小对象。是否有删除大对象的功能?我正在努力适应bwareaopen,但到目前为止尚未成功。感谢

对于参考:这是指向bwareaopen的帮助的链接。

2 个答案:

答案 0 :(得分:3)

我找到了解决这个问题的简单方法here

"要仅保留区域中30像素和50像素之间的对象,可以使用BWAREAOPEN命令,如下所示:"

LB = 30;
UB = 50;
Iout = xor(bwareaopen(I,LB),  bwareaopen(I,UB));

答案 1 :(得分:1)

如果您不想使用bwareaopen,另一种方法是使用regionprops,特别是使用AreaPixelIdxList属性,过滤掉所有要素t符合您想要的区域范围,然后使用剩余的元素并创建一个新的掩码。 Area捕获每个形状的总面积,而PixelIdxList捕获图像内属于每个形状的位置的列主要线性索引。您可以使用Area属性执行过滤,同时使用PixelIdxList属性创建新的输出图像,并将这些位置设置为所需区域范围内的true:< / p>

% Specify lower and upper bounds
LB = 30;
UB = 50;

% Run regionprops
s = regionprops(I, 'Area', 'PixelIdxList');

% Get all of the areas for each shape
areas = [s.Area];

% Remove elements from output of regionprops
% that are not within the range
s = s(areas >= LB & areas <= UB);

% Get the column-major locations of the shapes
% that have passed the check
idx = {s.PixelIdxList};
idx = cat(1, idx{:});

% Create an output image with the passed shapes
Iout = false(size(I));
Iout(idx) = true;