确定在MATLAB中捕获对象的最小边界框

时间:2014-08-31 00:20:06

标签: matlab image-processing

我将背景减去图像作为输入。该想法是通过使用较小的HOG算法搜索区域来减少用于人物检测的搜索区域。所需的输出是围绕人的边界框和框角的像素位置。

这是输入图像:

input image

这是必需的输出:

required output

这是我到目前为止所尝试的:

x=imread('frame 0080.png');   
y=im2bw(x);
s=regionprops(y);    

imshow(y);    
hold on

for i=1:numel(s)  
   rectangle('Position',s(i).BoundingBox,'edgecolor','y')
end

这是我得到的输出:

actual output

1 个答案:

答案 0 :(得分:3)

看起来你已经尝试了我的建议。但是,您需要封装整个对象的边界框。这可以通过使用BoundingBox属性,然后计算每个矩形的四个角中的每一个来轻松完成。然后,您可以计算封装最终封装整个对象的所有矩形的最小跨越边界框。

我注意到图像底部有一个薄的白色条带,这会弄乱边界框的计算。因此,在我们继续计算最小跨越边界框之前,我将剪切图像的最后10行。要计算最小跨越边界框,您所要做的就是获取所有矩形的所有角点,然后计算最小和最大x坐标以及最小和最大y合作坐标。这些将对应于最小跨越边界框的左上角和最小跨越边界框的右下角。

使用BoundingBox查看regionprops属性时,每个边界框输出一个4元素向量:

[x y w h]

x,y表示边界框的左上角坐标。 x将是列,y将是左上角的行。 w,h表示边界框的宽度和高度。我们将使用它并计算检测到的每个矩形的左上角,右上角,左下角和右下角。完成此操作后,将所有这些矩形坐标堆叠成单个2D矩阵,然后计算最小和最大xy坐标。要计算矩形,只需使用最小xy坐标作为左上角,然后通过减去最大值和最小值x和{{1来计算宽度和高度分别是坐标。

不用多说,这里是代码。请注意,我想在y矩阵中提取所有边界框坐标,其中N x 4表示检测到的边界框的数量。您必须使用reshape才能正确执行此操作:

N

这是我得到的图像:

enter image description here