单目相机成像原理

几个概念

  • 光轴:垂直穿过理想透镜中心的光线
  • 焦点:与光轴平行的光线射入凸透镜时,所有光线会聚在透镜后方一点,该点称为焦点
  • 焦距:镜片中心到焦点在光轴上的距离。入射平行光线(或其延长线)与出射会聚光线(或其延长线,下图中红色虚线)相交,可确定折射主面;该想象平面与光轴的交点即主点
  • 光圈:影响进光量与景深

Figure 1 单目相机

Figure 2 光圈


坐标转换

  • 像素坐标系:以图像左上角为原点,即 ​u-​v 坐标系,单位为 pixel,记为 ​O_p-​(u,v)。方向为右 ​u、下 ​v
  • 图像坐标系:以图像中心为原点,即 ​x-​y 坐标系,单位为 mm 等物理量,记为 ​O_i-​(x,y)。方向为右 ​x、下 ​y
  • 相机坐标系:以相机光心为原点,​X 轴、​Y 轴分别平行于图像坐标系的 ​X​Y 轴,光轴为 ​Z 轴,记为 ​O_c-​(X_c, Y_c, Z_c)
  • 世界坐标系:三维世界的绝对坐标系,记为 ​O_w-​(X_w, Y_w, Z_w)。常用「东-北-天」约定:以北为车头朝向时,东为 ​X_w,北为 ​Y_w,上为 ​Z_w。世界坐标系是全局共享的 3D 坐标系,为 ADAS 中 ego、相机、3D 点、障碍物等提供统一的位置标尺

图像成像按 世界坐标系 → 相机坐标系 → 图像坐标系 → 像素坐标系 的顺序转换,通常以相机光心为原点构建坐标系:

Figure 3 相机坐标系(图为 png 格式,请勿在黑暗模式下查看此图)

世界坐标系 → 相机坐标系

属于刚体变换,包含旋转 ​R 与平移 ​t

\begin{bmatrix} X_c \\ Y_c \\ Z_c \\ 1 \end{bmatrix} = \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix} \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix}

相机坐标系 → 图像坐标系

Figure 4 相似三角形

相机坐标系到图像坐标系的距离为焦距 ​f,由相似三角形:

\frac{x}{X_c} = \frac{f}{Z_c}, \quad \frac{y}{Y_c} = \frac{f}{Z_c}

因此:

\begin{cases} x = f \dfrac{X_c}{Z_c} \\[6pt] y = f \dfrac{Y_c}{Z_c} \end{cases}

整理为齐次坐标形式:

Z_c \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} = \begin{bmatrix} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} X_c \\ Y_c \\ Z_c \\ 1 \end{bmatrix}

图像坐标系 → 像素坐标系

两者处在同一平面,但有两点不同:

  1. 坐标原点不同:图像坐标系原点在成像平面中心;像素坐标系原点在左上角
  2. 单位不同:图像坐标系为 mm;像素坐标系为 pixel。横向 ​1\ \text{pixel} = dx\ \text{mm},纵向 ​1\ \text{pixel} = dy\ \text{mm}

图像坐标到像素坐标仅需一次缩放 + 平移

\begin{cases} (u - u_0)\, dx = x \\[6pt] (v - v_0)\, dy = y \end{cases}

其中 ​(u,v)​(x,y) 分别为像素坐标系和图像坐标系中的坐标,​(u_0, v_0) 为像素原点到图像中心的偏移,属于内参的一部分。

即:

\begin{cases} u = \dfrac{x}{dx} + u_0 \\[6pt] v = \dfrac{y}{dy} + v_0 \end{cases}

齐次坐标形式:

\begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \begin{bmatrix} \dfrac{1}{dx} & 0 & u_0 \\ 0 & \dfrac{1}{dy} & v_0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}

整合变换

联立上述变换:

Z_c \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \begin{bmatrix} \dfrac{1}{dx} & 0 & u_0 \\ 0 & \dfrac{1}{dy} & v_0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix} \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix}

合并后:

Z_c \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \begin{bmatrix} f_x & 0 & u_0 \\ 0 & f_y & v_0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix} \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix}

其中 ​f_x = \dfrac{f}{dx}​f_y = \dfrac{f}{dy},将焦距从 mm 换算为 pixel 单位。

以 120° FOV 的森云相机为例:像素尺寸 ​3 \times 10^{-3}\ \text{mm},焦距 ​3\ \text{mm},可推断 ​f_x​f_y 接近 1000。

​u_0​v_0 表示相机光心在像素坐标系中的偏移量,单位为 pixel。

K = \begin{bmatrix} f_x & 0 & u_0 \\ 0 & f_y & v_0 \\ 0 & 0 & 1 \end{bmatrix}

相机内参矩阵 (Camera Intrinsic Matrix),描述三维点投影到像素平面的变换。

T = \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix}

相机外参矩阵 (Camera Extrinsic Matrix),描述世界坐标系到相机坐标系的刚体变换。


畸变矫正

针孔模型是理想成像模型,物像满足相似三角形关系。但由于透镜加工误差,实际成像存在几何失真,称为畸变。失真程度从画面中心向边缘递增,边缘最为明显。

畸变分为径向畸变切向畸变两类。

径向畸变

通常由透镜形状引起,越靠近边缘越严重,分为桶形畸变枕形畸变

Figure 5 径向畸变

可用 ​r=0 处泰勒展开的前几项近似,​k_1, k_2, k_3 为径向畸变系数:

x_{\text{distorted}} = x(1 + k_1 r^2 + k_2 r^4 + k_3 r^6)
y_{\text{distorted}} = y(1 + k_1 r^2 + k_2 r^4 + k_3 r^6)

切向畸变

通常由透镜与成像平面不严格平行引起,需额外参数 ​p_1, p_2。OpenCV 完整畸变模型为:

x_{\text{distorted}} = x(1 + k_1 r^2 + k_2 r^4 + k_3 r^6) + 2 p_1 xy + p_2(r^2 + 2x^2)
y_{\text{distorted}} = y(1 + k_1 r^2 + k_2 r^4 + k_3 r^6) + 2 p_2 xy + p_1(r^2 + 2y^2)

参考文献

[1] 针孔相机模型

[2] 单目相机标定原理

[3] 相机模型:单目、双目、深度相机模型及相机畸变