BoundingBox Matlab

时间:2016-02-27 01:45:13

标签: matlab

我有一个图像,我希望在MATLAB上使用BoundingBox从每个区域获取区域,这是我使用BoundingBox的示例:

Ic=regionprops(logical(I3),'BoundingBox');

其中I3是我想要获得每个区域的区域然后显示每个区域的区域的图像,我所知道的关于BoundingBox的独特之处在于,在我的情况下,Ic是他们从I3图像保存区域的变量这是103个领域或地区,但我不知道如何在不同的图中显示每个区域的区域,我明白这样做,MATLAB将显示103个数字,我没有任何问题。

2 个答案:

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