我正在尝试从基本矩阵中提取旋转矩阵和平移向量。
<pre><code>
SVD svd(E,SVD::MODIFY_A);
Mat svd_u = svd.u;
Mat svd_vt = svd.vt;
Mat svd_w = svd.w;
Matx33d W(0,-1,0,
1,0,0,
0,0,1);
Mat_<double> R = svd_u * Mat(W).t() * svd_vt; //or svd_u * Mat(W) * svd_vt;
Mat_<double> t = svd_u.col(2); //or -svd_u.col(2)
</code></pre>
但是,当我使用 R 和 T 时(例如,获得校正图像),结果似乎不正确(黑色图像或一些明显错误的输出),即使我使用了可能的 R 和 T 的不同组合。
我怀疑E。根据教科书,如果我们有,我的计算是正确的:
E = U*diag(1, 1, 0)*Vt
在我的情况下 svd.w 应该是diag(1, 1, 0) [至少在比例方面],并非如此。这是我的输出示例:
svd.w = [21.47903827647813; 20.28555196246256;5.167099204708699e-010]
此外,E 的两个特征值应该相等,第三个应该为零。在同样的情况下,结果是:
E 的特征值 = 0.0000 + 0.0000i, 0.3143 +20.8610i, 0.3143 -20.8610i
如您所见,其中两个是复共轭。
现在,问题是:
- E 的分解和 R 和 T 的计算是否以正确的方式进行?
- 如果计算正确,为什么结果不满足本质矩阵的内部规则?
- 如果 E、R 和 T 一切正常,为什么它们得到的校正图像不正确?
我从基本矩阵中得到 E,我认为这是正确的。我在左右图像上都画了极线,它们都通过相关点(对于用于计算基本矩阵的所有 16 个点)。
任何帮助,将不胜感激。谢谢!