Nach Hartley / Zisserman's Multiview Geometry, Algorithmus 12: Die optimale Triangulationsmethode (p318), habe ich die entsprechenden Bildpunkte xhat1 und xhat2 (Schritt 10). In Schritt 11 muss der 3D-Punkt Xhat berechnet werden. Eine solche Methode ist die direkte lineare Transformation (DLT), die in 12.2 (p312) und 4.1 (p88) erwähnt wird.
Die homogene Methode (DLT), p312-313, gibt an, dass sie eine Lösung als Einheitsvektor findet, der dem kleinsten singulären Wert von A entspricht, also
%Vor%Allerdings ist A eine 16x1-Matrix, was zu einem Va von 1x1 führt.
Was mache ich falsch (und eine Lösung), um den 3D-Punkt zu bekommen?
Für was es wert ist, Beispieldaten:
%Vor%Update Arbeitscode für Abschnitt xi im Algorithmus
%Vor% Wie im Buch (Abschnitt 12.2) erwähnt, sind p i T die Zeilen von < stark> P . Daher müssen Sie P1(k,:)
nicht transponieren (d. H. Die richtige Formel ist A = [xhat1(1) * P1(3,:) - P1(1,:) ; ...
).
Ich hoffe, das war nur ein Tippfehler.
Zusätzlich wird empfohlen, jede Zeile von A
mit ihrer L2-Norm zu normalisieren, d. h. für alle i
A(i,:) = A(i,:)/norm(A(i,:));
Und wenn Sie die triangulierten 3D-Punkte plotten möchten, müssen Sie Xhat
vor dem Plotten normalisieren (ansonsten bedeutungslos), d. h.
Xhat = Xhat/Xhat(4);
Tags und Links matlab computer-vision linear-algebra