2

使用opencv我已经校准了一对立体相机。这导致两个摄像机之间的旋转和平移。

我使用第一个相机(左)拍摄图像并使用solvePnp 计算左相机相对于零件的姿势(rvec 和tvec)。

我的问题是如何使用左摄像头的姿势以及立体校准中给定的 R & T 值来计算右摄像头的姿势?

谢谢。

4

1 回答 1

3

这个问题有点不清楚,但我认为您想找到正确相机相对于零件的姿势。如果是这种情况,最简单的方法如下:

  • 令 Q_pl 为左侧相机相对于零件的位姿。这由一个 4x4 矩阵表示,其前 3 行和列是左摄像机(您的 rvec)部分的旋转矩阵 R_pl,底行是 [0, 0, 0, 1],前 3 行是第 4 列是相机零件(您的 tvec)的平移向量 t_pl 的分量。为了澄清,你写 Q_pl 通过写,纵坐标,部件的 x、y 和 z 轴单位向量的相机框架中的分量(从相机看到)作为列向量,然后是相机部件的向量, 然后写 [0, 0, 0, 1] 作为第四行。
  • 同样,让 Q_lr 为左相机相对于右相机的位姿(从校准中获得)。你写这个 4x4 矩阵,将左侧相机的 x、y、z 单位向量的分量(从右侧看)作为列向量,然后是右侧相机左侧相机的平移向量,然后写[0, 0, 0 1] 作为第四行。
  • 右侧相机部分的位姿就是两个矩阵的乘积:

    Q_pr = Q_pl * Q_lr

请注意,因素的顺序很重要。这个表达式简单地说,要从右边的相机到零件,你可以先从右边的相机到左边的相机,然后从那里到零件。同样,这个变换的旋转部分在 Q_pr 的前 3 行和 3 列,从右侧相机到该部分的平移向量在第 4 列。

请注意,您的校准程序可能给您 Q_rl,而不是 Q_lr。如果是这种情况,您只需将其反转即可。逆很容易计算:

R_lr = transpose(R_rl)
t_lr = -(R_lr * t_rl)

同样,如果这是您的 solvePnP 产生的,您将反转 Q_lp,而不是 Q_pl。

于 2013-10-22T01:17:19.723 回答