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 配准流程框架
下面这张图是我在实际项目中常用的配准流程。它把特征提取、模型估计、图像变换串在了一起。
3.5 配准中的两个关键细节
流程看起来简单,但实际落地时有两个坑,我踩过不止一次。
3.5.1 亚像素精度
夜景多帧降噪对配准精度的要求很高。整像素级别的配准,叠加后边缘会有锯齿感。必须做到亚像素精度——也就是 0.1 像素、甚至 0.01 像素级别。
怎么实现?两种思路:
- 插值法:对图像做上采样(比如 2x 或 4x),然后在放大后的图像上做整像素配准。代价是内存和计算量翻倍。
- 梯度法:利用图像梯度信息,直接求解亚像素偏移量。比如 Lucas-Kanade 光流法,精度高、速度快,是我个人比较推荐的做法。
3.5.2 鲁棒估计
真实场景中,图像里会有运动物体(行人、车灯、树叶晃动)。这些区域的特征点如果参与配准,会把模型带偏。怎么办?
我习惯用 RANSAC(随机采样一致性)来做鲁棒估计。它的思路很简单:随机选一小部分特征点估计模型,然后看其他点是否符合这个模型。重复多次,选那个「支持者最多」的模型。
经验之谈:RANSAC 的阈值设置很关键。设得太小,模型只拟合了静态区域,但可能丢掉有效点;设得太大,运动物体混进来,配准就崩了。我一般设 1~2 个像素,具体看图像分辨率。
3.6 小结
这一章我们聊了配准的必要性,以及三种常用的变换模型。说白了,配准就是「找对应、算变换、做对齐」三步。平移模型简单够用,旋转模型应对小角度抖动,仿射模型处理更复杂的变形。选哪个,取决于你的拍摄场景和精度要求。