我正在使用regionprops(img,'BoundingBox');
为图像中的某些对象生成边界框。边界框({{1}},x
y,
,width
)的坐标始终与整数值相差0.5。
为什么会这样?
对我来说,这会导致两个问题:
height
。我可以接受它,分别用Warning: Integer operands are required for colon operator when used as index
或floor
删除它,但是...... ceil
或Subscripted assignment dimension mismatch.
,这似乎是合理的。有人可以向我解释:
Index exceed matrix dimensions.
裁剪的内容并且舍入有点情况(仅使用imcrop
或floor
将无效,我将不得不检查图像边框是什么这不是一个问题,但对于一个相当简单的任务来说似乎有点单调乏味,当然是否应该像这样使用它当然有问题......)。以下是我为1024x1024图像生成错误的一些代码段。
ceil
答案 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像素)的整像素:
对于上面的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;