2. 图像几何变换基础:平移、旋转、缩放、仿射变换、透视变换的数学表示与矩阵形式

图像几何变换是图像变形补偿与几何校正的理论基石。无论是镜头畸变校正、图像配准、全景拼接,还是数字稳像,其底层运算最终都归结为像素坐标的重新映射。理解平移、旋转、缩放、仿射变换与透视变换的数学本质,以及它们在齐次坐标下的矩阵表达,是后续设计补偿算法、评估校正精度、优化插值策略的前提。本章将从线性代数的视角,系统梳理各类变换的数学表示、矩阵形式及其内在联系,并重点剖析仿射变换与透视变换在工程应用中的差异。

图像几何变换矩阵关系总览 齐次坐标 (x, y, 1) 线性变换(2×2 矩阵) 缩放 旋转 仿射变换(2×3 矩阵) 保持平行性 不保持长度/角度 6 个自由度 平移+线性 透视变换(3×3 矩阵) 不保持平行性 8 个自由度 模拟近大远小 直线映射为直线 应用:镜头畸变校正 · 图像配准 · 全景拼接 · 数字稳像 核心:所有变换均可用 3×3 齐次矩阵统一表示,便于级联与求逆 仿射: [a b tx; c d ty; 0 0 1] 透视: [a b c; d e f; g h 1]

2.1 齐次坐标:统一变换表达的基础

在欧几里得几何中,平移变换无法直接表示为 2×2 矩阵与向量的乘法,因为平移是加法运算而非线性映射。为了将平移、旋转、缩放等变换统一为矩阵乘法形式,我们引入齐次坐标(Homogeneous Coordinates)。其核心思想是将二维平面上的点 (x, y) 表示为三维向量 (x, y, 1),即增加一个恒为 1 的附加维度。这样,二维空间中的任意线性变换加上平移,就可以通过一个 3×3 矩阵作用于齐次坐标向量来完成。

齐次坐标的引入并非仅仅为了数学上的优雅,它带来了两个关键工程优势:其一,变换的级联(复合)可以通过矩阵乘法直接实现,避免了多次函数调用的开销与误差累积;其二,透视变换中的除法操作(即 w 分量归一化)可以被自然地纳入矩阵框架,使得投影变换也能用统一的矩阵语言描述。在图像处理库(如 OpenCV、MATLAB)中,所有几何变换函数均以齐次矩阵作为核心参数,理解这一点是正确调用 API 的前提。

核心原理: 齐次坐标将二维点 (x, y) 映射为 (x, y, 1)。变换矩阵 M 为 3×3 矩阵,输出点 (x', y') 通过计算 M · (x, y, 1)ᵀ 后,将结果的前两个分量除以第三个分量(w 分量)得到。当 w=1 时,除法不改变坐标值;当 w≠1 时,则实现了透视缩放效果。

2.2 基本变换的矩阵表示

2.2.1 平移变换

平移是最简单的几何变换,将图像中每个像素点沿 x 轴方向移动 tx,沿 y 轴方向移动 ty。其齐次坐标矩阵形式为:

| 1  0  tx |
| 0  1  ty |
| 0  0  1  |

平移矩阵的逆矩阵只需将 tx、ty 取负即可。在图像校正中,平移常用于将图像中心移至坐标原点,以便后续旋转或缩放操作围绕图像中心进行,避免图像内容偏移出视野。

2.2.2 旋转变换

绕原点逆时针旋转角度 θ 的变换矩阵为:

| cosθ  -sinθ  0 |
| sinθ   cosθ  0 |
| 0      0     1 |

旋转矩阵是正交矩阵,其逆矩阵等于转置矩阵,即 R⁻¹ = Rᵀ。这一性质在图像配准中非常有用——当我们需要反向旋转时,直接取转置即可,无需重新计算三角函数。需要注意的是,图像坐标系通常以左上角为原点,y 轴向下,因此正角度方向与数学惯例相反,实际应用中需根据坐标系定义调整符号。

2.2.3 缩放变换

沿 x 轴缩放 sx 倍,沿 y 轴缩放 sy 倍的矩阵为:

| sx  0   0 |
| 0   sy  0 |
| 0   0   1 |

当 sx = sy 时称为各向同性缩放,保持图像纵横比;当 sx ≠ sy 时称为各向异性缩放,会导致图像拉伸变形。在图像校正中,缩放常用于统一不同来源图像的尺寸,或补偿镜头焦距差异带来的尺度变化。缩放矩阵的逆矩阵为对角线元素取倒数。

2.2.4 复合变换与变换顺序

实际工程中,单一变换很少独立使用。例如,绕图像中心 (cx, cy) 旋转的操作需要三步:先将中心平移到原点,再旋转,最后平移回去。其复合矩阵为:

M = T(cx, cy) · R(θ) · T(-cx, -cy)

这里矩阵乘法的顺序至关重要:先作用的变换矩阵位于乘法表达式的右侧。由于矩阵乘法不满足交换律,变换顺序的颠倒会产生完全不同的结果。在编写代码时,务必确认所使用的库函数是“先乘后”还是“后乘先”的约定。

变换类型矩阵形式(3×3)自由度不变性质典型应用
平移[1 0 tx; 0 1 ty; 0 0 1]2形状、大小、方向图像对齐、坐标原点移动
旋转[cosθ -sinθ 0; sinθ cosθ 0; 0 0 1]1长度、角度、面积图像摆正、方向校正
缩放[sx 0 0; 0 sy 0; 0 0 1]2平行性、角度(各向同性时)分辨率统一、尺度归一化
仿射[a b tx; c d ty; 0 0 1]6平行性、直线性倾斜校正、局部配准
透视[a b c; d e f; g h 1]8直线性(共线点映射后仍共线)梯形校正、视角变换

2.3 仿射变换:线性变换与平移的统一

仿射变换是平移、旋转、缩放、剪切(Shear)的组合,其矩阵形式为 2×3 矩阵(在齐次坐标下为 3×3 矩阵,第三行为 [0 0 1])。仿射变换最重要的几何性质是保持平行性:原本平行的直线在变换后仍然平行。这意味着矩形经过仿射变换后变为平行四边形,但不会变为任意四边形。仿射变换有 6 个自由度(4 个线性参数 + 2 个平移参数),因此理论上只需 3 组不共线的对应点对即可唯一确定变换矩阵。

在图像几何校正中,仿射变换常用于处理由相机倾斜、扫描仪畸变等引起的整体线性变形。例如,文档扫描图像的倾斜校正,通常通过检测文本行的倾斜角度,构造旋转矩阵进行反向校正。然而,仿射变换无法处理由于透视投影引起的“近大远小”效应——当相机光轴不垂直于目标平面时,图像中的平行线会汇聚于消失点,此时必须使用透视变换。

工程判断方法: 若图像变形表现为整体倾斜、拉伸或缩放,且原图中的平行线在变形后仍保持平行,则仿射变换足以完成校正。若变形后平行线出现汇聚趋势(如拍摄高楼时建筑轮廓向顶部收拢),则必须采用透视变换。

2.4 透视变换:模拟人眼视觉的投影模型

透视变换(又称投影变换或单应性变换)是最一般的二维平面变换,其矩阵为 3×3 矩阵,但第三行不再固定为 [0 0 1],而是包含两个非零参数 g 和 h。透视变换的齐次坐标表达式为:

| x' |   | a  b  c | | x |
| y' | = | d  e  f | | y |
| w' |   | g  h  1 | | 1 |

实际输出坐标为 (x'/w', y'/w')。当 g 和 h 不为零时,w' 不等于 1,从而产生非线性缩放效果。透视变换有 8 个自由度(矩阵整体缩放不影响变换结果,故归一化一个元素),需要 4 组不共线的对应点对来求解。透视变换保持直线性(直线映射后仍为直线),但不保持平行性,也不保持长度比例。

在图像变形补偿中,透视变换是镜头畸变校正、图像拼接、增强现实(AR)中平面标记跟踪的核心工具。例如,当相机以一定角度拍摄矩形屏幕时,屏幕在图像中呈现为梯形,通过透视变换可以将梯形映射回矩形,实现“正面化”校正。

2.5 变换矩阵的求解与参数估计

在实际校正任务中,我们通常不知道变换矩阵的具体参数,而是需要通过图像中的特征点对应关系来估计。对于仿射变换,使用 3 组对应点即可建立 6 个线性方程,通过求解线性方程组得到 6 个参数。对于透视变换,则需要 4 组对应点建立 8 个方程(每组点提供 2 个方程),求解 8 个未知数。

当对应点数量多于最小需求时(例如通过特征匹配得到 50 对匹配点),问题转化为超定方程组的求解。此时通常采用最小二乘法或 RANSAC(随机采样一致性)算法来估计变换矩阵,以抵抗误匹配点的干扰。RANSAC 的基本流程为:随机选取最小样本集(仿射 3 对、透视 4 对)计算变换矩阵,统计所有匹配点在该矩阵下的内点数量,迭代多次后保留内点最多的模型,最后用所有内点重新估计矩阵以提升精度。

风险提示: 使用最小二乘法求解透视变换时,若匹配点中存在少量外点(误匹配),会导致矩阵参数严重偏离真实值。务必先使用 RANSAC 或 M 估计等鲁棒方法剔除异常点,再进行最终求解。此外,对应点的空间分布应尽量均匀覆盖整个图像区域,避免所有点集中在局部区域导致矩阵外推不稳定。

2.6 案例拆解:文档图像梯形校正

假设我们使用手机拍摄了一张放置在桌面上的 A4 文档照片,由于拍摄角度并非垂直俯视,文档在图像中呈现为梯形。目标是校正为正面视角,便于 OCR 识别。已知文档的四个角点在图像中的像素坐标分别为:左上 (180, 240)、右上 (620, 200)、右下 (650, 480)、左下 (150, 520)。期望校正后的文档尺寸为 600×800 像素,对应角点坐标为:左上 (0, 0)、右上 (600, 0)、右下 (600, 800)、左下 (0, 800)。

求解步骤如下:

  1. 建立 4 组对应点对,代入透视变换方程,构造 8 元线性方程组。
  2. 使用高斯消元法或 SVD 分解求解 3×3 矩阵的 8 个未知参数。
  3. 对输出图像中的每个像素坐标 (u, v),计算其在输入图像中的对应位置 (x, y) = M⁻¹ · (u, v, 1)ᵀ。
  4. 由于计算出的坐标通常为浮点数,需采用双线性插值或三次插值获取像素值。

实际执行中,我们使用 OpenCV 的 getPerspectiveTransform(srcPoints, dstPoints) 函数获取矩阵,再调用 warpPerspective 完成重映射。校正后,文档边缘变为直线且与图像边界平行,OCR 识别准确率显著提升。该案例的代价是校正过程引入了插值误差,图像边缘区域可能出现轻微模糊,可通过使用更高阶插值算法(如 Lanczos)缓解。

2.7 常见误区与总结复盘

在图像几何变换的学习与工程实践中,以下误区值得特别关注:

  • 变换顺序混淆: 矩阵乘法不满足交换律,先旋转后平移与先平移后旋转的结果完全不同。建议在代码中明确注释每一步变换的意图,并使用矩阵级联而非逐像素计算。
  • 坐标系原点差异: 数学中通常以图像中心为原点,而图像处理库(如 OpenCV)默认以左上角为原点。直接套用数学公式会导致旋转后图像严重偏移,需先平移到中心再旋转。
  • 忽视插值影响: 几何变换本身不改变像素值,但重采样过程必然引入插值误差。对于放大操作,最近邻插值会产生锯齿;对于缩小操作,直接采样可能导致混叠,应使用区域插值或金字塔方法。
  • 透视变换的过度使用: 当变形本质为仿射时,使用透视变换虽然也能拟合,但会引入不必要的非线性畸变,且对噪声更敏感。应通过残差分析判断模型复杂度是否匹配。