Frage

Ich mache Kamerakalibrierung von Tsai Algo. Ich habe eine intelligente und extrinsische Matrix, aber wie kann ich die 3D -Koordinaten aus dieser Information rekonstruieren?

enter image description here

1) Ich kann Gaußsche Eliminierung für Find X, Y, Z, W verwenden und dann sind Punkte X/W, Y/W, Z/W als homogenes System.

2) Ich kann das verwendenOpenCV -Dokumentation sich nähern:

enter image description here

wie ich weiss u, v, R , t , Ich kann berechnen X,Y,Z.

Beide Methoden landen jedoch in verschiedenen Ergebnissen, die nicht korrekt sind.

Was bin ich falsch?

War es hilfreich?

Lösung

Wenn Sie extrinsische Parameter erhalten haben, haben Sie alles. Das bedeutet, dass Sie Homographie aus der Extrinsik haben können (auch Camerapose genannt). Pose ist eine 3x4 -Matrix, Homographie ist eine 3x3 -Matrix. H definiert als

                   H = K*[r1, r2, t],       //eqn 8.1, Hartley and Zisserman

mit K Die Kamera intrinsische Matrix sein, R1 und R2 Die ersten beiden Säulen der Rotationsmatrix sind, R; t ist der Übersetzungsvektor.

Dann normalisieren Sie alles durch, um alles durch zu teilen T3.

Was passiert mit der Spalte R3, Nutzen wir es nicht? Nein, weil es überflüssig ist, da es das Querprodukt der 2 ersten Posespalten ist.

Jetzt, da Sie Homographie haben, projizieren Sie die Punkte. Ihre 2D -Punkte sind x, y. Fügen Sie sie az = 1 hinzu, also sind sie jetzt 3D. Projizieren Sie sie wie folgt:

        p          = [x y 1];
        projection = H * p;                   //project
        projnorm   = projection / p(z);      //normalize

Hoffe das hilft.

Andere Tipps

Wie in den obigen Kommentaren gut gesagt, müssen 2D -Bildkoordinaten in 3D -Kameraraum inhärent die Z -Koordinaten ausmachen, da diese Informationen im Bild vollständig verloren gehen. Eine Lösung besteht darin, jedem der 2D -Image -Space -Punkte vor der Projektion einen Dummy -Wert (z = 1) zuzuweisen, wie von Jav_Rock beantwortet.

p          = [x y 1];
projection = H * p;                   //project
projnorm   = projection / p(z);      //normalize

Eine interessante Alternative zu dieser Dummy-Lösung besteht darin, ein Modell zu trainieren, um die Tiefe jedes Punktes vor der Reprojektion in 3D-Kameralaum vorherzusagen. Ich habe diese Methode ausprobiert und hatte einen hohen Erfolg mit einem Pytorch -CNN, der auf 3D -Begrenzungsboxen aus dem Kitti -Datensatz trainiert wurde. Ich würde gerne Code bereitstellen, aber es wäre etwas lang, hier zu posten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top