2014-03-07 6 views
16

Ich verwende derzeit Haar-Klassifikatoren, um Objekte zu erkennen. Auf meinem Weg habe ich nicht verstanden, was ist der minNeighbors Parameter, was ist es darstellt? Eigentlich verstehe ich nicht, was sind die Nachbarn der Erkennung Kandidaten Rechteck. Kann bitte irgendjemand die Nachbaridee definieren?OpenCV detectMultiScale() minNeighbors Parameter

+2

Werfen Sie einen Blick auf diese .. [http://stackoverflow.com/questions/20801015/opencv-detectmultiscale-parameters] (http: // stackoverflow.com/questions/20801015/opencv-detectmultiscale-Parameter) – Naren

Antwort

51

Der Haarkaskadenklassierer arbeitet mit einem Gleitfensteransatz. Wenn Sie sich die Kaskaden-Dateien ansehen, können Sie einen Größen-Parameter sehen, der normalerweise einen ziemlich kleinen Wert wie 20 20 hat. Dies ist das kleinste Fenster, das Kaskade erkennen kann. Wenn Sie also ein gleitendes Fenster anwenden, schieben Sie ein Fenster durch das Bild, als Sie es in der Größe ändern, und suchen Sie erneut, bis Sie die Größe nicht weiter ändern können. Bei jeder Iteration des kaskadierten Klassifikators von haar werden also echte Ausgaben gespeichert. Also, wenn dieses Fenster im Bild verschoben wird, wird es in der Größe verändert und erneut verschoben; Es erkennt tatsächlich viele falsche Positive. Sie können überprüfen, was es erkennt, indem Sie minNeighbors 0 geben. So ein Beispiel hier:

minNeighbors = 0

So gibt es eine Menge von Gesichtserkennung aufgrund des Schiebefensters Ändern der Größe und viele Fehlalarme zu. Um False Positives zu eliminieren und das richtige Gesichtsrechteck aus Erkennungen zu entfernen, wird der Nachbarschaftsansatz angewendet. Es ist, als ob es in der Nachbarschaft von anderen Rechtecken ist, als es in Ordnung ist, können Sie es weiterreichen. Diese Zahl bestimmt also, wie viel Nachbarschaft als Gesichtsrechteck benötigt wird. Im gleichen Bild, wenn es :

minNeighbors = 1

So durch eine Erhöhung dieser Zahl, die Sie Fehlalarme eliminieren, aber vorsichtig sein, indem sie sie zu erhöhen Sie auch richtig Positiven verlieren. Wenn es ein perfektes Ergebnis:

minNeighbors = 3

+3

- keine Angst, Bilder sind alle sichtbar. – berak

+1

+1 - nette Erklärung –

+0

Aber warum, wenn minNighbors auf 1 gesetzt wird, wählt es nicht die markierte Region aus? [link] (https://drive.google.com/file/d/0Bwc6G0Ct0fzFeURXbWJHdUswYlk/edit?usp=sharing) – blakeO

5

Von OpenCV documentation:

minNeighbors - Parameter spezifiziert, wie viele Nachbarn sollte jeder Kandidat Rechteck, um es zu behalten haben.

Mit anderen Worten, dieser Parameter beeinflusst die Qualität der erkannten Gesichter. Höherer Wert führt zu weniger Erkennungen, aber zu höherer Qualität.

Die Idee hinter diesen Parametern ist, dass der Detektor auf einen mehrere Skala Stil und zugleich folgende Schiebefenster Strategie laufen wird. Nach diesem Schritt erhalten Sie mehrere Antworten sogar für eine einzelne Gesichtsregion. Dieser Parameter neigt dazu, diese Antworten zu filtern, ähnlich wie durch Einrichten eines unteren Schwellenwerts, d. H. Er wird nur als gültiges Flächenelement gezählt, wenn die Anzahl der Antworten für dieses Flächenelement höher als minNeighbors ist.


Um andere Parameter von CascadeClassifier::detectMultiScale zu lernen Besuche this post, die ich früher beantwortet.

Verwandte Themen