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轴相关的,结果就是无意义的。
我是 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轴相关的,结果就是无意义的。