gpt4 book ai didi

c++ - 相机姿态估计 : How do I interpret rotation and translation matrices?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:34:04 28 4
gpt4 key购买 nike

假设我在两张图片之间有很好的对应关系,并尝试恢复它们之间的相机运动。我可以为此使用 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;

现在,我很难理解 Rt 的实际含义。它们是将坐标从相机空间 1 映射到相机空间 2 所需的变换,如 p_2 = R * p_1 + t 中那样吗?

考虑这个例子,带有手动标记的对应关系

enter image description here

我得到的输出是这样的:

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 轴指向下方,不是吗? )

问题:我的解释正确吗?如果不正确,正确的是什么?

最佳答案

其实你的解释是正确的。

首先,关于 y 轴的方向,您是正确的。有关 OpenCV 相机坐标系的说明,请参阅 here .

您的代码会将 R 和 t 从第二个摄像头返回到第一个摄像头。这意味着如果 x1 是第一幅图像中的一个点,x2 是第二幅图像中的一个点,则以下等式成立 x1 = R*x2 + t。现在,在您的例子中,右侧图像(前 View )来自相机 1,左侧图像(侧 View )来自相机 2。

看看这个等式,我们看到首先应用了旋转。所以成像你的相机当前拍摄的是左边的画面。现在您的 R 指定绕 y 轴旋转约 46 度。由于按角度 alpha 旋转点与按此角度反向旋转坐标轴相同,因此您的 R 告诉您向左旋转。正如您自己指出的那样,如果看图片,这似乎是正确的。由于围绕其他轴的旋转很小且难以成像,因此我们在这里省略它们。因此,在应用旋转后,您仍然站在拍摄左帧的相同位置,但您的相机或多或少指向汽车后部或汽车正后方的空间。

现在让我们看看翻译 vector 。您对向右移动和更远移动的解释也是正确的。让我试着解释一下为什么。想象一下,从您当前的位置,使用新的相机方向,您只能向右移动。您会直接撞到汽车或需要将相机放在发动机罩上方。因此,向右移动后,您还需要移动得更远才能到达您拍摄正确照片的位置。

我希望这个解释能帮助您想象您的 R 和 t 描述的运动。

关于c++ - 相机姿态估计 : How do I interpret rotation and translation matrices?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31447128/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com