Wie erhält man in einem kalibrierten Stereo-Vision-Rig die „Kameramatrizen“, die für die Implementierung eines 3D-Triangulationsalgorithmus benötigt werden?

Ich versuche, die (relativ einfache) linear homogene (DLT) 3D-Triangulationsmethode aus Hartley & Zissermans "Multiple View Geometry" (Abschnitt 12.2) zu implementieren, um in Zukunft ihren vollständigen "optimalen Algorithmus" zu implementieren. Im Moment basiert aufdiese FrageIch versuche, es in Matlab zum Laufen zu bringen und werde es später in C ++ und OpenCV portieren und dabei auf Konformität prüfen.

Das Problem ist, dass ich nicht sicher bin, wie ich meine Daten verwenden soll. Ich habe mein Stereo-Rig kalibriert und die beiden intrinsischen Kameramatrizen, zwei Vektoren der Verzerrungskoeffizienten, die Rotationsmatrix und den Translationsvektor, die die beiden Kameras betreffen, sowie die wesentlichen und fundamentalen Matrizen erhalten. Ich habe auch die 2D-Koordinaten von zwei Punkten, die Entsprechungen eines einzelnen 3D-Punktes in den Koordinatensystemen der beiden Bilder sein sollen (aufgenommen von der 1. bzw. 2. Kamera).

Der Algorithmus nimmt als Eingabe die zwei Punktkoordinaten und zwei 4 × 3 "Kameramatrizen" P und P '. Dies sind offensichtlich nicht die intrinsischen Kameramatrizen (M, M '), die aus der Kalibrierung erhalten wurden, da sie zum einen 3x3 sind und auch, weil die Projektion, die sie alleine verwendet, einen 3D-Punkt in zwei verschiedene Koordinatensysteme legt, dh - die extrinsische ( Rotations- / Translationsdaten fehlen.

Das H & Z-Buch enthält Informationen (Kapitel 9) zur Wiederherstellung der erforderlichen Matrizen aus der Grund- oder der Grundmatrix unter Verwendung der SVD-Zerlegung, jedoch mit eigenen zusätzlichen Problemen (z. B. Skalenmehrdeutigkeit). Ich habe das Gefühl, dass ich das nicht brauche, da ich die Rotation und Übersetzung explizit definiert habe.

Die Frage ist dann: Wäre es richtig, die erste intrinsische Matrix mit einer zusätzlichen Spalte von Nullen als erste "Kameramatrix" (P = [M | 0]) zu verwenden und dann die zweite intrinsische Matrix mit einer extrinsischen Matrix zu multiplizieren aus der Rotationsmatrix und dem Translationsvektor als zusätzliche Spalte zusammengesetzt, um die zweite erforderliche "Kameramatrix" zu erhalten (P '= M' * [R | t])? Oder sollte es anders gemacht werden?

Vielen Dank!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage