2017-11-17 5 views
0

So habe ich mit diesem Problem für eine Weile gekämpft, so würde ich es schätzen, wenn jemand mir damit geholfen.Rotation auf pattern matched Bild mit SIFT über OpenCV Python

Ich versuche einen physischen Roboter zu erstellen, der ein Puzzle löst. Das Bild des fertigen Puzzle wird zusammen mit einem Bild von verstreuten Stücke

Scattered piece picture

Ich habe opencv bekommen zur Verfügung gestellt werden Konturen zu finden und jedes Stück herausgreifen und sie drehen, so dass sie alle parallel zu den horizontalen Achsen (alle "diamond" oder "diagonal" Stücke sind gedreht, so dass sie wie Quadrate aussehen)

Ich habe SIFT verwendet, um eine Reihe kleiner quadratischer Stücke an das Gesamtbild anzupassen.

Comparing an un-rotated square piece to the full picture

Das Problem ist, das nicht in der richtigen Ausrichtung ist. Wie würde ich herausfinden, ob ich 90, 180, 270 Grad drehen muss?

Ein anderes Problem, das ich habe, ist zu bestimmen, in welchem ​​Quadranten (nicht-adrant?) Das Stück ist. Zum Beispiel gehört dieses Stück zur unteren rechten Ecke. Gibt es eine Funktion, die die meisten ähnlichen Schlüsselpunkte identifiziert und dann in eine der neun Regionen einordnet?

Antwort

0

Da SIFT rotationsinvariant sind, ist es gut, dass das Feature übereinstimmt, obwohl Sie eine Rotation haben.

Um festzustellen, wie viel Rotation Sie benötigen, müssen Sie in der Regel den Kalibrierungsparameter Ihrer Kamera verwenden, um das Bild in eine Ansicht von oben nach unten zu projizieren. Für Ihren Roboter sieht es so aus, als wären die Bilder bereits von oben nach unten.

Wenn diese Annahme zutrifft, können Sie eine Regression durchführen, um herauszufinden, welchen Winkel Sie benötigen, um Ihr Stück zu drehen. Wenn Sie auch wissen, dass Ihre Stücke immer quadratisch sind, haben Sie nur 4 Auswahlmöglichkeiten. In diesem Fall können Sie alle 4 ausprobieren und sehen, welches dem extrahierten Patch "am nächsten" ist (über SIFT mit dem großen Bild abgeglichen).

Die Bestimmung des Quadranten, in dem sich das übereinstimmende Teil befindet, kann durch Betrachten der Koordinaten der übereinstimmenden Punkte erfolgen. Ihre Entfernung zu den Ecken sollte sein, was Sie brauchen.

+0

Hallo, können Sie etwas genauer auf die Durchführung einer Regression eingehen? Ich habe darüber nachgedacht und, wenn ich den Roboter brauche, um das Stück den gesamten fehlenden Winkel irgendwie zu drehen, könnte ich genauso gut den benötigten Winkel auf einmal berechnen, anstatt es vorzeitig zu drehen und dann zu berechnen, welche der vier Optionen zu Führen Sie – elliot430

+0

aus. Sie müssten sich für eine Kostenfunktion entscheiden. In diesem Fall wird durch das Anwenden einer Transformation wie Drehung auf Ihr Bild ein anderes Bild erzeugt. Sie können dieses Bild mit dem Zielfeld vergleichen, um den Winkel zu finden, der die geringsten Kosten verursacht. –

Verwandte Themen