通过SVD从基本矩阵中提取翻译的正确方法

时间:2013-04-11 04:15:27

标签: opencv emgucv svd opencvsharp

我校准了相机并找到了内在参数(K)。我也计算了基本矩阵(F)。

现在E = K_T * F * K.到目前为止一切都很好。

现在我们将基本矩阵(E)传递给SVD,使用分解值(U,W,V)来提取旋转和平移:

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

**问题)此时,已经提出了两种方法,并且让我感到困惑的是哪一种方法确实给出了正确的答案 - 特别是对于翻译:

在第一个方法enter link description here,作者建议计算R,T如下:

enter image description here

但在第二种方法[http://isit.u-clermont1.fr/~ab/Classes/DIKU-3DCV2/Handouts/Lecture16.pdf]中,作者为T提供了另一个公式,即+ U,-U,如下所示:

enter image description here

我正在使用openCv库在C#.Net上实现它。谁知道哪个翻译公式是正确的?

1 个答案:

答案 0 :(得分:4)

第一个解决方案显示了带矢量t的叉积的矩阵表示(所以第一个解= [t] x),而第二个解只显示了平移向量t(https://en.wikipedia.org/wiki/Essential_matrix)。

[t] x的定义是:

enter image description here

(来自http://gandalf-library.sourceforge.net/tutorial/report/img148.png