2

我正在编写一个 Matlab 程序来分割图像,然后在分割后的图像周围放置一个边界框。我的代码以前可以工作,但是我现在收到错误:

  • 使用矩形时出错
  • 值必须是 4 元素向量

有问题的数组是由 regionprops 创建的 BoundingBox,它应该只包含四个元素,但是由于某种原因包含更多元素。这是我的代码(defaultSegment 函数返回二进制图像):

function [ boundImage ] = boundSegment( input_image )
image = defaultSegment(input_image);
clear s;
s = regionprops(image, 'Area', 'BoundingBox');
numObj = numel(s);
index = 1;
for k = 1: numObj-1
    if s(k+1).Area > s(index).Area
        index = k+1;
    else
        index = index;
    end
end
figure, imshow(input_image);
rectangle('Position',s(index).BoundingBox);
boundImage = null;

(如果我的代码可以直接将边界框放在图像上而不是绘制它,我实际上更喜欢它,但我还没有找到没有视觉工具箱的方法)

谢谢!

4

2 回答 2

2

我怀疑它image有两个以上的维度。检查使用size(image). 只有当有两个维度BoundingBox时才会有四个元素。image来自Matlab 的 regionprops 帮助

'BoundingBox' - 包含该区域的最小矩形,一个 1×Q *2 向量,其中 Q 是图像维度的数量:ndims(L)、ndims(BW) 或 numel(CC.ImageSize)。

图像具有三维的原因是用于多个颜色通道。如果要转换为灰度进行处理,请使用rgb2gray

于 2013-01-21T22:21:37.627 回答
0

继续@shoelzer 关于image三个通道的回答,我怀疑您得到彩色图像是因为您的分割算法 ( defaultSegment) 将每个段绘制成不同的颜色。尝试rgb2ind转换image为分割标签的二维矩阵

于 2013-01-23T19:34:27.330 回答