如何计算一台摄像机相对于第二台摄像机的外部参数?

时间:2012-09-05 14:15:18

标签: computer-vision camera-calibration calibration rotational-matrices extrinsic-parameters

我已根据某个世界坐标系校准了2个摄像头。我知道相对于世界框架的每一个的旋转矩阵和平移向量。从这些矩阵中如何计算一个摄像机相对于另一个摄像机的旋转矩阵和平移矢量

请提供任何帮助或建议。谢谢!

3 个答案:

答案 0 :(得分:5)

这是一个更简单的解决方案,因为您已经拥有3x3旋转矩阵R1和R2,以及3x1平移向量t1和t2。

这些表示从世界坐标系到每个摄像机的运动,即矩阵,如果p是以世界坐标系表示的点,那么在摄像机1帧中表示的相同点是p1 = R1 * p + t1。

从相机1到2的动作就是(a)从相机1到世界框架的动作,以及(b)从世界框架到相机2的动作的组合。您可以轻松地计算这个构图如下:

  1. 形成4x4旋转平移矩阵Qw1 = [R1 t1]和Qw2 = [R2 t2],第4行均等于[0 0 0 1]。这些矩阵分别完全表示从世界坐标框到相机1和2的旋转平移。
  2. 从相机1到世界帧的动作只是Q1w = inv(Qw1)。这里inv()是代数逆矩阵,即inv(X)* X = X * inv(X)= IdentityMatrix,对于每个非奇异矩阵X.
  3. 从摄像机1到2的旋转平移则是Q12 = Q1w * Qw2,反之,从摄像机2到1的旋转平移是Q21 = Q2w * Qw1 = inv(Qw2)* Qw1。
  4. 一旦你有了Q12,你可以从中提取旋转和平移部分,如果你愿意的话,分别从它的上3x3子矩阵和右3x1子列中提取。

答案 1 :(得分:0)

首先将旋转矩阵转换为旋转矢量。现在每个摄像机有2个3d矢量,称它们为A1,A2,B1,B2。关于某些来源O,你有4个。你需要的规则是

A relative to B = (A relative to O)- (B relative to O)

将该规则应用于您的2个向量,您将拥有彼此相对的姿势。

有关从旋转矩阵转换为欧拉角的一些文档可以在here以及许多其他地方找到。如果您使用的是openCV,则可以使用RodriguesHere是我发现的一些matlab / octave代码。

答案 2 :(得分:0)

这是一个非常简单容易的解决方案。我想您的第一台相机具有R1和T1,第二台相机具有R2和T2旋转矩阵以及根据公共参考点的平移矢量。

从第一到第二摄像机的平移,从第一到第二摄像机的旋转可以通过以下两行matlab代码来计算;

R=R2*R1';
T=T2-R*T1;

但是请注意,如果每个摄像机只有一个R和T,那就是对的。 (我指的是一种独特的世界参考的旋转和平移)。如果您有更多参考平移和旋转,则应为每个参考点计算R,T。他们可能彼此非常接近。但是这些可能会截然不同。然后,您可以计算平移向量的平均值,并将找到的所有旋转矩阵转换为旋转向量,计算其平均值,然后将其转换为旋转矩阵。