坐标变换基础:四种变换的数学含义

图像配准说白了就是找两张图之间的“映射关系”。这个映射关系用数学语言描述,就是坐标变换。我记得刚入行时,总以为所有配准都一样,结果在医学图像上翻了车——不同模态的图像变形方式天差地别。所以我们得先把四种基本变换搞清楚。

核心观点: 图像配准的坐标系变换,本质上是找到一个映射函数 T,把浮动图像中的每个像素点 (x, y) 映射到参考图像中的 (x', y')。

变换类型全景图

先看一张总图,把四种变换放在一起对比,你就能理解它们各自能“做什么、不能做什么”。

坐标变换核心分类(自由度递增) 刚体变换 旋转 + 平移 自由度: 3 仿射变换 缩放 + 剪切 + 旋转 自由度: 6 投影变换 透视 + 仿射 自由度: 8 非线性变换 局部形变 自由度: 很高 💡 关键规律 刚体 → 仿射 → 投影 → 非线性的顺序,就是数学自由度逐步增加的顺序。 我在项目中习惯先试刚体/仿射,不行再上升到投影或非线性。为什么呢? 自由度越高的变换越容易过拟合,尤其是噪声大的图像。
实用建议: 做配准时,先从低自由度变换开始尝试。我见过有人一上来就用非线性变换,结果跑了半小时发现根本没用——其实是两张图只有平移偏差。刚体就够了。

1. 刚体变换

刚体变换是最简单的一类。它只包含旋转和平移。形状大小都不变,就像你手里拿着一张纸,在桌面上挪动或转动。

数学形式是 2×2 旋转矩阵加上平移向量。在 2D 中表示为:

x' = cosθ · x - sinθ · y + tx
y' = sinθ · x + cosθ · y + ty

写成矩阵:

[x']   [cosθ  -sinθ] [x]   [tx]
[y'] = [sinθ   cosθ] [y] + [ty]

自由度只有 3 个:一个旋转角度 θ,两个平移分量 tx、ty。你要是用刚体变换去配准一个被拉伸过的图像,那肯定失败——因为它没法处理缩放。

注意: 刚体变换保持欧氏距离不变。就是说图像里任意两点之间的距离,变换后还是一样长。如果图像存在光学畸变或尺子变化,刚体配不准。

我遇到过这么个事:一个卫星遥感项目,两张图拍的是同一片区域,但拍摄角度和高度略有不同。一开始我用刚体配,误差很大。后来发现其实存在微小的尺度和透视变形——所以果断换成了仿射变换。

2. 仿射变换

仿射变换比刚体多了一些自由度。它支持旋转、平移、缩放、错切(shear)。矩形变换后可能变成平行四边形,但平行直线还是平行。

数学形式:

[x']   [a11  a12] [x]   [tx]
[y'] = [a21  a22] [y] + [ty]

其中 a11~a22 这 4 个参数组合起来控制缩放、旋转和剪切。加上 2 个平移,总共 6 个自由度。

实际代码里我们用齐次坐标统一表达:

[x']   [a11  a12  tx] [x]
[y'] = [a21  a22  ty] [y]
[1 ]   [ 0    0    1] [1]
典型应用: 显微镜图像拼接、遥感图像地理校正、文档扫描校正。在这些场景里,图像常常存在缩放和轻微变形,但整体还是“线性”的。

3. 投影变换

投影变换也叫透视变换或单应性变换。它比仿射多一个能力:让平行线在变换后可以相交,产生透视效果。你想想看,一个长方形被投影后在照片上变成梯形,这就是投影变换能做到的事。

齐次坐标形式(8 自由度):

[x']   [h11  h12  h13] [x]
[y'] = [h21  h22  h23] [y]
[w']   [h31  h32   1 ] [1]

实际输出坐标:
x_final = x' / w'
y_final = y' / w'

注意分母 w' 是由 h31 和 h32 决定的,这就产生了“透视除法”。

投影变换需要至少 4 对匹配点才能解算。我记得有一次做车载环视拼接,用仿射总是配不准地面标线,换成投影变换后,四幅图像完美融合到俯视图上。但注意:投影变换仍然保持直线是直线——它不能把直线变曲线。

4. 非线性变换

这是最灵活也最复杂的一类。非线性变换允许局部畸变,每个像素点都可以有独立的位移。它不保持直线,也不保持平行性。

数学上用位移场表示:

x' = x + u(x, y)
y' = y + v(x, y)

其中 u(x,y) 和 v(x,y) 是两个随空间变化的函数,可以是多项式、B样条、TPS(薄板样条)或基于物理模型的形式。

举个常见例子,医学图像里的非线性配准:

// 常用模型:B样条自由形变 (FFD)
// 用控制网格上的位移系数插值得到全图位移
Φ = {φ_ij}   (网格控制点)
u(x,y) = Σ B_i(x) B_j(y) · φ_ij_x
v(x,y) = Σ B_i(x) B_j(y) · φ_ij_y
严重警告: 非线性变换自由度极高,很容易过拟合。我之前有个学生用400个控制点的B样条去配两张噪声图,结果配出来的变形完全没物理意义。一定要加正则化约束,比如平滑项或体积保持项。

表格:四种变换对比

变换类型 自由度 保留特征 常用场景 最低点数
刚体 3 距离、角度、形状 相机固定平移/旋转 2对点
仿射 6 平行线、直线 遥感、航空影像 3对点
投影 8 直线(不保平行) 全景拼接、透视校正 4对点
非线性 很高 不保任何特征 医学变形、非刚性配准 大量点

我的选择策略

在实际项目中,我一般这样选:

  1. 先分析图像之间变形的来源。是传感器静止(刚体)?有尺差(仿射)?视角不同(投影)?还是组织变形(非线性)?
  2. 从最低自由度开始试,用少量匹配点验证配准误差。如果均方根误差(RMSE)小于0.5像素,就够用了。
  3. 只有低自由度变换不行时,再往上走。曾经有一个CBCT和规划CT的配准任务,我用投影变换误差1.2mm,换非线性配准(TPS)降到0.3mm。但代价是计算时间从0.5秒涨到了15秒。
实用检查清单:
  • 刚体:检查是否有旋转/平移之外的形变?有→升级
  • 仿射:检查平行线是否还保持平行?不保持→投影
  • 投影:检查直线是否变弯?变弯→非线性
  • 非线性:检查位移场是否平滑?否则加正则化