假设我在两个图像之间有很好的对应关系,并尝试恢复它们之间的相机运动。我可以为此使用 OpenCV 3 的新功能,如下所示:
Mat E = findEssentialMat(imgpts1, imgpts2, focal, principalPoint, RANSAC, 0.999, 1, mask);
int inliers = recoverPose(E, imgpts1, imgpts2, R, t, focal, principalPoint, mask);
Mat mtxR, mtxQ;
Mat Qx, Qy, Qz;
Vec3d angles = RQDecomp3x3(R, mtxR, mtxQ, Qx, Qy, Qz);
cout << "Translation: " << t.t() << endl;
cout << "Euler angles [x y z] in degrees: " << angles.t() << endl;
现在,我很难理解什么R
和t
真正的意思。它们是否是将坐标从相机空间 1 映射到相机空间 2 所需的变换,例如p_2 = R * p_1 + t
?
考虑这个例子,使用人工标记的对应关系
我得到的输出是这样的:
Translation: [-0.9661243151855488, -0.04921320381132761, 0.253341406362796]
Euler angles [x y z] in degrees: [9.780449804801876, 46.49315494782735, 15.66510133665445]
我尝试将此与我在图像中看到的内容相匹配并提出解释,这[-0.96,-0.04,0.25]
告诉我,我已经向右移动了,因为坐标沿着负 x 轴移动,但它也会告诉我,我已移动得更远,因为坐标已沿正 z 轴移动。
我还围绕 y 轴旋转了相机(向左旋转,我认为这将是围绕负 y 轴逆时针旋转,因为在 OpenCV 中,y 轴指向下方,不是吗?)
问题:我的解释是否正确,如果不正确,正确的解释是什么?