Verwenden Sie eine kalibrierte Kamera, um übereinstimmende Punkte für die 3D-Rekonstruktion zu erhalten
-
21-12-2019 - |
Frage
Ich versuche, die 3D-Koordinaten aus mehreren Paaren von zwei Blickpunkten zu berechnen.
Zuerst habe ich die Matlab-Funktion verwendet estimateFundamentalMatrix()
um das zu bekommen F
der übereinstimmenden Punkte (Anzahl > 8), also:
F1 =[-0.000000221102386 0.000000127212463 -0.003908602702784
-0.000000703461004 -0.000000008125894 -0.010618266198273
0.003811584026121 0.012887141181108 0.999845683961494]
Und meine Kamera – die diese beiden Bilder aufgenommen hat – wurde mit der intrinsischen Matrix vorkalibriert:
K = [12636.6659110566, 0, 2541.60550098958
0, 12643.3249022486, 1952.06628069233
0, 0, 1]
Aus diesen Informationen habe ich dann die wesentliche Matrix berechnet mit:
E = K'*F*K
Mit der SVD-Methode habe ich endlich die projektiven Transformationsmatrizen erhalten:
P1 = K*[ I | 0 ]
Und
P2 = K*[ R | t ]
Wo R
Und t
Sind:
R = [ 0.657061402787646 -0.419110137500056 -0.626591577992727
-0.352566614260743 -0.905543541110692 0.235982367268031
-0.666308558758964 0.0658603659069099 -0.742761951588233]
t = [-0.940150699101422
0.320030970080146
0.117033504470591]
Ich weiß, dass es vier mögliche Lösungen geben sollte, meine berechneten 3D-Koordinaten schienen jedoch nicht korrekt zu sein.
Ich habe mit der Kamera ein FLACHES Objekt mit markierten Punkten fotografiert.Ich habe die Punkte von Hand abgeglichen (was bedeutet, dass es keine offensichtlichen Fehler bezüglich des Rohmaterials geben sollte).Das Ergebnis war jedoch eine Oberfläche mit leichten Streifen.
Ich schätze, das könnte daran liegen, dass die Bilder nicht mit Verzerrungen verarbeitet wurden (ich erinnere mich aber, dass das der Fall war).
Ich möchte nur wissen, ob diese Methode das Problem der 3D-Rekonstruktion löst, oder?Vor allem, wenn wir die intrinsische Matrix der Kamera bereits kennen.
Von JCraft am 4. August bearbeitet:Ich habe den Vorgang noch einmal durchgeführt und einige Bilder erhalten, die das Problem zeigen. Ich werde eine weitere Frage mit Einzelheiten schreiben und dann den Link posten.
Von JCraft am 4. August bearbeitet:Ich habe eine neue Frage gepostet: Die kalibrierte Kamera erhält übereinstimmende Punkte für die 3D-Rekonstruktion, der Idealtest ist fehlgeschlagen.Und @Schorsch weiß Ihre Hilfe bei der Formatierung meiner Frage sehr zu schätzen.Ich werde versuchen zu lernen, wie man Eingaben in SO macht, und auch versuchen, meine Grammatik zu verbessern.Danke!
Lösung
Wenn Sie nur über die Grundmatrix und die intrinsischen Werte verfügen, können Sie nur eine maßstabsgetreue Rekonstruktion erhalten.Das ist Ihr Übersetzungsvektor t in einigen unbekannten Einheiten.Sie können die 3D-Punkte in realen Einheiten auf verschiedene Arten erhalten:
- Sie benötigen einige Referenzpunkte auf der Welt mit bekannten Abständen zwischen ihnen.Auf diese Weise können Sie ihre Koordinaten in Ihren unbekannten Einheiten berechnen und den Skalierungsfaktor berechnen, um Ihre unbekannten Einheiten in reale Einheiten umzuwandeln.
- Sie müssen die Extrinsiken jeder Kamera relativ zu einem gemeinsamen Koordinatensystem kennen.Sie können beispielsweise irgendwo in Ihrer Szene ein schachbrettartiges Kalibrierungsmuster haben, das Sie extrinsische Effekte erkennen und daraus berechnen können.Sieh dir das an Beispiel.Wenn Sie die Extrinsiken kennen, können Sie übrigens die Fundamentalmatrix und die Kameraprojektionsmatrizen direkt berechnen, ohne Punkte abgleichen zu müssen.
- Sie können eine Stereokalibrierung durchführen, um R und t zwischen den Kameras abzuschätzen, wodurch Sie auch die Fundamental- und Essential-Matrizen erhalten.Sieh dir das an Beispiel.
Andere Tipps
Flache Gegenstände sind kritische Oberflächen, mit denen man sein Ziel nicht erreichen kann.Versuchen Sie, zwei (oder mehr) Punkte außerhalb des Flugzeugs hinzuzufügen (siehe Hartley und Zisserman oder einen anderen Text zu diesem Thema, falls weiterhin Interesse besteht)