Ich habe versucht, eine einfache SFM-Pipeline in OpenCV für ein Projekt zu implementieren, und ich habe ein paar Probleme.
Es ist für unkalibrierte Kameras, also habe ich keine Kameramatrix (Ja Ich weiß, dass es die Dinge viel komplizierter und mehrdeutig machen wird.
Ich weiß, dass ich viel mehr lesen sollte, bevor ich so etwas versuche, aber ich bin ziemlich schwer unter Zeitdruck und versuche, darüber zu lesen Dinge, wie ich auf sie stoße.
Hier ist meine aktuelle Pipeline, die ich aus einer Reihe von Artikeln, Codebeispielen und Büchern zusammengestellt habe. Ich habe Fragen zu bestimmten Schritten danach gestellt und möchte auch wissen, ob etwas fehlt, was mir fehlt oder etwas, das ich falsch mache?
Hier ist meine aktuelle Pipeline.
F) Muss ich das auch tun? Ist es zu viel Oder sollte ich etwas anderes wie Homographie machen, um den entarteten Fall des 8-Punktes zu vermeiden?
Als nächstes muss ich 2 Bilder auswählen, um mit der Rekonstruktion zu beginnen.
Q) Ist das richtig? Oder sollte ich einfach die Punkte triangulieren und dann feststellen, ob sie vor der Kamera sind oder nicht, oder funktioniert es für dasselbe?
Setze P = [I | 0] und P1 = [R | T], führe eine Triangulation durch und speichere die 3D-Punkte in einer Datenstruktur. Speichern Sie auch die P-Matrizen.
Führen Sie einen Bündelanpassungsschritt mit einer großen Anzahl von Iterationen durch, um den Fehler zu minimieren.
Es wird ein bisschen verschwommen von hier und ich bin mir ziemlich sicher, dass ich etwas vermasselt habe.
Wählen Sie das nächste hinzuzufügende Bild basierend auf der größten Anzahl der beobachteten 3D-Punkte.
Triangulieren Sie dieses neue Bild mit allen (ich weiß, ich muss es nicht mit ALLEN tun) die Bilder, die bisher triangulierten, indem Sie ihre P-Matrizen als P = PMatrices [ImageAlreadyTriangulated] und P1 oben erhalten.
Q) Ist es wirklich so einfach, nur den ursprünglichen Wert von P zu verwenden, den wir verwendet haben? Wird das alles in den gleichen Koordinatenraum bringen? Wie in, werden die triangulierten Punkte alle das selbe System sein wie die aus den Anfangswerten von P und P1 oder muss ich hier irgendeine Art von Transformation durchführen?
Fügen Sie aus den Punkten, die wir aus der Triangulation erhalten, nur jene 3D-Punkte hinzu, die wir noch nicht gespeichert haben.
Allgemeine Fragen:
Ich weiß, dass das für eine lange Lese gemacht haben muss. Vielen Dank für Ihre Zeit:)
Ich kann diesen Artikel empfehlen; Ссылка
Um es zu erstellen, benötigen Sie SSBA und PCL-Bibliotheken als Voraussetzungen. SSBA ist ziemlich einfach zu erstellen, aber PCL kann schwierig sein, wenn Sie Visual Studio 2013 verwenden möchten. In diesem Fall müssen Sie die PCL-Voraussetzungen aus der Quelle erstellen und das wird einige Zeit dauern.
Sobald Sie dieses Projekt erstellt haben, können Sie überprüfen, wie dieser Typ es getan hat und mit Ihren Ideen vergleichen.
Die von Ihnen vorgeschlagene Pipeline ist im Allgemeinen korrekt. Außer 3.1.
2.2) Richtig. RANSAC wählt Punkte zufällig aus, um die Grundmatrix zu schätzen, und ist robust genug, um Ausreißer zu sein (solange Sie natürlich genug gültige Übereinstimmungen haben). Homography-Ausreißer sind NICHT unbedingt schlechte Übereinstimmungen und daher sollte Homographie nicht zum Filtern von Übereinstimmungen verwendet werden.
3.1) Falsch: Homographie-Inlier sind Übereinstimmungen, die in beiden Ansichten perfekt ausgerichtet sind, z. B. Punkte, die eine proportionale oder ähnliche Bewegung zwischen den beiden Ansichten aufweisen. Dies bedeutet, je höher die Anzahl der Homography Inlier in einem View-Paar ist, desto weniger ist die ViewPair ein guter Kandidat als Basis für die Baseline-Triangulation. Die Kameramatrizen solcher 2 Ansichten aus einer Fundamental-Matrix, die mit RANSAC geschätzt wurden, werden höchstwahrscheinlich ungenau sein und die Rekonstruierung wird niemals aufgehen. Was Sie stattdessen tun möchten, ist mit der ViewPair zu beginnen, die den niedrigsten Prozentsatz an Homography Inlierern und immer noch eine hohe Anzahl an Matches hat. Unglücklicherweise haben die Bildpaare, die die meisten Übereinstimmungen aufweisen, normalerweise auch die höchste Anzahl an Homografien. Dies ist aufgrund der Tatsache, dass diese Paare in der Regel sehr wenig Kamerabewegung enthalten ...
3.4) Was ich mache, ist die Triangulation mit allen 4 möglichen Kameramatrix-Ambiguationen. R1 | t1, R1 | t2, R2 | t1, R2 | t2
8) Ja
Tags und Links opencv computer-vision 3d 3d-reconstruction