使用MATLAB的图像边界框

时间:2012-04-13 11:36:39

标签: image-processing matlab bounding-box matlab-figure

我正在尝试在下图中的白色斑点周围绘制一个边界框:

enter image description here

我确实喜欢这个:

bw = imread('box.jpg');
bw=im2bw(bw);
imshow(bw)
L = bwlabel(bw);
s = regionprops(L, 'Area', 'BoundingBox');
s(1);
area_values = [s.Area];
idx = find((100 <= area_values) & (area_values <= 1000)); % list of all the objects   

%whose area is between 100 and 1000

bw2 = ismember(L, idx); %construct a binary image containing all the objects whose 

%area is between 100 and 1000 by passing L and idx to ismember. 

imshow(bw2)

输出bw2,到目前为止: enter image description here

有人可以告诉我如何在这个blob周围绘制一个边界框(白色)吗?

更新 Wajih的回答实际上准确地解决了这个问题。

4 个答案:

答案 0 :(得分:3)

Pseduo -

  • 在blob中选择最大y,最大x,最小x,最小y。也就是说,斑点上的点。这些是您可以用来构建边界框的坐标。

假设图像的左上角为(0,0)

(smallestX,smallestY)-----------------(largestX,smallestY)    
      |                                      |
      |                                      |          
      |                                      | 
      |                                      |
(smallestX,largestY)------------------(largestX,largestY)    

用于查找最小值/最大值和指数。

[r,c]=find(img==min(min(img)))
[r,c]=find(img==max(max(img)))

r,c表示img矩阵中的行和列。

  • 我在图片上标记了可用于创建边界框的点。
  • 放大图片以获得更好的视野。 Makred Zoomed

答案 1 :(得分:3)

作为这个问题的第20,000位观众,我会回答我认为提问者的实际问题。

要在页面上渲染矩形,您只需要正确解释形状的边界框。您已经在s(idx).BoundingBox

中对此进行了计算

因此,将这两行添加到您的脚本中:

bb = s(idx).BoundingBox;
rectangle('Position',[bb(1) bb(2) bb(3) bb(4)],'EdgeColor','green');

你会得到:

enter image description here

答案 2 :(得分:2)

您是否尝试过Image Toolbox中的regionprops?

答案 3 :(得分:0)

我认为您可以尝试使用 bwboundries

boundaries = bwboundaries(blob);

numberOfBoundaries = size(boundaries);

for k = 1 : numberOfBoundaries

    thisBoundary = boundaries{k};

    plot(thisBoundary(:,2), thisBoundary(:,1), 'g', 'LineWidth', 2);

end