【问题标题】:Matlab: translation vector in the 'extrinsics' functionMatlab:'extrinsics'函数中的平移向量
【发布时间】:2014-07-20 18:45:55
【问题描述】:

我正在使用 Matlab 2014a 的“extrinsics”函数。此函数返回相机相对于世界坐标系的平移和旋转。在我的理解中,这个函数返回的平移向量,比如说C,是从相机坐标到世界坐标的平移。换句话说,这个向量可以解释为相机中心在世界坐标中的位置。现在,我很困惑。

如果 C 是从相机到世界的平移,那么从世界到相机的平移应该是 T = -transp(R)*C,其中 R 是“extrinsics”函数返回的旋转矩阵。但在 Matlab 示例http://www.mathworks.com/com/help/vision/examples/sparse-3-d-reconstruction-from-multiple-views.html 中,使用 C 而不是 T 作为从世界坐标到相机坐标的转换。为什么?

【问题讨论】:

    标签: matlab computer-vision camera-calibration matlab-cvst


    【解决方案1】:

    我宁愿使用 Hartley 和 Zisserman 事实上的方式来更准确地定义/理解这一点。这样的定义是 Matlab 库的基础(确实,请参阅 Matlab 参考 URL 末尾的参考资料!)。

    因此,定义图像点x和场景点X,使得:

    x = P X
    

    其中 P 是包含相机校准矩阵 K(内部)和外部变换矩阵(外部)的投影矩阵 [R | t],这样:

    P = K [R | t]
    

    free tutorial paper 也是如此。请注意前几张幻灯片。

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      @timlukins 是正确的。 extrinsics 函数返回的 Rt 表示从世界坐标到基于相机的坐标的转换。方程如下:

      s*[x y 1] = [X Y Z 1]*[R; t]*K
      

      其中 [X Y Z] 是世界坐标,[x y] 是以像素为单位的图像坐标,K 是内在矩阵,s 是任意比例因子。请注意,这个方程看起来与 Hartley 和 Zisserman 中的不同,因为 MATLAB 使用了预乘约定。所以所有的向量都是行向量,所有的矩阵都是转置的,相乘的顺序是颠倒的。

      这个等式在documentation for the cameraParameters object中给出

      【讨论】:

        【解决方案3】:

        我们将 C 定义为世界坐标中的相机位置,T 定义为从世界坐标到相机坐标的平移向量。事实上,Matlab在相机坐标下绘制棋盘,这意味着需要重新计算相机坐标中的棋盘位置,结果恰好是T。所以Matlab直接用T绘制棋盘。

        【讨论】:

          猜你喜欢
          • 2015-11-03
          • 1970-01-01
          • 1970-01-01
          • 2018-05-09
          • 1970-01-01
          • 1970-01-01
          • 2011-08-05
          • 1970-01-01
          • 2018-05-10
          相关资源
          最近更新 更多