Richtige Art und Weise zu extrahieren, die Übersetzung aus der Essentiellen Matrix durch SVD
Ich kalibrierte meine Kamera gefunden und die intrinsischen Parameter(K). Auch ich habe berechnet, die Grundlegende Matrix (F).
Nun E= K_T* F * K . So weit So gut.
Nun passieren wir die Essential-Matrix(E) der SVD zu verwenden, die Zersetzung Werte (U,W,V) zum extrahieren der Rotation und Translation:
essentialMatrix = K.Transpose().Mul(fund).Mul(K);
CvInvoke.cvSVD(essentialMatrix, wMatrix, uMatrix, vMatrix, Emgu.CV.CvEnum.SVD_TYPE.CV_SVD_DEFAULT);
** Frage) An dieser Stelle werden zwei Methoden vorgeschlagen worden, und es verwirrt mich das man wirklich die richtige Antwort - speziell für die Übersetzung:
Bei der ersten Methode geben Sie den link-Beschreibung hier der Autor schlägt vor, die Berechnung der R -, T -, wie folgend:
Aber in der Zweiten Methode [http://isit.u-clermont1.fr/~ab/Classes/DIKU-3DCV2/Handouts/Lecture16.pdf] der Autor bietet eine andere Formel für T, die +U , -U, wie unten gezeigt:
Ich bin Umsetzung dieses auf C# .Net mit openCv-Bibliotheken. Niemand weiß, welche Übersetzung der Formel ist die richtige?
- Den link für die zweite Methode ist tot. Das Dokument verschoben: igt.ip.uca.fr/~ab/Classes/DIKU-3DCV2/Handouts/Lecture16.pdf
Du musst angemeldet sein, um einen Kommentar abzugeben.
die erste Lösung zeigt die matrix-Darstellung das Kreuzprodukt mit dem Vektor t (also erste Lösung = [t], x ), während die zweite Lösung zeigt nur den translationsvektor t (https://en.wikipedia.org/wiki/Essential_matrix).
Die definition von [t]x:
(aus http://gandalf-library.sourceforge.net/tutorial/report/img148.png)
SVD(E).u.col(2)
, wie es beschrieben wird in der zweiten Methode, Ihre post. wie kann Sie extrahieren Ihre 3x3 übersetzung matrix? Sie können auch einen Blick auf stackoverflow.com/questions/16639106/... für weitere Informationendecomp.u.col(2)
gibt einen 3x1-Vektor). durch die Verwendung von SVD, erhalten Sie 4 mögliche Lösungen, 2 fürR
und 2 fürt
. um die richtige Lösung der beiden, die Sie verwenden können, triangulation. wenn Sie Lesen, die andere Frage, die sorgfältig, Sie sehen werden, dass zwischen ` t1\t2 = decomp.u.col(2);` undnew_pos = old_pos + -R.t()*t;
die triangulation ist fertig (link in Frage). Auch die Kommentare zu Lesen, die Punkte aus einem Missverständnis in der SVD-Berechnung