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