引言
大家好!今天我们将一起探索相机成像背后的一些关键技术概念:齐次坐标、径向失真和图像传感器倾斜。这些概念对于理解相机如何捕捉和处理图像至关重要。我们将通过简单易懂的语言和严谨的公式来详细解释这些概念。
齐次坐标(Homogeneous Coordinates)
什么是齐次坐标?
齐次坐标是射影几何中使用的一种坐标系统,它允许我们用有限的坐标表示无穷远的点,并且简化了许多几何变换的公式。在齐次坐标中,我们通过在n维笛卡尔向量后面添加一个1来获得齐次向量。
齐次坐标的优势
- 表示无穷远点:在齐次坐标中,无穷远点可以用有限的坐标表示。例如,在2D空间中,点 ((x, y, 0)) 表示一个无穷远点,其方向由 ((x, y)) 确定。
- 简化公式:齐次坐标可以简化许多几何变换的公式。例如,仿射变换(包括平移、旋转、缩放等)可以用一个线性齐次变换矩阵来表示。
齐次坐标的变换
齐次坐标允许我们用矩阵乘法来表示各种几何变换。例如,一个3D点 (P_w = (X_w, Y_w, Z_w, 1)) 可以通过一个4×4的齐次变换矩阵 (T) 变换到另一个坐标系:
P c = T P w P_c = T P_w Pc=TPw
其中:
- (P_c) 是变换后的点。
- (T) 是齐次变换矩阵,包含了旋转、平移、缩放等变换信息。
径向失真
什么是径向失真?
实际镜头通常会有失真,主要是径向失真和切向失真。径向失真是指图像边缘的点偏离直线路径的现象。
径向失真模型
-
基本公式:
[ u v ] = [ f x x ′ ′ + c x f y y ′ ′ + c y ] \begin{bmatrix} u \\ v \end{bmatrix} = \begin{bmatrix} f_x x'' + c_x \\ f_y y'' + c_y \end{bmatrix} [uv]=[fxx′′+cxfyy′′+cy]- (u, v) 是图像上的坐标。
- (f_x, f_y) 是相机的焦距。
- (c_x, c_y) 是主点坐标。
- (x’‘, y’') 是经过径向失真校正后的坐标。
-
径向失真校正:
[ x ′ ′ y ′ ′ ] = [ x ′ 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 y ′ 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ] \begin{bmatrix} x'' \\ y'' \end{bmatrix} = \begin{bmatrix} \frac{x'}{1 + k_1 r^2 + k_2 r^4 + k_3 r^6} \\ \frac{y'}{1 + k_1 r^2 + k_2 r^4 + k_3 r^6} \end{bmatrix} [x′′y′′]=[1+k1r2+k2r4+k3r6x′1+k1r2+k2r4+k3r6y′]- (r^2 = x’^2 + y’^2)
- (k_1, k_2, k_3) 是径向失真系数。
图像传感器倾斜
什么是图像传感器倾斜?
在某些情况下,图像传感器可能会倾斜,导致透视失真。这种失真可以通过旋转变换来校正。
倾斜模型
-
基本公式:
[ u v ] = [ f x x ′ ′ ′ + c x f y y ′ ′ ′ + c y ] \begin{bmatrix} u \\ v \end{bmatrix} = \begin{bmatrix} f_x x''' + c_x \\ f_y y''' + c_y \end{bmatrix} [uv]=[fxx′′′+cxfyy′′′+cy]- (x’‘’, y’‘’) 是经过倾斜校正后的坐标。
-
倾斜校正:
[ x ′ ′ ′ y ′ ′ ′ ] = [ R 33 ( τ z , τ y ) 0 − R 13 ( τ z , τ y ) 0 R 33 ( τ z , τ y ) − R 23 ( τ z , τ y ) 1 0 0 ] [ x ′ ′ y ′ ′ 1 ] \begin{bmatrix} x''' \\ y''' \end{bmatrix} = \begin{bmatrix} R_{33}(\tau_z, \tau_y) & 0 & -R_{13}(\tau_z, \tau_y) \\ 0 & R_{33}(\tau_z, \tau_y) & -R_{23}(\tau_z, \tau_y) \\ 1 & 0 & 0 \end{bmatrix} \begin{bmatrix} x'' \\ y'' \\ 1 \end{bmatrix} [x′′′y′′′]= R33(τz,τy)010R33(τz,τy)0−R13(τz,τy)−R23(τz,τy)0 x′′y′′1 其中,旋转矩阵 (R(\tau_x, \tau_y)) 定义为:
R ( τ x , τ y ) = [ cos ( τ y ) 0 − sin ( τ y ) 0 1 0 sin ( τ y ) 0 cos ( τ y ) ] [ 1 0 0 0 cos ( τ z ) sin ( τ z ) 0 − sin ( τ z ) cos ( τ z ) ] R(\tau_x, \tau_y) = \begin{bmatrix} \cos(\tau_y) & 0 & -\sin(\tau_y) \\ 0 & 1 & 0 \\ \sin(\tau_y) & 0 & \cos(\tau_y) \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos(\tau_z) & \sin(\tau_z) \\ 0 & -\sin(\tau_z) & \cos(\tau_z) \end{bmatrix} R(τx,τy)= cos(τy)0sin(τy)010−sin(τy)0cos(τy) 1000cos(τz)−sin(τz)0sin(τz)cos(τz) 简化后的旋转矩阵:
R ( τ x , τ y ) = [ cos ( τ y ) cos ( τ z ) − sin ( τ y ) cos ( τ z ) sin ( τ z ) cos ( τ y ) sin ( τ z ) sin ( τ y ) sin ( τ z ) − cos ( τ z ) − sin ( τ y ) cos ( τ y ) 0 ] R(\tau_x, \tau_y) = \begin{bmatrix} \cos(\tau_y) \cos(\tau_z) & -\sin(\tau_y) \cos(\tau_z) & \sin(\tau_z) \\ \cos(\tau_y) \sin(\tau_z) & \sin(\tau_y) \sin(\tau_z) & -\cos(\tau_z) \\ -\sin(\tau_y) & \cos(\tau_y) & 0 \end{bmatrix} R(τx,τy)= cos(τy)cos(τz)cos(τy)sin(τz)−sin(τy)−sin(τy)cos(τz)sin(τy)sin(τz)cos(τy)sin(τz)−cos(τz)0 -
应用旋转变换:
[ x ′ ′ ′ y ′ ′ ′ 1 ] = [ cos ( τ y ) cos ( τ z ) cos ( τ y ) sin ( τ z ) − sin ( τ y ) − sin ( τ y ) cos ( τ z ) sin ( τ y ) sin ( τ z ) cos ( τ y ) sin ( τ z ) − cos ( τ z ) 0 ] [ x ′ ′ y ′ ′ 1 ] \begin{bmatrix} x''' \\ y''' \\ 1 \end{bmatrix} = \begin{bmatrix} \cos(\tau_y) \cos(\tau_z) & \cos(\tau_y) \sin(\tau_z) & -\sin(\tau_y) \\ -\sin(\tau_y) \cos(\tau_z) & \sin(\tau_y) \sin(\tau_z) & \cos(\tau_y) \\ \sin(\tau_z) & -\cos(\tau_z) & 0 \end{bmatrix} \begin{bmatrix} x'' \\ y'' \\ 1 \end{bmatrix} x′′′y′′′1 = cos(τy)cos(τz)−sin(τy)cos(τz)sin(τz)cos(τy)sin(τz)sin(τy)sin(τz)−cos(τz)−sin(τy)cos(τy)0 x′′y′′1 -
最终投影公式:
[ u v ] = [ f x x ′ ′ ′ + c x f y y ′ ′ ′ + c y ] \begin{bmatrix} u \\ v \end{bmatrix} = \begin{bmatrix} f_x x''' + c_x \\ f_y y''' + c_y \end{bmatrix} [uv]=[fxx′′′+cxfyy′′′+cy]
通过上述步骤,我们可以得到校正后的图像坐标 ((u, v)),从而消除由于图像传感器倾斜引起的透视失真。
总结
- 齐次坐标:通过在笛卡尔坐标后面添加一个1来获得齐次向量,简化了许多几何变换的公式。
- 径向失真校正:通过径向失真系数 (k_1, k_2, k_3) 校正图像边缘的失真。
- 图像传感器倾斜校正:通过旋转变换矩阵 (R(\tau_x, \tau_y)) 校正由于传感器倾斜引起的透视失真。
希望这篇文章能帮助你更好地理解相机中的齐次坐标、径向失真和传感器倾斜校正!