在图像中的人周围绘制一个矩形边界框

时间:2014-12-15 05:48:37

标签: matlab image-processing computer-vision matlab-cvst bounding-box

我想在图像中围绕一个人制作一个边界框。我尝试了不同的方法,但我无法得到我想要的解决方案。

这是我正在使用的图像:

enter image description here

这是我到目前为止编写的代码:

bw = im2bw(test, graythresh(test));    
bw2 = imfill(bw,'holes');  
imshow(bw2);  

figure;  
L = bwlabel(bw2);  
imshow(label2rgb(L, @jet, [.7 .7 .7]))  

figure;  
imshow(I1);  
R = regionprops(L, 'BoundingBox');  
rectangle('Position', R(1).BoundingBox);  

2 个答案:

答案 0 :(得分:3)

你的问题实际上并没有绘制边界框 - 它将人物定位在图像中,而你还没有完全正确地完成。如果您没有正确执行此操作,那么您将无法在该人周围放置正确的边界框。这就是我在图像中定位人物,然后在这个人周围绘制一个边界框的过程。这假设您的图片存储在im

  1. 请注意,人的强度分布比大多数场景更暗。因此,我将通过选择任何小于强度65的像素为白色而其他像素为黑色来对图像进行阈值处理。
  2. 清除图像边框周围的所有白色像素
  3. 我执行regionprops调用,提取BoundingBoxArea属性。
  4. 我搜索了所有区域,找到BoundingBox最大的Area
  5. 我使用此BoundingBox并在我们的图片上绘制。
  6. 因此:

    %// Step #1
    im_thresh = im < 65;
    
    %// Step #2
    im_thresh2 = imclearborder(im_thresh);
    
    %// Step #3
    rp = regionprops(im_thresh2, 'BoundingBox', 'Area');
    
    %// Step #4
    area = [rp.Area].';
    [~,ind] = max(area);
    bb = rp(ind).BoundingBox;
    
    %// Step #5
    imshow(im);
    rectangle('Position', bb, 'EdgeColor', 'red');
    

    这就是我们得到的:

    enter image description here

    请记住,这并不完美。您可能需要使用阈值来获得更准确的边界框,但这应该足以让您开始。

    祝你好运!

答案 1 :(得分:2)

您还可以在计算机视觉系统工具箱中使用vision.PeopleDetector

im = imread('bnJzI.png');
detector = vision.PeopleDetector('ClassificationModel', 'UprightPeople_96x48', 'ClassificationThreshold', 2.5);
bbox = step(detector, im);
im2 = insertObjectAnnotation(im, 'rectangle', bbox, 'person');
imshow(im2);

enter image description here