web-dev-qa-db-fra.com

OpenCV detectMultiScale () paramètre minNeighbors

J'utilise actuellement des classificateurs Haar pour détecter des objets. Sur mon chemin, je n'ai pas compris ce qu'est le paramètre minNeighbors, que représente-t-il? En fait, je ne comprends pas quels sont les voisins du rectangle candidat à la détection. S'il vous plaît quelqu'un peut-il définir l'idée voisine?

25
blakeO

Le classificateur de cascade de Haar fonctionne avec une approche de fenêtre coulissante. Si vous regardez les fichiers en cascade, vous pouvez voir un paramètre de taille qui généralement une valeur assez petite comme 20 20. C'est la plus petite fenêtre que la cascade peut détecter. Donc, en appliquant une approche de fenêtre coulissante, vous faites glisser une fenêtre à travers l'image que vous la redimensionnez et recherchez à nouveau jusqu'à ce que vous ne puissiez pas la redimensionner davantage. Ainsi, à chaque itération, les vraies sorties du classificateur en cascade de haar sont stockées. Ainsi, lorsque cette fenêtre est glissée dans l'image redimensionnée et glissée à nouveau; il détecte en fait de nombreux faux positifs. Vous pouvez vérifier ce qu'il détecte en donnant minNeighbors. Donc, un exemple ici:

minNeighbors = 0

Il y a donc beaucoup de détection de visage en raison du redimensionnement de la fenêtre coulissante et de nombreux faux positifs aussi. Ainsi, pour éliminer les faux positifs et obtenir le rectangle de visage approprié des détections, une approche de quartier est appliquée. C'est comme si c'était au voisinage d'autres rectangles que ce n'est pas grave, vous pouvez le passer plus loin. Donc, ce nombre détermine la quantité de voisinage nécessaire pour le passer en rectangle de face. Dans la même image quand elle est 1:

minNeighbors = 1

Donc, en augmentant ce nombre, vous pouvez éliminer les faux positifs, mais attention, en l'augmentant, vous pouvez également perdre les vrais positifs. Quand c'est un résultat parfait:

minNeighbors = 3

72
yutasrobot

De documentation OpenCV :

minNeighbors - Paramètre spécifiant le nombre de voisins que chaque rectangle candidat doit avoir pour le conserver.

En d'autres termes, ce paramètre affectera la qualité des visages détectés. Une valeur plus élevée entraîne moins de détections mais avec une qualité supérieure.

L'idée derrière ce paramètre est que le détecteur fonctionnera sur un style à plusieurs échelles et en même temps suivant glissant stratégie de fenêtre . Après cette étape, il vous donnera plusieurs réponses, même pour une seule région de visage. Ce paramètre a tendance à filtrer ces réponses comme en définissant un seuil inférieur, c'est-à-dire qu'il ne sera compté comme un visage valide que si le nombre de réponses pour ce visage est supérieur à minNeighbors.


Pour apprendre d'autres paramètres de CascadeClassifier :: detectMultiScale , consultez ce post auquel j'ai répondu plus tôt.

9
herohuyongtao