我将背景减去图像作为输入。该想法是通过使用较小的HOG算法搜索区域来减少用于人物检测的搜索区域。所需的输出是围绕人的边界框和框角的像素位置。
这是输入图像:
这是必需的输出:
这是我到目前为止所尝试的:
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
这是我得到的输出:
答案 0 :(得分:3)
看起来你已经尝试了我的建议。但是,您需要封装整个对象的边界框。这可以通过使用BoundingBox
属性,然后计算每个矩形的四个角中的每一个来轻松完成。然后,您可以计算封装最终封装整个对象的所有矩形的最小跨越边界框。
我注意到图像底部有一个薄的白色条带,这会弄乱边界框的计算。因此,在我们继续计算最小跨越边界框之前,我将剪切图像的最后10行。要计算最小跨越边界框,您所要做的就是获取所有矩形的所有角点,然后计算最小和最大x
坐标以及最小和最大y
合作坐标。这些将对应于最小跨越边界框的左上角和最小跨越边界框的右下角。
使用BoundingBox
查看regionprops
属性时,每个边界框输出一个4元素向量:
[x y w h]
x,y
表示边界框的左上角坐标。 x
将是列,y
将是左上角的行。 w,h
表示边界框的宽度和高度。我们将使用它并计算检测到的每个矩形的左上角,右上角,左下角和右下角。完成此操作后,将所有这些矩形坐标堆叠成单个2D矩阵,然后计算最小和最大x
和y
坐标。要计算矩形,只需使用最小x
和y
坐标作为左上角,然后通过减去最大值和最小值x
和{{1来计算宽度和高度分别是坐标。
不用多说,这里是代码。请注意,我想在y
矩阵中提取所有边界框坐标,其中N x 4
表示检测到的边界框的数量。您必须使用reshape
才能正确执行此操作:
N
这是我得到的图像: