2013-09-26 12 views
9

Ich verwendete OpenCVs cv::findHomography API, um die Homographie-Matrix von zwei planaren Bildern zu berechnen. Die übereinstimmenden Schlüsselpunkte werden von SIFT extrahiert und von BFMatcher abgeglichen. Wie ich weiß, cv:findHomography verwenden RANSAC Iteration, um die besten vier entsprechenden Punkte zu ermitteln, um die Homographie-Matrix zu erhalten. Also zeichne ich die ausgewählten vier Punktepaare mit der berechneten Kontur unter Verwendung der homographischen Matrix der Kante des Objekts. Das Ergebnis sind als Links:Wie verbessert man die Homographiegenauigkeit?

http://postimg.org/image/5igwvfrx9/

Wie wir die gewählten sehen können, Punkte angepasst RANSAC korrekt sind, aber die Kontur zeigt, dass die Homografie nicht korrekt ist.

Aber dieser Test zeigt, dass sowohl die ausgewählten Punkte angepasst und die Homografie korrekt sind:

http://postimg.org/image/dvjnvtm53/

Meine Vermutung ist, dass, wenn die gewählte abgestimmt Punkte zu nahe sind, die kleinen Fehler der Pixelposition wird zu dem signifikanten Fehler der Homographiematrix führen. Wenn die vier Punkte in der Ecke des Bildes liegen, dann hat die Verschiebung der angepaßten Punkte um 4-6 Pixel immer noch eine gute Homographie-Matrix. (entsprechend der homogenen Koordinate, ich denke, es ist vernünftig, da der kleine Fehler in der nahen Ebene wird in der weit weg verstärkt werden)

Meine Frage ist:

1.Is meine Vermutung richtig? 2. Da die vier übereinstimmenden Punkte durch die RANSAC-Iteration erzeugt werden, ist der Gesamtfehler aller Schlüsselpunkte minimal. Aber wie kann man die stabile Homographie erhalten, indem man zumindest das Mapping der Kontur korrekt macht? Die Theorie bewies, dass, wenn die vier entsprechenden Punkte in einer Ebene gefunden werden, die Homographiematrix berechnet werden sollte, aber gibt es einen Trick in der Ingenieurarbeit?

Vielen Dank.

+0

Haben Sie eine Lösung oder Erklärung gefunden? Ich habe das gleiche Problem – MMH

Antwort

5

Ich denke, Sie haben Recht, und die Nähe der 4 Punkte hilft nicht die Genauigkeit des Ergebnisses. Was Sie beobachten, wird möglicherweise durch numerische Probleme verursacht: Das Ergebnis kann lokal korrekt für diese 4 Punkte sein, wird aber schlechter, wenn Sie weiter gehen.

Allerdings wird RANSAC Ihnen hier nicht helfen. Der Grund ist einfach: RANSAC ist ein robustes Schätzverfahren, das entwickelt wurde, um die besten Punktpaare unter vielen Entsprechungen (einschließlich einiger falscher) zu finden. Dann wird in der inneren Schleife des RANSAC eine Standard-Homographie-Schätzung durchgeführt.

Sie können RANSAC als Art und Weise sehen falsch Punktkorrespondenzen zu verwerfen, die ein schlechtes Ergebnis provozieren würde.

Zurück zu Ihrem Problem:

Was Sie wirklich brauchen, ist mehr Punkte zu haben. In Ihren Beispielen verwenden Sie nur 4 Punktkorrespondenzen, was gerade ausreicht, um eine Homographie zu schätzen. Sie verbessern Ihr Ergebnis, indem Sie im gesamten Zielbild mehr Übereinstimmungen bereitstellen. Das Problem wird dann überbestimmt, aber eine Lösung der kleinsten Quadrate kann immer noch von OpenCV gefunden werden.Darüber hinaus ist RANSAC in der Lage, die besten Ergebnisse zu ermitteln und trotzdem zuverlässige Ergebnisse zu liefern.

Wenn RANSAC zu einer Überanpassung an 4 Punkten führt (wie es in Ihrem Beispiel der Fall zu sein scheint), versuchen Sie, die Einschränkung zu lockern, indem Sie den Parameter ransacReprojThreshold erhöhen. Alternativ können Sie entweder:

  • Verwendung einen anderer Schätzer (die robuste Median CV_LMEDS ist eine gute Wahl, wenn es nur wenige Abstimmungsfehler)
  • oder RANSAC mit einem großen Rückprojektions Fehler in einem ersten Schritt verwenden ((um eine grobe Schätzung zu erhalten), um die unechten Matchings zu erkennen, verwenden Sie dann LMEDS auf den richtigen.
+0

danke für Ihr Feedback. Vielleicht habe ich es nicht deutlich genug beschrieben.In der Tat habe ich cvFindHomography mit etwa hundert übereinstimmenden Punkten versehen. Ich habe den Ransac-Quellcode in opencv untersucht, die vier Punkte, die ich gezeichnet habe, sind, was der Ransac-Prozess am besten bewertet (es ist eine Art Iteration und jedes Mal vier Paare von Punkten), leider nicht immer ergibt sich eine gute Homographiematrix, obwohl die Punktepaare von den menschlichen Augen scheinbar übereinstimmen. – binzhang

+1

Mein Experiment zeigt: Wenn die bereitgestellten übereinstimmenden Schlüsselpunkte auf die Mitte des Rechtecks ​​verteilt sind. Wenn ich dann die berechnete Homographie zum Transformieren der Eckpunkte des Rechtecks ​​verwende, ist der Fehler groß mit der kleinen Verschiebung der Position der Schlüsselpunkte. Wenn die Position der aufgenommenen übereinstimmenden Schlüsselpunkte auf jede der vier Ecken des Rechtecks ​​verteilt ist. Dann, wenn ich die Homographie verwende, um Punkte innerhalb des Rechtecks ​​zu transformieren, ist das Ergebnis korrekt. Also mein Problem ist, wenn ich nur Schlüsselpunkte in der Nähe der Mitte des Rechtecks ​​bekommen kann, wie kann ich die Leistung verbessern? – binzhang

+0

Dies ist offensichtlich. Center Matches werden Ihnen viel größeren Fehler bringen. Versuche, ein paar Eckpaare zu bekommen. Verbessere deine wichtigsten Kandidaten. – SolessChong

3

Gerade @ Sansuiso Antwort zu erweitern, mit denen ich zustimme:

Wenn Sie rund 100 Korrespondenzen RANSAC bieten, wahrscheinlich mehr als 4 inliers von cvFindHomography Sie bekommen. Überprüfen Sie den Ausgangsparameter status. Um eine gute Homographie zu erhalten, sollten Sie mehr als 4 Korrespondenzen haben (beachten Sie, dass 4 Korrespondenzen Ihnen immer eine Homographie geben), die gut um das Bild verteilt sind und nicht linear sind. Sie können tatsächlich eine Mindestanzahl von Inlierern verwenden, um zu entscheiden, ob die erhaltene Homographie gut genug ist.

Beachten Sie, dass RANSAC eine Reihe von konsistenten Punkten findet, aber die Art und Weise, wie dieser Satz der beste ist (der Reprojektionsfehler) ist ein bisschen begrenzt. Es gibt eine RANSAC-ähnliche Methode namens MSAC, die eine etwas andere Fehlermessung verwendet, überprüfen Sie sie.

Die schlechten Nachrichten, ist meiner Erfahrung nach, dass es wenig wahrscheinlich ist, eine 100% Präzisions-Homographie die meiste Zeit zu erhalten. Wenn Sie mehrere ähnliche Bilder haben, ist es möglich, dass Sie sehen, dass sich die Homographie ein wenig ändert.

Es gibt Tricks, um dies zu verbessern. Wenn Sie beispielsweise eine Homographie mit RANSAC erstellt haben, können Sie damit Ihr Modell in das Bild projizieren und nach neuen Übereinstimmungen suchen, so dass Sie eine weitere Homographie finden, die genauer sein sollte.

0

Ihr Ziel hat viele symmetrische und ähnliche Elemente. Wie andere Leute erwähnten (und Sie später geklärt haben), kann der Punktabstand und die Punktnummer ein Problem sein. Ein weiteres Problem besteht darin, dass SIFT nicht dafür ausgelegt ist, mit erheblichen perspektivischen Verzerrungen umzugehen, die in Ihrem Fall vorhanden sind. Versuchen Sie, Ihr Objekt durch kleinere Drehungen zu verfolgen, und reprojectieren Sie es mit der neuesten Homographie, um es so nah wie möglich an das Original zu bringen. Dies ermöglicht Ihnen auch, die Verarbeitung von schwerem SIFT zu überspringen und etwas so Leichtes wie FAST zu verwenden, mit Kreuzkorrelation von Bildpatches für die Übereinstimmung.

Sie können auch irgendwann zu dem Verständnis kommen, dass die Verwendung von Punkten nicht ausreicht. Sie müssen alles verwenden, was Sie haben, und das bedeutet Linien oder Kegelschnitte. Wenn eine Homographie einen Punkt Pb = H * Pa transformiert, ist es leicht nachzuweisen, dass in homogenen Koordinaten die Linie Lb = Henv.trans- poniert * La. Direkt aus der Gleichung La' folgt. Pa = 0 = La '* Hinv * H * Pa = La '* Hinv * Pb = Lb'.Pb Die mögliche min. Konfigurationen sind 1 Zeile und drei Punkte oder drei Zeilen und ein Punkt. Zwei Zeilen und zwei Punkte funktionieren nicht. Sie können auch vier Linien oder vier Punkte verwenden. Das bedeutet natürlich, dass Sie die Funktion openCV nicht mehr verwenden können und Sie müssen Ihre eigene DLT und dann nicht-lineare Optimierung schreiben.

Verwandte Themen