matlab相机标定工具(camera calibrator)内外参矩阵数据格式

摘要

matlab把点坐标看作行向量,而《视觉SLAM十四讲》(以下简称《十四讲》)把点坐标看作列向量,因此它们把世界坐标系下的点投影到像素坐标系下时,使用的公式有所不同。这导致使用matlab标定得到相机的内外参矩阵,与高翔《视觉SLAM十四讲》所说的内外参矩阵格式不一致。要想得到正确的参数,还需要弄清楚matlab内外参矩阵的数据格式。


结论

先给出结论,简单来说以标定板左上角作为世界坐标系原点,uv方向作为世界坐标系的XY轴,有一下结论:

  • matlab标定得到的相机内参矩阵(IntrinsicMatrix, K m a t l a b K_{matlab} Kmatlab),对应的是《十四讲》中的 K T K^T KT
  • matlab标定得到的旋转矩阵(RotationMatrices , R m a t l a b R_{matlab} Rmatlab),对应的是《十四讲》中的 R w c ( 3 × 3 ) R_{wc(3\times 3)} Rwc(3×3)
  • matlab标定得到的平移向量(TranslationVectors, t m a t l a b t_{matlab} tmatlab),对应的是《十四讲》中的 t c w ( 1 × 3 ) T t_{cw(1\times 3)}^T tcw(1×3)T

内容

约定: 以标定板左上角作为世界坐标系原点,uv方向作为世界坐标系的XY轴。下标 c c c 表示camera(相机)坐标系, 下标 w w w 表示world(世界)坐标系,例如: T c w ( 3 × 4 ) T_{cw(3\times 4)} Tcw(3×4) 表示在这个矩阵右边乘以world世界坐标系下的点,会得到camera相机坐标系下的点。

《十四讲》:《十四讲》里把点坐标看作列向量,其将世界坐标系下的点 [ X Y Z 1 ] \begin{bmatrix} X \\ Y \\ Z \\ 1 \end{bmatrix} XYZ1,投影到像素坐标系下的点 [ u v 1 ] \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} uv1的公式如下 :
s [ u v 1 ] = K T c w ( 3 × 4 ) [ X Y Z 1 ] = K [ R c w ( 3 × 3 ) t c w ( 3 × 1 ) ] [ X Y Z 1 ] \begin{aligned} s\begin{bmatrix} u \\ v \\ 1 \end{bmatrix} &=KT_{cw(3\times 4)}\begin{bmatrix} X \\ Y \\ Z \\ 1 \end{bmatrix} =K\begin{bmatrix} R_{cw(3\times 3)} & t_{cw(3\times 1)} \end{bmatrix}\begin{bmatrix} X \\ Y \\ Z \\ 1 \end{bmatrix} \end{aligned} suv1=KTcw(3×4)XYZ1=K[Rcw(3×3)tcw(3×1)]XYZ1

matlab: matlab把点坐标看作行向量,其将世界坐标系下的点 [ X Y Z 1 ] \begin{bmatrix} X & Y & Z & 1 \end{bmatrix} [XYZ1],投影到像素坐标系下的点 [ u v 1 ] \begin{bmatrix} u & v & 1 \end{bmatrix} [uv1]的公式如下 :
s [ u v 1 ] = [ X Y Z 1 ] T c w ( 4 × 3 ) T K T = [ X Y Z 1 ] [ R c w ( 3 × 3 ) T t c w ( 1 × 3 ) T ] K T = [ X Y Z 1 ] [ R w c ( 3 × 3 ) t c w ( 1 × 3 ) T ] K T \begin{aligned} s\begin{bmatrix} u & v & 1 \end{bmatrix} &= \begin{bmatrix} X & Y & Z & 1 \end{bmatrix}T_{cw(4\times 3)}^T K^T \\ &= \begin{bmatrix} X & Y & Z & 1 \end{bmatrix}\begin{bmatrix} R_{cw(3\times 3)}^T \\ t_{cw(1\times 3)}^T \end{bmatrix}K^T \\ &= \begin{bmatrix} X & Y & Z & 1 \end{bmatrix}\begin{bmatrix} R_{wc(3\times 3)} \\ t_{cw(1\times 3)}^T \end{bmatrix}K^T \end{aligned} s[uv1]=[XYZ1]Tcw(4×3)TKT=[XYZ1][Rcw(3×3)Ttcw(1×3)T]KT=[XYZ1][Rwc(3×3)tcw(1×3)T]KT

Note: 旋转矩阵R为正交矩阵,而对于正交矩阵有该性质: R R T = R R − 1 = E RR^T=RR^{-1}=E RRT=RR1=E,即旋转矩阵的转置就是它的逆矩阵 R T = R − 1 R^T=R^{-1} RT=R1

综上可知,以标定板左上角作为世界坐标系原点,uv方向作为世界坐标系的XY轴,有一下结论,有如下结论成立:

  • matlab标定得到的相机内参矩阵(IntrinsicMatrix, K m a t l a b K_{matlab} Kmatlab),对应的是《十四讲》中的 K T K^T KT
  • matlab标定得到的旋转矩阵(RotationMatrices , R m a t l a b R_{matlab} Rmatlab),对应的是《十四讲》中的 R w c ( 3 × 3 ) R_{wc(3\times 3)} Rwc(3×3)
  • matlab标定得到的平移向量(TranslationVectors, t m a t l a b t_{matlab} tmatlab),对应的是《十四讲》中的 t c w ( 1 × 3 ) T t_{cw(1\times 3)}^T tcw(1×3)T

相关/参考链接

matlab帮助:cameraParameters

你可能感兴趣的:(matlab相机标定工具(camera calibrator)内外参矩阵数据格式)