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

标签 c# opencv emgucv svd

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

现在 E= K_T* F * K 。到目前为止一切顺利。

现在我们将 Essential Matrix(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 上实现它。有人知道哪个翻译公式是正确的吗?

最佳答案

第一个解决方案显示向量 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)

关于c# - 通过 SVD 从基本矩阵中提取翻译的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15940663/

相关文章:

c# - 无法从 IdentityServer4 获取配置

c# - URL 的无扩展别名

c# - 如何使用 IHttpClientFactory 刷新 token

c# - File.Delete 访问路径被拒绝

c# - Merge() 函数上的 Emgu CV 和 IInputArrayOfArrays

python - 从源码安装 Opencv 到 conda 环境

c++ - destroyWindow(来自 opencv)关闭所有窗口并停止 c++ 程序

python - cv2导入错误: DLL load failed: The specified module could not be found

image-processing - 为什么GPU对于opencv SURF算法没有表现出比CPU的优势?