我使用bwareaopen
删除小对象。是否有删除大对象的功能?我正在努力适应bwareaopen,但到目前为止尚未成功。感谢
对于参考:这是指向bwareaopen的帮助的链接。
答案 0 :(得分:3)
我找到了解决这个问题的简单方法here:
"要仅保留区域中30像素和50像素之间的对象,可以使用BWAREAOPEN命令,如下所示:"
LB = 30;
UB = 50;
Iout = xor(bwareaopen(I,LB), bwareaopen(I,UB));
答案 1 :(得分:1)
如果您不想使用bwareaopen
,另一种方法是使用regionprops
,特别是使用Area
和PixelIdxList
属性,过滤掉所有要素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;