3. 图像配准基础

多帧降噪的核心,说白了就是「把多张照片叠在一起求平均」。但这里有个大问题——你手持拍摄时,手会抖。哪怕你屏住呼吸,几帧之间画面也会有微小的偏移。直接叠?那画面就糊了。

所以,在叠加之前,我们必须先做一件事:图像配准。

3.1 为什么需要配准?

我刚开始做夜景算法时,犯过一个低级错误。当时我拿到 6 帧 RAW 图,心想「直接平均不就完了?」结果出来的照片边缘全是重影,路灯拖成了光条。后来才意识到,哪怕 0.5 个像素的偏移,在叠加后都会产生明显的鬼影。

配准要解决的核心问题就一个:找到两幅图像之间的空间对应关系。换句话说,就是算出「第一帧里的这个像素,在第二帧里跑到哪去了」。

为什么要做这件事?三个原因:

  • 消除鬼影:运动物体或手抖导致的错位,不配准直接叠,边缘会重影。
  • 提升信噪比:只有像素对齐了,叠加时信号才能累加,噪声才能被平均掉。
  • 保留细节:配准精度越高,高频细节(纹理、边缘)保留得越好。

核心结论:配准精度直接决定多帧降噪的上限。配准做不好,后面所有努力都是白费。

3.2 图像变换模型

配准的第一步,是选一个「变换模型」。这个模型描述了两帧图像之间的几何关系。常见的模型有平移、旋转、仿射、透视。夜景多帧场景下,最常用的是前三种。

3.2.1 平移模型

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

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

其中 (dx, dy) 就是平移量。这个模型只有 2 个自由度,计算量最小。适合三脚架固定拍摄、只有轻微手抖的场景。

我记得有一次做手机夜景模式,发现大部分手持抖动其实都可以用平移模型近似。因为手机 CMOS 小,曝光时间短,旋转量通常可以忽略。

实用技巧:平移模型虽然简单,但配合亚像素精度(比如 1/10 像素),已经能覆盖 80% 的手持夜景场景。我建议先跑平移配准,如果残差太大再升级到仿射。

3.2.2 旋转模型

如果拍摄时手机有轻微的转动(绕光轴),平移模型就不够用了。这时候需要引入旋转。旋转模型可以写成:

x' = x * cos(θ) - y * sin(θ) + dx
y' = x * sin(θ) + y * cos(θ) + dy

这里 θ 是旋转角度。加上平移,一共 3 个自由度。旋转模型在夜景中很常见——你按下快门时手腕的轻微扭转,就会产生 0.1°~0.5° 的旋转。

嗯,这里要注意:旋转中心通常取图像中心,但实际拍摄时旋转中心可能是相机云台或手腕关节。不过对于小角度旋转,用图像中心近似就够了。

3.2.3 仿射变换模型

仿射变换是更通用的模型。它允许平移、旋转、缩放、剪切。数学形式是:

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

6 个自由度。仿射变换能处理更复杂的变形,比如镜头畸变导致的局部拉伸、或者拍摄时相机前后移动产生的缩放。

我曾经在项目中遇到过一个问题:用平移模型配准后,叠加结果边缘总有模糊。后来换成仿射模型,问题就解决了。原因是镜头在近摄时存在微小的透视变形,平移模型根本描述不了这种非线性变化。

避坑指南:仿射变换虽然强大,但参数越多,越容易过拟合。如果图像纹理少(比如拍夜空),强行用仿射反而会引入错误匹配。我建议:先平移,不行再仿射,不要一上来就上最复杂的模型。

3.3 三种模型对比

为了让你快速决策,我把三种模型的核心差异整理成了一张表:

模型 自由度 适用场景 计算量 精度
平移 2 三脚架、轻微手抖 低 中等
旋转+平移 3 手持夜景、小角度转动 中 较高
仿射 6 镜头畸变、缩放、复杂抖动 高 高

3.4 配准流程框架

下面这张图是我在实际项目中常用的配准流程。它把特征提取、模型估计、图像变换串在了一起。

多帧配准流程框架 输入:参考帧 + 待配准帧 特征提取(角点/边缘/梯度) 变换模型估计(平移/旋转/仿射) 图像变换(重采样 + 插值) 输出:对齐后的图像序列 关键点 特征提取质量 决定配准上限 模型选择影响鲁棒性 常见问题 过拟合 → 用RANSAC 亚像素精度 → 插值 大位移 → 金字塔

3.5 配准中的两个关键细节

流程看起来简单,但实际落地时有两个坑,我踩过不止一次。

3.5.1 亚像素精度

夜景多帧降噪对配准精度的要求很高。整像素级别的配准,叠加后边缘会有锯齿感。必须做到亚像素精度——也就是 0.1 像素、甚至 0.01 像素级别。

怎么实现?两种思路:

  • 插值法:对图像做上采样(比如 2x 或 4x),然后在放大后的图像上做整像素配准。代价是内存和计算量翻倍。
  • 梯度法:利用图像梯度信息,直接求解亚像素偏移量。比如 Lucas-Kanade 光流法,精度高、速度快,是我个人比较推荐的做法。

3.5.2 鲁棒估计

真实场景中,图像里会有运动物体(行人、车灯、树叶晃动)。这些区域的特征点如果参与配准,会把模型带偏。怎么办?

我习惯用 RANSAC(随机采样一致性)来做鲁棒估计。它的思路很简单:随机选一小部分特征点估计模型,然后看其他点是否符合这个模型。重复多次,选那个「支持者最多」的模型。

经验之谈:RANSAC 的阈值设置很关键。设得太小,模型只拟合了静态区域,但可能丢掉有效点;设得太大,运动物体混进来,配准就崩了。我一般设 1~2 个像素,具体看图像分辨率。

3.6 小结

这一章我们聊了配准的必要性,以及三种常用的变换模型。说白了,配准就是「找对应、算变换、做对齐」三步。平移模型简单够用,旋转模型应对小角度抖动,仿射模型处理更复杂的变形。选哪个,取决于你的拍摄场景和精度要求。