通过关注此帖Using ismember with the output of regionprops,我能够有选择地隔离我想要的连接组件。例如,使用下面的代码:
img = rgb2gray(imread('W1\Writer1_01_02.jpg'));
bw_normal2 = im2bw(img, graythresh(img));
bw22 = imcomplement(bw_normal2);
bw3 = bwmorph(bw22, 'dilate');
[label2,n2] = bwlabel(bw3);
stats2 = regionprops(label2, {'Area', 'BoundingBox'});
area2 = [stats2.Area];
idx = find((28 <= area2) & (area2 <= 40));
BW2 = ismember(label2,idx);
figure, imshow(BW2)
我可以轻松地显示仅包含面积介于28和40之间的连接组件的输出。如此
但我可以在原始图像中围绕此连接组件创建一个边界框。我的意思是如果这是原始图像:
我可以在原始图像上的所需组件周围创建一个边界框吗?我知道这是围绕我所有连接组件制作边界框的代码
imshow(img);
for j=1:n2
hold on
rectangle('Position',[stats(j).BoundingBox(1),stats(j).BoundingBox(2),stats(j).BoundingBox(3),stats(j).BoundingBox(4)],...
'EdgeColor','r','LineWidth',2 );
end
但是,我如何仅在面积介于28到40之间的元素周围制作边界框?而不是产生如上所示的完全不同的图像。
答案 0 :(得分:1)
在代码的后半部分保持if条件......
imshow(img);
for j=1:n2
hold on
area2 = stats2(j).Area;
if((28 <= area2) & (area2 <= 40))
rectangle('Position',[stats2(j).BoundingBox(1),stats2(j).BoundingBox(2),stats2(j).BoundingBox(3),stats2(j).BoundingBox(4)],...'EdgeColor','r','LineWidth',2 );
end
end