我正在尝试在下图中的白色斑点周围绘制一个边界框:
我确实喜欢这个:
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,到目前为止:
有人可以告诉我如何在这个blob周围绘制一个边界框(白色)吗?
更新 Wajih的回答实际上准确地解决了这个问题。
答案 0 :(得分:3)
Pseduo -
假设图像的左上角为(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矩阵中的行和列。
答案 1 :(得分:3)
作为这个问题的第20,000位观众,我会回答我认为提问者的实际问题。
要在页面上渲染矩形,您只需要正确解释形状的边界框。您已经在s(idx).BoundingBox
因此,将这两行添加到您的脚本中:
bb = s(idx).BoundingBox;
rectangle('Position',[bb(1) bb(2) bb(3) bb(4)],'EdgeColor','green');
你会得到:
答案 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