摄像头标定的本质其实是摄像头系统中各种坐标系之间的转换。这些转换包括旋转、平移、角度变换等几何变换。这里对摄像头标定相关的基础知识做简单介绍。
外积就是两个向量的向量积,公式如下:
在摄像头标定中,可以使用外积进行坐标系转换,如图3-1所示。
图3-1 利用外积进行坐标系转换
在自动驾驶车辆中,可能会装配多个摄像头,每个摄像头都有各自独立的坐标系。由于不同摄像头对同一目标的测量结果有所不同,所以我们需要将这些摄像头的测量结果统一到同一坐标系下,以便进行准确的数据融合和分析。这个统一的参考坐标系通常被称为“车体坐标系”。如图3-2所示,假设 w 代表车体坐标系, c 表示摄像头坐标系,定义 x w 、 y w 、 z w 为车体坐标系的3个坐标轴, x c 、 y c 、 z c 为摄像头坐标系的3个坐标轴,在摄像头视野中的某个点 P 的摄像头坐标系下的坐标表示为 p cpc ,该点在车体坐标系下坐标表示为 p wpw 。由于该点在摄像头坐标系和车体坐标系下的长度以及夹角不会发生变化,因此该点从摄像头坐标系到车体坐标系的变换可以看作一种刚性运动。两个坐标系之间的变换关系由变换矩阵 T 来表示,这种变换可以称为“欧氏变换”。
图3-2 不同坐标系之间相互对应关系
欧氏变换操作包括旋转和平移,图像坐标系到摄像头坐标系的转换也是一种欧氏变换。
假设单位正交基( e 1 , e 2 , e 3 )经过一次旋转变成 ,对于同一个向量 a ,它在两个坐标系下的坐标分别为( a 1 a 2 a 3 )和 ,所以有:
为描述两个坐标系之间的关系,对等式左右同时乘以 ,等式左边系数变为单位矩阵,右边系数则变成由两组标准正交基内积组成的矩阵:
其中, R 为旋转矩阵。由上式可知, R 是一个正交矩阵,即
a ′= R -1 a = R T a
所以,欧氏变换可以表示为
a ′= Ra + t
由于 R 是正交矩阵,这会加大优化旋转矩阵的难度。因为外积可以表达向量的旋转,所以选择方向与旋转轴方向一致且长度等于旋转角的向量来描述这种旋转,这样的向量称为“旋转向量”。由于旋转向量使用3个分量来表示绕3个正交轴的旋转,那么一个坐标系的旋转可以由一个旋转向量和一个旋转角度来表示,如下式:
R =cos θ I +(1-cos θ ) nn T +sin θ n ^
其中, n 为旋转向量, θ 为旋转角度。那么,通过旋转矩阵计算得到旋转向量的转换公式为
虽然 b = Ra + t 可以完整地描述一次欧氏变换,但当进行两次变换时,就会出现
b = R 1 a + t 1
c = R 2 b + t 2
用 a 来描述 c ,则有
c = R 2 ( R 1 a + t 1 )+ t 2
为了简化计算复杂度,引入齐次坐标和变换矩阵,有
在三维向量中增加一个额外的维度以变成四维向量,这样的表示被称为“齐次坐标”;把旋转和平移整合到同一个矩阵中进行表达,这个矩阵则被称为“变换矩阵”。
齐次坐标有如下特点。
1)通过在三维向量的表示中添加一维额外的维度,用4个数表示一个三维向量,这样引入了一个额外的自由度,使得线性变换可以更加方便的表达。
2)齐次坐标中的每个分量同时乘以一个非零常数后,所得到的新坐标仍然表示同一个点,所以对于给定的点,存在多个不同的齐次坐标表示。
3)当进行齐次坐标之间的运算时,得到的结果仍然是齐次坐标。将齐次坐标转换为非齐次坐标的方法是将齐次坐标中所有的坐标分量除以该齐次坐标中的最后一个分量,从而确保得到的齐次坐标中最后一个分量为1。忽略最后一个分量后,即可得到欧氏空间中的非齐次坐标。
变换矩阵的特点如下。
1)变换矩阵左上角为旋转矩阵,右上角为平移向量,左下角为0向量,右下角为1。
2)变换矩阵的逆表示一个反向的变换。
通过引入齐次坐标和旋转矩阵,可以大大简化欧氏变换的计算:
除了旋转矩阵和旋转向量,还可以使用欧拉角来直观表示旋转。欧拉角使用3个独立分离的转角来表述旋转,包括绕 Z 轴旋转的偏航角yaw,绕 Y 轴旋转的俯仰角pitch,绕 X 轴旋转的滚转角roll。
可以通过(roll,pitch,yaw) T 类似的三维向量来描述任意旋转。但当使用欧拉角的时候一定会遇到著名的万向锁问题,即当俯仰角pitch为±90°时,第三次旋转将会与第一次旋转使用同一个轴,这样会使系统丢失1个自由度,如图3-3所示。所以,欧拉角不适用于插值和迭代,也很少用于SLAM程序。通常情况下,欧拉角往往只用于人机交互中,方便直观理解。
图3-3 万向锁示意图
四元数是一种扩展复数,在表示旋转时具有紧凑性,主要用来处理三维空间中描述旋转时的奇异性问题,如上面提到的pitch为90°时的情况。一个四元数 q 包含1个实部和3个虚部,可以表示为 q = q 0 + q 1 i + q 2 j + q 3 k ,其中 i 、 j 、 k 为3个虚部,且满足如下关系式:
也可通过一个标量和一个向量来表示四元数:
q =[ s,v ]
s = q 0 ∈ R
v =( q 1 ,q 2 ,q 3 ) T ∈ R 3
其中, s 为实部; v 为虚部。当虚部为0时, q 为实四元数;当实部为0时, q 为虚四元数。虚四元数可以表示三维空间中的一个点。
四元数和旋转向量之间的转换关系表示为
又
所以,四元数与旋转向量之间的关系可以表示为