Quiero hacer un cuadro delimitador alrededor de una persona en una imagen. He probado diferentes métodos, pero no pude conseguir la solución que yo quiero.

Aquí está la imagen que estoy usando:

Dibujar un recuadro de delimitación rectangular alrededor de una persona en una imagen

Este es el código que he escrito hasta ahora:

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);  
  • Tu problema no es el dibujo del cuadro delimitador – es la localización de la persona dentro de la imagen. Si usted no hace esto correctamente, entonces no hay manera de que usted pueda hacer este cuadro delimitador correctamente.
  • Gracias rayryeng por tu sugerencia. Hay alguna forma de localizar a una persona en el interior de la primera?
  • Podrías subir la imagen original sin el cuadro rojo?
  • aquí está el enlace de la imagen original enlace
  • No veo un enlace.
  • Imagen Original enlace
  • OK, dame un momento

2 Comentarios

  1. 3

    Su problema en realidad no es el dibujo del cuadro delimitador – es la localización de la persona dentro de la imagen, que no he hecho correctamente. Si usted no hace esto correctamente, entonces usted no será capaz de colocar la correcta cuadro delimitador alrededor de la persona. Esto es lo que he hecho para localizar a la persona en la imagen, el dibujo de un cuadro delimitador alrededor de esta persona. Esto es suponiendo que la imagen se almacena en im:

    1. Observe que la distribución de la intensidad de la persona es más oscuro que la mayoría de la escena. Como tal, voy a umbral de la imagen por la elección de cualquiera de píxeles menor que la intensidad de 65 a ser de color blanco, mientras que el otro píxeles de color negro.
    2. Puedo borrar los píxeles blancos que rodean el borde de la imagen
    3. Realizar una regionprops llamada de la extracción de la BoundingBox y Area propiedades.
    4. Puedo buscar a través de todas las áreas y encontrar el BoundingBox con la mayor Area.
    5. Yo uso este BoundingBox y dibujar en nuestra imagen.

    Por lo tanto:

    %//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');

    Esto es lo que tenemos:

    Dibujar un recuadro de delimitación rectangular alrededor de una persona en una imagen

    Tener en cuenta que esta no es perfecto. Puede que tenga que jugar con el umbral para obtener una información más precisa del cuadro delimitador, pero esto debería ser suficiente para empezar con.

    Buena suerte!

    • Gracias rayryeng, cuando ejecuto el código que me da error en el paso#4 Undefined variable «A» o clase «a».
    • lo siento error tipográfico. let me fix
    • Fijo. Ejecute de nuevo y probar
  2. 2

    También puede utilizar vision.PeopleDetector en la Visión por Computador del Sistema de la caja de herramientas:

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

    Dibujar un recuadro de delimitación rectangular alrededor de una persona en una imagen

Dejar respuesta

Please enter your comment!
Please enter your name here