Matlab中的奇数边界框坐标

时间:2017-05-10 04:14:43

标签: matlab bounding-box

我正在使用regionprops(img,'BoundingBox');为图像中的某些对象生成边界框。边界框({​​{1}},x y,width)的坐标始终与整数值相差0.5。 为什么会这样?

对我来说,这会导致两个问题:

  • 使用这些坐标访问图像数组时,我收到警告:height。我可以接受它,分别用Warning: Integer operands are required for colon operator when used as indexfloor删除它,但是......
  • ...当这些坐标靠近图像边界时,它们会导致 错误,因为值0.5和1024.5与图像不匹配 边框1和1024.我得到ceilSubscripted assignment dimension mismatch.,这似乎是合理的。

有人可以向我解释:

  1. 为什么要这样做?
  2. 使用坐标裁剪和替换图像区域时,我应该如何使用。我想要完全替换Index exceed matrix dimensions.裁剪的内容并且舍入有点情况(仅使用imcropfloor将无效,我将不得不检查图像边框是什么这不是一个问题,但对于一个相当简单的任务来说似乎有点单调乏味,当然是否应该像这样使用它当然有问题......)。
  3. 以下是我为1024x1024图像生成错误的一些代码段。

    ceil

1 个答案:

答案 0 :(得分:3)

处理图像显示或处理的MATLAB中的函数将像素的中心视为与相应的坐标网格点对齐。换句话说,对于图像的给定尺寸,第一像素中心为1,第二像素中心为2等,并且每个像素的面积将在坐标的任一侧跨越+ -0.5。当您绘制图像,打开轴显示并围绕其中一个角放大时,您可以看到这一点:

img = imread('cameraman.tif');  % Load a sample image
imshow(img);                    % Display it
set(gca, 'Visible', 'on');      % Make the axes visible
axis([0 5 252 257]);            % Zoom in on the bottom left corner

documentation for regionprops说明'BoundingBox'将包围整个像素区域,从而导致边界框出现比中心坐标范围更宽(每边宽0.5像素)的整像素:

enter image description here

对于上面的5×5样本图像,非零像素覆盖跨越前4行的区域(像素的行坐标中心从1到4)和右4列(像素的列坐标从中心开始) 2至5)。因此,边界框(绿色)横跨行跨越0.5到4.5(高度为4),跨列跨越1.5到5.5(宽度为4)。

简而言之,如果要使用bb_coords中的边界框值来生成索引到图像中,则需要在每个角坐标上添加0.5并从每个宽度中减去1 :

ind_coords = bb_coords + [0.5 0.5 -1 -1];
img(ind_coords(2):(ind_coords(2)+ind_coords(4)), ...
    ind_coords(1):(ind_coords(1)+ind_coords(3))) = subregion;