2

Ich muss das Muster von 6 Kreisen mit opencv erkennen. Ich habe die Kreise und ihre Schwerpunkte durch Schwellwert- und Konturfunktionen in opencv erkannt.Erkennung von Muster von Kreisen mit opencv

Jetzt muss ich die Beziehung zwischen diesen Kreisen auf eine Weise definieren, die invariant sein sollte für Maßstab und Rotation. Damit wäre ich in der Lage, dieses Muster in verschiedenen Ansichten zu erkennen. Ich muss dieses Muster verwenden, um die Objektpose zu bestimmen.

Wie erreiche ich Scale/Rotation Invarianz? Hast du irgendwelche Hinweise, die ich darüber lesen könnte?

+0

mögliche Duplikate von [Schreiben robuste (Farbe und Größe Invariante) Kreis Erkennung mit Opencv (basierend auf Hough-Transformation oder andere Funktionen)] (http://StackOverflow.com/Questions/9860667/Writing-Robust-Color-and- größeninvariante Kreisdetektion mit Opencv-based on) – karlphillip

+0

Vielleicht möchten Sie die Punktabgleichung oder Bildregistrierung überprüfen.Ein einfacher Weg, um eine translations- und rotationsinvariante Beschreibung Ihrer Punkte zu erhalten, könnte auch die Positionen relativ zu einem Punktepaar berechnen. Zum Beispiel indem man den Abstand zwischen diesen beiden Punkten auf 1 normalisiert und ihn auf einen Grad von Null dreht. Dann müssen Sie natürlich das gleiche Paar in Ihrer zweiten Reihe von Punkten finden. Aber mit nur 6 Punkten ist es möglich, alle möglichen Kombinationen zu testen. – sietschie

+0

Es wäre besser, wenn Sie Ihr Bild hier hinzufügen könnten. Oder laden Sie ein Bild in imageshack.us hoch und geben Sie hier einen Link an. –

Antwort

1

Um Ihr Muster unveränderlich in Richtung der & Skalierung zu machen, müssen Sie die Richtung und die Skalierung normalisieren, wenn Sie Ihr Muster erkennen. Hier ist ein einfacher Algorithmus diese

  • erkennen Zentren und Kreisgröße zu erreichen (Sie sagen, Sie haben dies bereits erreicht - gut)
  • berechnen die durchschnittliche Zentrum ein einfaches Mittel verwenden. Express all Zentren von diesem Mittelwert
  • das weiteste Zentrum finden einen einfachen Standard benutzt (euklidisches ist gut genug)
  • Skala der Mittelposition und die Kreisgröße so, dass diese maximale Entfernung 1.0
  • die Zentren drehen, so dass Koordinaten des weitesten ist (1.0, 0)

du bist fertig. Sie sind jetzt stolzer Besitzer eines Scale/Rotation Invariant Pattern Detektors !! Herzliche Glückwünsche!

Jetzt können Sie Muster finden, sie wie vorgeschlagen umwandeln und die Mittelposition & Kreisgrößen vergleichen.

+0

vielen dank für eine so detaillierte und gut erklärte antwort verstehe ich jetzt wie man das macht :) – shan

1

Es ist mir nicht ganz klar, ob Sie die Rotation finden müssen oder sie einfach loswerden müssen oder ob die Kreise tatsächlich das Muster bilden, das Sie verlinkt haben. Wie auch immer, die Antwort ist sehr ähnlich.

Ich würde damit beginnen, die zwei Kreise zu finden, die nur einen Nachbarn haben. Berechnen Sie für jeden Kreisschwerpunkt den Abstand zu den nächsten zwei Nachbarn. Wenn sich die Abstände in mehr als 10% unterscheiden, gehört der Schwerpunkt zu einem "End" -Kreis (einer der obersten in Ihrem Link).

Jetzt, wo Sie die beiden Endkreise gefunden haben, drehen Sie sie so, dass sie horizontal zueinander stehen. Wenn sich die anderen Zentroide über ihnen befinden, drehen Sie sie um 180 Grad, so dass das Muster in der von Ihnen gewünschten Ausrichtung endet.

Jetzt können Sie die Skalierung aus dem durchschnittlichen interzentrischen Abstand berechnen.

Hoffe, dass hilft.

+0

Danke, Ihre Kommentare haben mir wirklich geholfen, die Lösung meines Problems zu verstehen. – shan

0

Ihre Frage klingt genau wie der SURF-Algorithmus. Es findet Gruppen von Interesse und gruppiert sie auf eine Weise, die in Drehung und Skalierung eindringt, und kann das gleiche Objekt in anderen Bildern finden.

Suchen Sie einfach nach OpenCV und SURF.