4、图像配准基础:为什么要配准、全局运动模型(平移/仿射/透视)、特征点匹配简介

各位同学,欢迎来到第四讲。前面我们聊了多帧融合的基本思路,也讲了如何从RAW图里拿到干净的数据。但有个问题一直悬着——你手里拿着好几张不同曝光的照片,怎么保证它们能严丝合缝地对齐?

这就是我们今天要啃的硬骨头:图像配准。

说白了,配准就是给多张图找一个共同的坐标系。你想想看,手持拍摄时手会抖,哪怕上了三脚架,按快门那一下也会有微小的位移。更别说HDR场景下,不同曝光帧之间可能隔着几百毫秒,风吹草动、行人走动,都会让像素位置发生偏移。

如果不做配准直接融合,结果就是重影、模糊,甚至出现鬼影。我早期做HDR项目时,就吃过这个亏。当时觉得“反正都是同一场景,差几个像素无所谓”,结果融合出来的照片边缘全是虚的,被老板骂了一顿。嗯,从那以后我再也不敢跳过配准了。

4.1 为什么要配准?—— 从像素对齐说起

我们先从最直观的角度理解。假设你有两张图,一张欠曝(保留高光细节),一张过曝(保留暗部细节)。理想情况下,两张图的同一个物体应该出现在同一个像素坐标上。

但现实是残酷的:

  • 手持抖动:哪怕你觉得自己拿得很稳,实际位移也有1-3个像素。
  • 视差变化:不同曝光帧之间,相机可能因为按快门力度不同而产生微小旋转。
  • 场景运动:树叶在摇动、有人在走路,这些运动物体如果不处理,融合后就是一团鬼影。

配准要解决的核心问题就是:找到两幅图像之间的空间变换关系,然后把它们映射到同一个坐标系下。

核心观点:配准的精度直接决定了HDR融合的质量上限。配准做不好,后面的融合算法再牛也是白搭。

4.2 全局运动模型:平移、仿射与透视

配准的第一步,是确定用什么模型来描述图像之间的运动。我习惯把运动模型分成三类,按自由度从低到高排列。

4.2.1 平移模型(2自由度)

最简单的模型。假设图像只有x方向和y方向的整体移动,没有旋转、没有缩放。用数学表达就是:

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

这个模型适合什么场景?嗯,比如你用三脚架固定相机,只按快门,基本就是纯平移。或者你处理的是连拍模式下的几张图,抖动很小的时候也可以用。

但说实话,实际项目中纯平移的情况很少。我做过一个手机HDR项目,发现哪怕用OIS(光学防抖),手持拍摄时依然会有0.5度左右的旋转。这时候平移模型就不够用了。

4.2.2 仿射模型(6自由度)

仿射模型可以处理平移、旋转、缩放和剪切。它的矩阵形式是:

[x']   [a  b  tx] [x]
[y'] = [c  d  ty] [y]
[1 ]   [0  0  1 ] [1]

其中a、b、c、d控制旋转和缩放,tx、ty控制平移。仿射模型有个重要性质:平行线变换后仍然是平行线。

我个人觉得,仿射模型是HDR配准中最常用的模型。为什么?因为大多数手持拍摄的场景,相机运动可以近似为刚体运动(旋转+平移),再加上一点点缩放(比如你按快门时身体前后晃动)。仿射模型刚好能覆盖这些情况。

我的经验:在手机HDR项目中,我通常先用平移模型做粗配准,再用仿射模型做精配准。这样既保证了速度,又保证了精度。

4.2.3 透视模型(8自由度)

透视模型也叫单应性模型,它可以处理更复杂的变换,比如视角变化。矩阵形式:

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

注意这里多了一个w'分量,最后要归一化:x'' = x'/w', y'' = y'/w'。

透视模型最大的特点是:直线变换后仍然是直线,但平行线可能不再平行。这有什么用?比如你拍一个建筑物,从不同角度拍,就需要透视模型来校正。

不过,在HDR场景中,透视模型用得相对少。因为HDR的多帧通常是在同一位置连续拍摄的,视角变化极小。除非你拍的是大场景拼接,否则仿射模型基本够用。

模型 自由度 适用场景 计算量
平移 2 三脚架、微小抖动 低
仿射 6 手持拍摄、刚体运动 中
透视 8 视角变化、拼接 高

4.3 特征点匹配简介:如何找到对应关系

有了运动模型,下一步就是求解模型参数。怎么求?你得先知道两张图里哪些点是相互对应的。

这就引出了特征点匹配。说白了,就是在两张图里找到相同的“地标”,然后根据这些地标的位置变化来推算运动参数。

4.3.1 什么是特征点

特征点就是图像中具有显著性的点。比如:

  • 角点(墙角、桌角)
  • 纹理丰富的区域(草地、布料)
  • 边缘交叉点

好的特征点应该具备:重复性(在不同曝光下都能被检测到)、独特性(容易区分)、稳定性(对光照变化不敏感)。

4.3.2 常见的特征点算法

我简单列几个常用的,大家有个印象就行,后面章节会详细讲:

  • SIFT:尺度不变特征变换。最经典,精度高,但计算量大。我记得2010年左右做项目时,用SIFT配准一张图要好几秒。
  • SURF:SIFT的加速版。速度提升不少,但专利问题限制了使用。
  • ORB:目前移动端最常用的。速度快,适合实时处理。我在手机HDR项目里用的就是ORB。
  • AKAZE:非线性尺度空间,对边缘保持更好。适合有噪声的场景。

注意:特征点匹配不是万能的。如果场景纹理太少(比如白墙),或者运动太大(比如快速甩动相机),特征点匹配就会失效。这时候需要结合其他方法,比如光流法或直接法。

4.3.3 匹配流程

特征点匹配的流程大致如下:

  1. 检测:在两张图中分别提取特征点。
  2. 描述:为每个特征点生成一个描述子(一个向量)。
  3. 匹配:计算描述子之间的相似度,找到对应点对。
  4. 筛选:用RANSAC等方法剔除错误匹配。
  5. 求解:用正确的匹配点对求解运动模型参数。

这里有个坑,我曾经踩过。有一次我用ORB匹配,发现匹配点对很多,但求解出来的仿射矩阵却是错的。后来排查发现,是因为场景中有重复纹理(比如瓷砖),导致很多匹配是“假阳性”。从那以后,我每次都会用RANSAC做一轮筛选,把外点剔除干净。

4.4 本章知识体系

下面这张图总结了配准的核心逻辑,从“为什么要做”到“怎么做”,再到“用什么模型”。

图像配准知识体系 为什么要配准? 手持抖动 / 像素偏移 视差变化 / 微小旋转 场景运动 / 鬼影 全局运动模型 平移模型(2自由度) 仿射模型(6自由度) 透视模型(8自由度) 特征点匹配(求解模型参数) 检测特征点 生成描述子 匹配点对 RANSAC筛选 求解模型 核心:找到对应关系 → 求解变换参数 → 像素对齐