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