如何在ismember选择的对象周围创建边界框?

时间:2014-02-24 15:42:42

标签: matlab image-processing image-segmentation

通过关注此帖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之间的连接组件的输出。如此

enter image description here

但我可以在原始图像中围绕此连接组件创建一个边界框。我的意思是如果这是原始图像: enter image description here

我可以在原始图像上的所需组件周围创建一个边界框吗?我知道这是围绕我所有连接组件制作边界框的代码

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之间的元素周围制作边界框?而不是产生如上所示的完全不同的图像。

1 个答案:

答案 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