Opencv从Essential Matrix获得R和t

时间:2017-12-28 21:56:48

标签: opencv camera-calibration

我是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并且发现delta音高是+14.9度。如果我只增加x 10厘米,那么t矩阵就像[0.96,-0.2,-0.2]。

[出了什么问题]

但是,如果我改变旋转和平移,则R和t是无意义的。例如,如果我将x增加10 cm并将音高增加到15度,那么delta度就像[-23,8,0.5],t矩阵就像[0.7,0.5,0.5]。

[问题]

我想知道如果我同时改变旋转和平移,为什么我不能得到好结果。同样令人困惑的是,为什么不相关的旋转或平移(滚动,偏航,y,z)也发生了很大的变化。

有人愿意让我知道吗?感谢。

[已解决且原因]

OpenCV使用右手坐标系。也就是说,z轴从xy平面投射到观察者方向。我们的系统使用的是左手坐标系。因此,只要更改与z轴相关,结果就是无意义的。

1 个答案:

答案 0 :(得分:0)

这是由于使用的坐标不同而解决的。

OpenCV使用右手坐标系。也就是说,z轴从xy平面投射到观察者方向。我们的系统使用的是左手坐标系。因此,只要更改与z轴相关,结果就是无意义的。