CV或融合标注中的一个常见概念,简单介绍:

  • 内参与外参矩阵
  • 畸变系数

相机标定

将世界空间中的一点转换为相机图像中的一点,即从真实空间投影到图像空间的过程,主要分为两步:

  1. 世界坐标系(3D) ==> 相机坐标系(3D)
  2. 相机坐标系(3D) ==> 像素平面(2D)

为了实现这个投影过程,需要得到三维空间中变换的外参矩阵与三维到图像空间变换的内参矩阵,即相机标定(Camera Calibration)

整个过程可以用下面的公式表示:

$$ s \begin{bmatrix} u \newline v \newline 1 \newline \end{bmatrix} =KT \begin{bmatrix} X_w \newline Y_w \newline Z_w \newline 1 \end{bmatrix} $$

其中$s$为比例因子,$K$为内参矩阵,$T$为外参矩阵,$[u,v]$为像素平面坐标,$[X,Y,Z]$为世界坐标系坐标

外参矩阵

外参矩阵即从世界坐标原点移动到相机中心的变换矩阵。

$$ T=[R \quad t]= \begin{bmatrix} r_{11} & r_{12} & r_{13} & t_{x} \newline r_{21} & r_{22} & r_{23} & t_{y} \newline r_{31} & r_{32} & r_{33} & t_{z} \newline \end{bmatrix} $$

看情况需要考虑相机的载体,比如相机位于车辆顶部,则外参矩阵为从世界空间原点先变换到车辆中心,再移动到相机中心的变换矩阵。

通过该矩阵得到相机坐标系中的点:

$$ \begin{bmatrix} X_c \newline Y_c \newline Z_c \end{bmatrix}=T\begin{bmatrix} X_w \newline Y_w \newline Z_w \newline 1 \end{bmatrix} $$

内参矩阵

内参矩阵即从相机中心利用相似性投影到像素平面的变换矩阵。

$$ K= \begin{bmatrix} f_{x} & k & c_{x} \newline 0 & f_{y} & c_{y} \newline 0 & 0 & 1 \end{bmatrix} $$

其中$c_{x}$与$c_{y}$表示像素空间的光心/投影中心(optical center),$f_{x}$与$f_{y}$表示焦距(focal length),$k$表示倾斜系数,$k=f_xtan\alpha$。

得到像素平面上的点:

$$ \begin{bmatrix} u \newline v \newline 1\end{bmatrix}=K\begin{bmatrix} X_c \newline Y_c \newline Z_c \end{bmatrix} $$

畸变系数

相机在成像时可能根据设备原因会产生一定的位置误差,通过估计的畸变系数可得到三维空间中的点在像素平面的真实位置。

径向畸变

产生原因: 镜头在聚焦大量光线时在边缘会出现一定幅度的弯曲,产生图像边缘扭曲的效果。

常用使用$r=0$处的泰勒级数展开的前几项来近似描述径向畸变,畸变后的归一化坐标为: $$ \begin{array}{l} x_{distorted}=x(1+k_1r^2+k_2r^4+k_3r^6) \newline y_{distorted}=y(1+k_1r^2+k_2r^4+k_3r^6) \newline \end{array} $$

其中$k_1,k_2,k_3$为镜头的径向畸变系数,$x,y$为无畸变的归一化图像坐标,$r^2=x^2+y^2$

$$ \begin{array}{l} x=X_c/Z_c \newline
y=Y_c/Z_c \newline \end{array} $$

切向畸变

产生原因: 当相机传感器与镜头(垂直平面)不平行的情况下产生的成像位置会发生变化

需要额外的两个畸变参数$p_1,p_2$来描述:

$$ \begin{array}{l} x_{distorted}=x+2p_1xy+p_2(r^2+2x^2) \newline y_{distorted}=y+2p_2xy+p_1(r^2+2y^2) \newline \end{array} $$

像素平面

实际计算过程中,如果考虑太多高阶的畸变参数,会导致标定求解的不稳定,一般只使用综上5个畸变参数来描述透镜畸变,即:

$$ \begin{array}{l} x_{distorted}=x(1+k_1r^2+k_2r^4+k_3r^6)+2p_1xy+p_2(r^2+2x^2) \newline y_{distorted}=y(1+k_1r^2+k_2r^4+k_3r^6)+2p_2xy+p_1(r^2+2y^2) \newline \end{array} $$

得到畸变后的点之后,再利用内参矩阵得到在像素平面上对应的点:

$$ \begin{bmatrix} u \newline v \newline 1 \end{bmatrix} =K \begin{bmatrix} x_{distorted} \newline y_{distorted} \newline 1 \end{bmatrix} $$