Ich habe auf zwei Bildern mit demselben Objekt Konturen gefunden und möchte die Verschiebung und Drehung dieses Objekts feststellen. Ich habe es mit gedrehten Begrenzungsrahmen dieser Konturen und ihren Winkeln und Mittelpunkten versucht, aber Drehungen der Begrenzungsrahmen geben keine Auskunft über die korrekte Konturrotation, da dies auch für die Winkel a + 0, a + 90, a + 180 usw. gilt. grad. Ist es eine andere gute Möglichkeit, die Rotation und Verschiebung von Konturen zu finden? Möglicherweise etwas Gebrauch der konvexen Hülle, Konvexitätsdefekte? Ich habe in Learning OpenCv über das Anpassen von Konturen gelesen, aber es hat nicht geholfen. Könnte jemand ein Beispiel geben?
Beispiele:
Ich möchte zum Beispiel ein rosa Quadrat und im zweiten Fall einen Stift erkennen. Andere Beispiele könnten Quadrate mit einigen Löchern, Sternen usw. sein. Vorschläge sind willkommen, da ich so viele Methoden wie möglich testen möchte.
Antworten:
Müssen Sie sich um einen Unterschied im Maßstab zwischen den Konturen sorgen? Wenn nicht, können Sie einfach den Schwerpunkt jeder Kontur finden und die Verschiebung berechnen, indem Sie einen von den anderen subtrahieren. Dann können Sie die Hauptachsen der Konturen berechnen und den Drehwinkel zwischen ihnen ermitteln.
Wenn es sich um eine Skalierung handelt, können Sie den Skalierungsfaktor berechnen, indem Sie das Verhältnis der entsprechenden Hauptachsen verwenden.
quelle
Wenn Sie sich keine Gedanken über Skalierung oder projektive Verzerrungen machen müssen, können Kettencodes hier Abhilfe schaffen. Wenn Sie Kettencodes mit ungefähr der gleichen Form und dem gleichen Maßstab haben, können Sie eine Übersetzung mit eindimensionaler FFT-Phasenkorrelation finden: http://en.wikipedia.org/wiki/Phase_correlation
Wenn Sie projektive Verzerrungen berücksichtigen müssen, können Sie auch Feature-Punkte (wie Ecken) anstelle von Konturen verwenden.
quelle
In der Frage sagst du
aber ich fürchte, es ist ziemlich schwierig, eine "universelle" Lösung für das Problem zu finden.
Sie können eine im Handel erhältliche Pattern-Locator-Software kaufen und in Ihre Anwendung integrieren. In der Regel funktionieren sie für eine Vielzahl von Anwendungen recht gut. Nur um Ihnen eine Idee zu geben, dies ist das Referenzhandbuch für ein solches Produkt http://www.lmi3d.com/sites/default/files/support/4.2.0.70-hexsight_user_guide.pdf
Sie können auch eine Ad-hoc-Lösung für einen bestimmten Fall entwickeln (z. B. für den Stift in Ihrem Bild).
Andernfalls können Sie das Problem gründlich untersuchen, ausgehend von den grundlegenden Grundlagen der Berechnungsgeometrie ( http://www.cs.sunysb.edu/~algorith/files/shape-similarity.shtml ), wo Ihre "Konturen" genannt werden "polygon", liest Sachen wie:
M. de Berg, O. Devillers, M. Kreveld, O. Schwarzkopf und M. Teillaud. Berechnen der maximalen Überlappung von zwei konvexen Polygonen unter Übersetzungen. Theoretical Computer Science, 31: 613–628, 1998.
und
H. Ahn, O. Cheong, C. Park, C. Shin und A. Vigneron. Maximierung der Überlappung von zwei planaren konvexen Mengen unter starren Bewegungen. Computational Geometry: Theory and Applications, 37: 3–15, 2007.
und endend mit "Hierarchische Echtzeiterkennung zusammengesetzter Objekte in Bildern" von Markus Ulrich, der mit MVTec zusammenarbeitet , einem anderen Softwarehaus, das Objekterkennungssoftware-Tools verkauft.
quelle