首页 文章

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

提问于
浏览
8

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

请给我任何帮助或建议 . 谢谢!

3 回答

  • 5

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

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

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

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

  • 0

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

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

    从摄像机1到2的运动简单地是(a)从摄像机1到世界帧的运动,以及(b)从世界帧到摄像机2的运动的组成 . 您可以如下轻松计算该组成:

    • 形成4x4旋转平移矩阵Qw1 = [R1 t1]和Qw2 = [R2 t2],第4行均等于[0 0 0 1] . 这些矩阵分别完全表示从世界坐标框到相机1和2的旋转平移 .

    • 从摄像机1到世界帧的运动只是Q1w = inv(Qw1) . 这里inv()是代数逆矩阵,即对于每个非奇异矩阵X,inv(X)* X = X * inv(X)= IdentityMatrix .
      然后,从摄像机1到2的旋转平移是Q12 = Q1w * Qw2,反之,从摄像机2到1的旋转平移是Q21 = Q2w * Qw1 = inv(Qw2)* Qw1 .

    一旦你有Q12,你可以从它的上3x3子矩阵和右3x1子列中分别从中提取旋转和平移部分 .

  • 0

    这是一个非常简单易用的解决方案 . 我想你的第一台摄像机有R1和T1,第二台摄像机有R2和T2旋转矩阵和根据公共参考点的平移向量 .

    从第1到第2相机的转换,从第1到第2相机的旋转可以通过以下两行matlab代码计算;

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

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

相关问题