Fragen zur Struktur aus der Bewegungspipeline

8

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.

  1. Extrahiere SIFT / SURF-Schlüsselpunkte aus den Bildern.
  2. Paarweise Anpassung von Bildern.
    1. Beim Pairwise-Matching verwende ich den "Ratio Test", um die Anzahl der Keypoints zu reduzieren.
    2. (Ich bin mir nicht sicher) Ich lese, dass die Berechnung der Fundamental Matrix (RANSAC) und die Beseitigung der Ausreißer aus Matches weiter hilft.
        

      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?

    3.   
  3.   
  4. Als nächstes muss ich 2 Bilder auswählen, um mit der Rekonstruktion zu beginnen.   

    1. Ich finde die Anzahl der Homography Inlier zwischen den Bildpaaren. Ich durchläuft eine Liste von Bildpaaren in der Reihenfolge der meisten Anzahl von% Inlier.
    2.   
    3. Ich berechne die Fundamental Matrix.
    4.   
    5. Ich "rate" eine K-Matrix und berechne die Essential Matrix mit der Formel in Hartley's.
    6.   
    7. Ich zerlege diese Essential Matrix mit SVD und überprüfe dann die 4 Lösungen.   
      • Ich habe die Logik aus dem Eintrag von Wikipedia und diesem Python verwendet, um meine Checks zu implementieren.
          

        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?

      •   
    8.   
    9. Wenn ein Problem bei der Suche nach Essential Matrix aufgetreten ist, überspringen Sie es und überprüfen Sie das nächste Bildpaar
    10.   
  5. 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.

  6. 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.

  7. Wählen Sie das nächste hinzuzufügende Bild basierend auf der größten Anzahl der beobachteten 3D-Punkte.

  8. Schätzen Sie die Pose dieses neuen Bildes anhand bereits bekannter 3D-Punkte mit PnPRasnac. Verwenden Sie die Werte von R & amp; t als projektive Matrix P1 = [R | t]
  9. 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?

  10. Fügen Sie aus den Punkten, die wir aus der Triangulation erhalten, nur jene 3D-Punkte hinzu, die wir noch nicht gespeichert haben.

  11. Führen Sie nach einigen Bildern eine Bundle-Anpassung durch
  12. Zurück zu Schritt 6, bis alle Bilder hinzugefügt sind.

Allgemeine Fragen:

  • Sollte ich für die Punkte oder auch etwas ohne Verzerrung verwenden meine Kameramatrix K ist nur eine Vermutung?
  • Für die Bündelanpassung gebe ich die Punkte in eine Datei im Bündelanpassung im Großformat (BAL). Sollte ich sie konvertieren? zum Weltkoordinatenraum von R = R '& amp; T = -RT oder lass sie einfach sein?

Ich weiß, dass das für eine lange Lese gemacht haben muss. Vielen Dank für Ihre Zeit:)

    
user3380068 25.04.2014, 09:35
quelle

2 Antworten

1

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.

    
karttinen 22.07.2014 11:54
quelle
1

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

    
Francois Zard 05.01.2016 03:05
quelle