computer-vision - 如何计算一台相机相对于第二台相机的外参数?

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

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

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

最佳答案

这是一个更简单的解决方案,因为您已经有了 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 子列中提取。

    关于computer-vision - 如何计算一台相机相对于第二台相机的外参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12283501/

    相关文章:

    python - SJ4000 + OpenCV + Raspberry Pi 图像处理

    machine-learning - 旋转图像并加载到 MXNet 模型

    c++ - 视差图后置滤波

    opencv - 立体相机校准错误

    c++ - 图像 C++ 上有太多黑色区域的 OpenCV 校正

    OpenCV + 摄影测量

    c++ - 有效地计算像素到它们对应的对极线的距离

    c++ - DCT 实现的问题

    computer-vision - 用玻璃覆盖的棋盘校准相机

    c++ - OpenCV calibrateCamera() 断言失败