Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Correct way to extract Translation from Essential Matrix through SVD

I calibrated my camera and found the intrinsic parameters(K). Also I have calculated the Fundamental Matrix (F).

Now E= K_T* F * K . So far so good.

Now we pass the Essential Matrix(E) to the SVD to use the decomposition values (U,W,V) to extract the Rotation and Translation:

 essentialMatrix = K.Transpose().Mul(fund).Mul(K);
 CvInvoke.cvSVD(essentialMatrix, wMatrix, uMatrix, vMatrix, Emgu.CV.CvEnum.SVD_TYPE.CV_SVD_DEFAULT);

** Question) At this point, two methods have been proposed, and it has confused me which one really give out the right answer- specifically for Translation:

At first method enter link description here the author suggests to compute the R,T as following:

enter image description here

But in Second method [http://isit.u-clermont1.fr/~ab/Classes/DIKU-3DCV2/Handouts/Lecture16.pdf] the author provides another formula for T which is +U , -U as shown below:

enter image description here

I am implementing this on C# .Net using openCv libraries. Anybody knows which Translation Formula is the right one?

like image 843
farzin parsa Avatar asked Apr 11 '13 04:04

farzin parsa


1 Answers

the first solution shows the matrix representation of the cross product with vector t (so first solution = [t]x ), while the second solution shows just the translation vector t (https://en.wikipedia.org/wiki/Essential_matrix).

The definition of [t]x is:

enter image description here

(from http://gandalf-library.sourceforge.net/tutorial/report/img148.png)

like image 69
pichsenmeister Avatar answered Sep 17 '22 01:09

pichsenmeister