4. 全局运动模型:平移模型、仿射变换、透视变换、模型选择的原则

各位同学,咱们今天聊聊全局运动模型。说白了,就是怎么用数学公式来描述两张图之间的“整体位移”。你想想看,手持相机拍HDR序列,手抖、风吹、甚至按快门那一下的震动,都会让画面整体偏移。这时候,我们就需要一个模型来“对齐”它们。

我个人习惯把全局运动模型分成三个档次:平移、仿射、透视。档次越高,能描述的变形越复杂,但计算量也越大。选哪个?嗯,这里要注意,不是越复杂越好,关键看你的场景和需求。

4.1 平移模型:最简单,也最常用

平移模型,就是假设图像只有水平和垂直方向的移动,没有旋转、没有缩放。公式很简单:

x' = x + dx
y' = y + dy

其中 (dx, dy) 就是我们要估计的偏移量。这个模型只有2个自由度,计算起来飞快。

我在项目中遇到过一个典型的场景:用三脚架固定相机拍HDR。理论上相机纹丝不动,但实际因为反光板震动或者风吹,还是会有几个像素的偏移。这时候用平移模型就足够了,又快又准。

我的经验: 平移模型特别适合“微抖动”场景。如果偏移量超过图像尺寸的10%,建议考虑更复杂的模型。

4.2 仿射变换:能处理旋转和缩放

仿射变换比平移模型多了一个“花样”——它可以描述旋转、缩放、剪切。公式长这样:

x' = a*x + b*y + c
y' = d*x + e*y + f

这里有6个自由度(a, b, c, d, e, f)。你可以把它想象成:先旋转一个角度,再缩放一下,最后平移。平行线在仿射变换后仍然是平行线。

我曾经在手持拍摄的HDR序列里吃过亏。当时用平移模型去对齐,结果发现边缘总是对不齐,后来一查,原来是拍摄时手不自觉地旋转了相机。换成仿射变换后,问题迎刃而解。

注意: 仿射变换不能处理“近大远小”的透视效果。如果你的场景有明显的景深变化,比如前景有近处的物体,背景有远处的山,仿射变换可能会失效。

4.3 透视变换:最强大,也最“贵”

透视变换,也叫单应性变换,是全局运动模型里的“大哥大”。它能描述任意四边形到四边形的映射,包括透视效果。公式是:

x' = (a*x + b*y + c) / (g*x + h*y + 1)
y' = (d*x + e*y + f) / (g*x + h*y + 1)

这里有8个自由度。你看分母里多了 (g*x + h*y + 1) 这一项,这就是透视效果的来源。平行线在透视变换后可能不再平行,会汇聚到一点。

说实话,透视变换在HDR多帧对齐里用得不算多。为什么?因为计算量大,而且容易过拟合。你想想看,如果两张图之间只是简单的平移,你用8个自由度的模型去拟合,反而可能引入不必要的变形。

核心观点: 透视变换只推荐在以下场景使用:
  • 相机有明显的“摇摆”运动(比如手持相机大幅度移动)
  • 场景中有明显的透视变形(比如拍摄建筑物)
  • 其他模型对齐后,残差仍然很大

4.4 模型选择的原则:我的“三步走”策略

讲了这么多,到底怎么选?我总结了一个“三步走”策略,分享给大家:

  1. 先试平移模型。 如果对齐后的图像在重叠区域的平均误差小于0.5像素,那就用平移模型。简单、稳定、快。
  2. 不行再试仿射变换。 如果平移模型误差大,或者你发现图像有明显的旋转/缩放,那就升级到仿射变换。
  3. 最后才考虑透视变换。 只有当前两种模型都搞不定,而且你确认场景有透视变形时,才用透视变换。

我个人习惯在代码里做一个自动选择:先算平移模型的误差,如果误差超过阈值,自动切换到仿射变换;如果仿射变换的误差还是大,再尝试透视变换。这样既保证了效率,又不会漏掉复杂情况。

避坑指南: 我曾经在夜景HDR里直接用了透视变换,结果因为暗部噪声太大,模型估计出来的参数全是错的,对齐效果还不如平移模型。记住:模型越复杂,对特征点的质量要求越高。如果图像质量差,宁可用简单模型。

4.5 知识体系图:全局运动模型一览

下面这张图总结了三种模型的关系和选择逻辑,你可以把它当作一个快速参考:

全局运动模型选择框架 全局运动模型 平移模型 (2 DOF) 仿射变换 (6 DOF) 透视变换 (8 DOF) 适用:微抖动 三脚架固定拍摄 偏移量 < 10% 适用:旋转/缩放 手持轻微晃动 无透视变形 适用:大幅摇摆 透视变形明显 特征点质量高 误差大→ 误差大→ 原则:从简到繁,够用就好

4.6 实际项目中的选择建议

最后,我根据多年的项目经验,给大家一个更具体的参考表:

拍摄方式 推荐模型 理由
三脚架 + 遥控快门 平移模型 几乎无运动,平移足够
手持拍摄(白天) 仿射变换 有轻微旋转和缩放
手持拍摄(夜景) 平移模型 噪声大,复杂模型容易过拟合
无人机航拍 透视变换 视角变化大,透视变形明显

嗯,关于全局运动模型,今天就聊到这里。记住一句话:模型是工具,不是目的。选对模型,你的HDR重建就成功了一半。