Opencv 从 Essential Matrix 获取 R 和 t

Opencv get R and t from Essential Matrix

我是 opencv 和计算机视觉的新手。我想找到两个相机姿势之间的 R 和 t 矩阵。所以我一般都是按照维基百科:

https://en.wikipedia.org/wiki/Essential_matrix#Determining_R_and_t_from_E

我在两幅图像中找到一组相同点的相关像素位置。我得到了基本矩阵。然后我运行 SVD。并打印出 2 个可能的 R 和 2 个可能的 t。

[符合预期的 运行]

如果我只单独更改旋转(滚动、俯仰、偏航之一)或单独更改平移(x、y、z 之一),它会完美无缺。例如,如果我将俯仰增加到 15 度,那么我会得到 R 并发现增量俯仰是 +14.9 度。如果我只增加 x 10 厘米,那么 t 矩阵就像 [0.96,-0.2,-0.2]。

[出了什么问题]

但是,如果我同时更改旋转和平移,则 R 和 t 是无意义的。例如,如果我将 x 增加 10 厘米并将间距增加到 15 度,则增量度就像 [-23, 8,0.5],而 t 矩阵就像 [0.7, 0.5, 0.5].

[问题]

我想知道为什么同时改变旋转和平移我得不到好的结果。并且令人困惑的是,为什么不相关的旋转或平移(roll, yaw, y, z)也变化如此之大。

有没有人愿意帮我算算?谢谢


[已解决及原因]

OpenCV 使用右手坐标系。也就是说,z 轴是从 xy 平面投影到观察者方向。我们的系统使用的是左手坐标系。所以只要变化是和z轴相关的,结果就是无意义的。

由于使用的坐标不同,已解决。

OpenCV 使用右手坐标系。也就是说,z 轴是从 xy 平面投影到观察者方向。我们的系统使用的是左手坐标系。所以只要变化是和z轴相关的,结果就是无意义的。