Ist es möglich, eine fronto-parallele Ansicht der Bild- oder Kamera-Position durch 2D-3D-Punkte-Beziehung zu erhalten?
-
27-10-2019 - |
Frage
Ist es möglich, eine Frontparallelansicht der Bild- oder Kamera-Position durch 2D-3D-Punkte-Beziehung zu erhalten OpenCV
?
Dafür habe ich intrinsische und extrinsische Parameter. Ich habe auch 3D-Koordinaten von Kontrollpunkten (die in einer Ebene in einer Ebene) auf dem Bild (Beziehung 2D-3D) liegen.
Tatsächlich brauche ich Ort und Ausrichtung der Kamera, aber es ist nicht schwierig, sie zu finden, wenn ich Bild in die fronto-parallele Ansicht umwandeln kann.
Wenn es mit OpenCV nicht möglich ist, können die anderen Bibliotheken diese Aufgabe lösen?
Lösung
Die Lösung basiert auf den Formeln in der OpenCV -Dokumentation Kamerakalibrierung und 3D -Rekonstruktion
Betrachten wir die numerische Form ohne Verzerrungskoeffizient (im Gegensatz zur Matrixform).
Wir haben u
und v
.
Es ist leicht zu berechnen x'
und y'
.
Aber x
und y
kann nicht berechnet werden, da wir jeden ungleich Null auswählen können z
.
Die Linie in 3D entspricht einem Punkt im 2D -Bild.
Um dies zu lösen, nehmen wir zwei Punkte für z=1
und z=2
. Dann finden wir 2 Punkte im 3D -Raum, die die Linie angeben (x1,y1,z1)
und (x2,y2,z2)
.
Dann können wir uns bewerben R
-1 zu (x1,y1,z1)
und (x2,y2,z2)
Dies führt zu einer Linie, die durch zwei Punkte bestimmt wird (X1, Y1, Z1)
und (X1, Y1, Z1)
.
Da unsere Kontrollpunkte in einer Ebene liegen (die Ebene der Ebene ist z = 0, können wir entsprechend finden X
und Y
Punkt, der ein Punkt in 3D ist.
Nach der Normalisierung von angewendet von mm
Zu Pixeln erhalten wir ein fronto-paralleles Bild.
(Wenn wir das Eingabebild verzerrt haben, sollten wir es zuerst nicht stortieren)