Ich habe eine kalibrierte Kamera und habe die intrinsischen Parameter. Ich habe auch die extrinsischen Parameter relativ zu einem Punkt (dem Weltursprung) auf einer planaren Oberfläche in der realen Welt. Diesen Punkt habe ich als Ursprung in der realen Welt Koordinaten [0,0,0] mit einer Normalen von [0,0,1] gesetzt.
Aus diesen extrinsischen Parametern kann ich hier die Kameraposition und -rotation in den 3D-Koordinaten der Weltebene ermitteln: http://en.wikipedia.org/wiki/Camera_resectioning
Jetzt habe ich einen zweiten Punkt, an dem ich die Bildkoordinaten für [x, y] extrahiert habe. Wie erhalte ich jetzt die 3D-Position dieses Punktes im Weltkoordinatensystem?
Ich denke, die Intuition hier ist, dass ich einen Strahl verfolgen muss, der vom optischen Zentrum der Kamera (für die ich jetzt die 3D-Position wie oben beschrieben habe) durch die Bildebene [x, y] der Kamera und dann geht durch meine reale Ebene, die ich oben definiert habe.
Jetzt kann ich einen Weltkoordinaten-3D-Strahl mit einer Ebene schneiden, wie ich sie normal kenne, und auf diese Ebene zeigen. Was ich nicht verstehe, ist, wie ich die 3D-Position und -Richtung herausfinde, wenn sie die Bildebene durch ein Pixel verlässt. Es ist die Transformation durch verschiedene Koordinatensysteme, die mich verwirrt.
quelle
Antworten:
Wenn Sie die extrinsischen haben, dann ist es sehr einfach. Extrinsics zu haben ist dasselbe wie "Kamerapose" zu haben und dasselbe wie Homographie zu haben. Überprüfen Sie diesen Beitrag im Stackoverflow.
Sie haben Extrinsics, auch Kamerapose genannt, die als Übersetzung und Rotation beschrieben werden:
Sie können Homografie von Pose folgendermaßen erhalten :
Anschließend können Sie Ihre 2D-Punkte in die entsprechenden 3D-Punkte projizieren, indem Sie die Homografie mit den Punkten multiplizieren:
quelle
Sie können die 3D-Position des zweiten Punkts nicht kennen. Es kann sich um einen beliebigen Punkt auf dem Strahl von der Mitte der Kamera bis ins Unendliche handeln.
Sie können Folgendes tun:
quelle
Sie haben zwei Möglichkeiten: Rückprojektion oder Projektion zwischen zwei Ebenen (Homographie).
Bei der Rückprojektion nehmen Sie eine Pseudo-Inverse Ihrer Kameramatrix und multiplizieren das Ergebnis mit Ihrer homogenen Darstellung des Bildpunkts:P
Jetzt haben Sie eine 3D-Linie, die durch die und den Punkt . Wenn Sie möchten, können Sie dies in eine einfachere Präsentation umwandeln. Zum Beispiel mit einem Punkt- und Richtungsvektor (denken Sie daran, die homogenen Koordinaten so zu normalisieren, dass der Skalierungsfaktor vor den eigentlichen Berechnungen):C X V=ω[XYZ1]T ω=1
Wenn Sie die Ebene , können Sie die Gleichung lösen für .Π=[π1π2π3π4]T,π1X+π2Y+π3Z+π4=0 L(t)=Π t
Wenn Sie sich für die Verwendung der Homografie entscheiden, müssen Sie die Homografiematrix berechnen, die als Projektion zwischen der abgebildeten Ebene und der Ebene des Kamerasensors definiert ist:3×3 H
Wenn Sie nun :x
Wenn Sie das während der Kalibrierung der Kamera nicht berechnet haben (wahrscheinlich mit direkter linearer Transformation, DLT), können Sie die folgende Formulierung verwenden:H
Wobei die Entfernung der Kamera von der Ebene und . (Ma, Soatto, Kosecká, Sastry - Eine Einladung zum 3-D-Sehen von Bildern zu geometrischen Modellen, S. 132)d T=−RC
quelle