我有一个图像,我希望在MATLAB上使用BoundingBox从每个区域获取区域,这是我使用BoundingBox的示例:
Ic=regionprops(logical(I3),'BoundingBox');
其中I3是我想要获得每个区域的区域然后显示每个区域的区域的图像,我所知道的关于BoundingBox的独特之处在于,在我的情况下,Ic是他们从I3图像保存区域的变量这是103个领域或地区,但我不知道如何在不同的图中显示每个区域的区域,我明白这样做,MATLAB将显示103个数字,我没有任何问题。
答案 0 :(得分:0)
使用regionprops
查找BoundingBox的结果是由[x, y, width, height]
定义的矩形。您可以使用这些结果使用内置的rectangle
函数绘制矩形。
如果您想将它们全部放在同一轴上,您可以这样做:
fig = figure;
him = imshow(I3);
hold on;
colors = hsv(numel(Ic));
% Now plot all the rectangles
for k = 1:numel(Ic)
rectangle('Position', Ic(k).BoundingBox, 'EdgeColor', colors(k,:));
end
如果你想为每个边界框结果创建一个新数字:
% Anonymous function to help with the conversion from rect
rect2rng = @(pos,len)ceil(pos):(ceil(pos)+len-1);
for k = 1:numel(Ic)
rect = Ic(k).BoundingBox;
subImage = I3(rect2rng(rect(2), rect(4)), rect2rng(rect(1), rect(3)));
fig = figure;
him = imshow(subImage);
title(sprintf('Bounding Box #%d', k));
end
答案 1 :(得分:0)
关于绘制所有矩形的想法是一个好主意,而且,确切地说,我想为每个边界框创建一个新的图形,但是你建议的代码只显示103次相同的图像,而不是每个分开的每个图形,我使用的代码是:
Ic=regionprops(logical(I3),'BoundingBox');
fig = figure;
him = imshow(I3);
hold on; colors = hsv(numel(Ic));
for k = 1:numel(Ic)
fig = figure;
him = imshow(I3);
hold on;
rectangle('Position', Ic(k).BoundingBox);
end