Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 在图像中围绕人物绘制矩形边界框_Matlab_Image Processing_Computer Vision_Matlab Cvst_Bounding Box - Fatal编程技术网

Matlab 在图像中围绕人物绘制矩形边界框

Matlab 在图像中围绕人物绘制矩形边界框,matlab,image-processing,computer-vision,matlab-cvst,bounding-box,Matlab,Image Processing,Computer Vision,Matlab Cvst,Bounding Box,我想在图像中围绕一个人制作一个边界框。我尝试了不同的方法,但没有得到我想要的解决方案 以下是我正在使用的图像: 以下是我迄今为止编写的代码: 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);

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

以下是我正在使用的图像:

以下是我迄今为止编写的代码:

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);  

您的问题实际上不是绘制边界框,而是在图像中定位人物,这是您没有完全正确完成的。如果您没有正确执行此操作,则无法将正确的边界框放置在此人周围。这就是我在图像中定位此人的方法,然后在此人周围绘制一个边界框。这是假设您的图像存储在
im
中:

  • 请注意,人物的强度分布比场景的大部分颜色都暗。因此,我将通过选择强度小于65的任何像素为白色,而其他像素为黑色来设置图像阈值
  • 我清除图像边框周围的所有白色像素
  • 我执行
    regionprops
    调用,提取
    BoundingBox
    Area
    属性
  • 我搜索了所有区域,找到了具有最大
    区域的
    边界框
  • 我使用这个
    BoundingBox
    并在我们的图像上绘制它
  • 因此:

    %// 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');
    
    %//步骤#1
    im_thresh=im<65;
    %//第2步
    im_thresh2=imclearborder(im_thresh);
    %//第三步
    rp=区域属性(im_thresh2,‘边界框’、‘区域’);
    %//第四步
    面积=[rp.面积];
    [~,ind]=最大(面积);
    bb=rp(ind).边界框;
    %//第五步
    imshow(im);
    矩形('Position',bb',EdgeColor',red');
    

    这就是我们得到的:

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


    祝你好运

    您还可以使用计算机视觉系统工具箱中的
    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);
    

    您的问题不是绘制边界框,而是在图像中定位人物。如果你做得不好,那么你就无法正确地绘制这个边界框。谢谢rayryeng的建议。有没有办法先找到里面的人?你能上传没有红色边框的原始图像吗?这是原始图像的链接,谢谢rayryeng,当我运行代码时,它在步骤4未定义变量“a”或类“a”中给了我错误。@AadnanFarooqA-对不起,输入错误。让我fix@AadnanFarooqA-固定。再运行一次,然后再试一次