error detectmultiscale opencv object-detection haar-classifier

error - OpenCV detectMultiScale() minNeighbors parámetro



detectmultiscale opencv python (2)

Actualmente estoy usando clasificadores Haar, para detectar objetos. En mi camino, no entendí qué es el parámetro minNeighbors, ¿qué representa? En realidad no entiendo cuáles son los vecinos del rectángulo candidato de detección. Por favor, ¿alguien puede definir la idea vecina?


De la documentación de OpenCV :

minNeighbors : parámetro que especifica cuántos vecinos debe tener cada rectángulo candidato para conservarlo.

En otras palabras, este parámetro afectará la calidad de las caras detectadas. Mayor valor resulta en menos detecciones pero con mayor calidad.

La idea detrás de este parámetro es que el detector se ejecutará en un estilo de escala múltiple y al mismo tiempo siguiendo la estrategia de ventana deslizante . Después de este paso, le dará múltiples respuestas incluso para una sola región de cara. Este parámetro tiende a filtrar estas respuestas al igual que al establecer un umbral de límite inferior, es decir, solo se contará como una cara válida si el número de respuestas para esta cara es mayor que el de minNeighbors .

Para conocer otros parámetros de CascadeClassifier :: detectMultiScale , echa un vistazo a esta publicación que respondí anteriormente.


El clasificador en cascada Haar funciona con un enfoque de ventana deslizante. Si observa los archivos en cascada, puede ver un parámetro de tamaño que generalmente tiene un valor bastante pequeño como 20 20. Esta es la ventana más pequeña que puede detectar la cascada. Por lo tanto, al aplicar un enfoque de ventana deslizante, desliza una ventana a través de la imagen, la redimensiona y la busca de nuevo hasta que ya no se puede cambiar de tamaño. Así que con cada iteración, se clasifican las salidas verdaderas del clasificador en cascada de haar. Entonces, cuando esta ventana se desliza en la imagen se redimensiona y se vuelve a deslizar; En realidad detecta muchos muchos falsos positivos. Puedes verificar lo que detecta dando a los vecinos 0 . Así que un ejemplo aquí:

Así que hay una gran cantidad de detección de caras debido al cambio de tamaño de la ventana deslizante y muchos falsos positivos también. Por lo tanto, para eliminar los falsos positivos y obtener el rectángulo de cara adecuado de las detecciones, se aplica el enfoque de vecindario. Es como si estuviera en la vecindad de otros rectángulos de lo que está bien, puede pasarlo más. Entonces, este número determina la cantidad de vecindario que se requiere para pasarlo como un rectángulo de cara. En la misma imagen cuando es 1 :

Por lo tanto, al aumentar este número puede eliminar los falsos positivos, pero tenga cuidado, al aumentarlos también puede perder los verdaderos positivos. Cuando es 3 un resultado perfecto: