【问题标题】:Bounding Box in Matlab (regionprops)Matlab中的边界框(regionprops)
【发布时间】:2013-01-05 01:10:54
【问题描述】:

我正在编写一个 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;

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

谢谢!

【问题讨论】:

  • 您是否检查了s(index).BoundingBox 的值以确保其为4 element vector?
  • 也许我不清楚。 s(index).BoundingBox 没有给出 4 元素向量,但我不知道为什么会这样。
  • 查看此链接以了解如何获取段的大小并设置边界框mathworks.com/matlabcentral/fileexchange/25157 您必须下载一个 matlab 文件
  • 那个链接没有帮助。

标签: matlab bounding-box image-segmentation


【解决方案1】:

我怀疑image 有两个以上的维度。检查使用size(image)。仅当image 有两个维度时,BoundingBox 才会有四个元素。来自Matlab's regionprops help:

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

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

【讨论】:

  • 是的!谢谢!那一定是我的问题。当我做size(image) 时,我得到 1080 1520 3。为什么图像是三维的,如何将其转换为二维图像?
  • 因为有三个颜色通道。要获得二维矩阵,请使用 mean( image,3 )
  • 感谢您的帮助。您的回答帮助我确定了我的问题,这实际上是我在两个不同的位置保存了两个同名的函数(defaultSegment),而我调用 boundSegment 的位置是使用 defaultSegment 生成彩色图像而不是二进制一。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 2017-10-08
    • 2016-07-07
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 2014-04-14
    相关资源
    最近更新 更多