1、HDR成像基础:什么是高动态范围、多帧HDR合成原理、噪声的来源与分类

各位同学好,我是你们这门课的老朋友。在图像处理这行摸爬滚打了十几年,我见过太多因为噪声处理不当而翻车的HDR项目。今天咱们就从最基础的东西聊起——先把HDR成像的底子打牢,后面讲噪声抑制你才能听得明白。

1.1 什么是高动态范围?

说白了,动态范围就是一张图像能同时记录的最亮和最暗区域的亮度比值。你想想看,人眼在同一个场景里,能同时看清窗外的蓝天和室内的阴影细节。但普通相机呢?要么天空过曝一片死白,要么暗部欠曝一团漆黑。

这就是动态范围的差距。人眼的瞬时动态范围大概在10^5:1左右,而普通8-bit JPEG图像只有256:1。我当年第一次用单反拍逆光人像,背景天空一片惨白,人脸却黑得像剪影——那时候我就意识到,单帧成像的瓶颈太明显了。

动态范围定义: 场景中最亮区域与最暗区域的亮度比值,通常用对数坐标表示(单位:dB或stop)。1 stop = 2倍亮度,10 stops ≈ 1000:1。

高动态范围成像,就是要突破普通传感器的物理限制,把场景的真实亮度范围尽可能完整地记录下来。这里有个关键概念——场景动态范围和显示动态范围是两码事。前者是真实世界的亮度跨度,后者是显示器能呈现的范围。我们做HDR合成,本质上是在做“场景→显示”的映射优化。

1.2 多帧HDR合成原理

既然单帧搞不定,那就多拍几张呗。多帧HDR合成的核心思路很简单:用不同曝光时间的多张图像,各自捕捉场景的不同亮度区间,然后合成一张高动态范围的图像。

具体流程我画了张图,你看一眼就明白了:

多帧HDR合成流程 欠曝帧 (-2EV) 正常帧 (0EV) 过曝帧 (+2EV) 图像对齐 + 去鬼影 权重融合 色调映射 HDR输出图像 关键说明: • 输入帧通常为3-7张,曝光步长1-2 EV • 对齐解决手持拍摄的微小位移 • 去鬼影消除运动物体(行人、车辆)的残影 噪声来源: • 欠曝帧:读出噪声占主导,信噪比低 • 过曝帧:光子散粒噪声明显,但暗部细节好

流程看起来不复杂,对吧?但每个环节都有坑。我重点说说权重融合这一步——它直接决定了最终HDR图像的信噪比表现。

常见的权重函数有三种:

权重类型 公式 特点 适用场景
均匀权重 w = 1/N 简单粗暴,噪声平均效果最好 静态场景、低噪声环境
高斯权重 w ∝ exp(-(I-0.5)²/σ²) 中间亮度区域权重高,两端压低 一般场景,平衡细节与噪声
信噪比权重 w ∝ SNR(I) 根据像素的信噪比动态分配权重 高噪声场景,需要自适应处理
我的经验: 在实际项目中,我很少用纯均匀权重。欠曝帧的暗部噪声太大,给它和正常帧一样的权重,结果就是暗部噪点满天飞。我一般用信噪比权重做基础,再叠加一个边缘保护项——这样既能抑制噪声,又不会把边缘细节磨没了。

1.3 噪声的来源与分类

好了,终于到今天的重头戏了。噪声这东西,你躲不开,只能学会跟它共处。我当年做手机HDR算法时,被噪声折磨得够呛——白天还好,一到夜景模式,那噪点简直像雪花一样。

噪声主要分两大类:光子散粒噪声和读出噪声。前者是物理极限,后者是电路缺陷。

1.3.1 光子散粒噪声

光本身就是离散的光子,到达传感器的数量服从泊松分布。这意味着,即使场景亮度完全均匀,每个像素接收到的光子数也会有随机波动。这个波动就是散粒噪声。

它的特点是:信号越强,噪声越大。但别慌,信噪比是随着信号强度增加的——信号翻倍,噪声只增加√2倍,所以亮部信噪比高,暗部信噪比低。

散粒噪声公式: σ_shot = √(N),其中N是光子数。信噪比 SNR = N / √N = √N。

1.3.2 读出噪声

读出噪声是传感器在将电荷转换为电压、再经过模拟前端放大和ADC量化过程中引入的噪声。它跟信号强度无关,是一个固定底噪。我见过最夸张的一次,某款传感器的读出噪声高达12个电子——这意味着暗部细节完全被噪声淹没了。

读出噪声的主要成分包括:

  • 复位噪声(kTC噪声): 像素复位时电容热噪声,约√(kT/C)
  • 1/f噪声: 晶体管低频噪声,在慢速读出时尤其明显
  • ADC量化噪声: 模数转换的量化误差,LSB的±0.5

1.3.3 多帧HDR中的噪声特性

在多帧HDR合成中,不同曝光帧的噪声特性完全不同。我整理了一张表,方便你对比:

曝光帧 主要噪声类型 信噪比特点 对合成结果的影响
欠曝帧 (-2EV) 读出噪声占主导 暗部SNR极低,< 10 dB 暗部噪点放大,出现彩色噪斑
正常帧 (0EV) 散粒噪声 + 读出噪声 中间亮度SNR约30-40 dB 整体噪声水平适中
过曝帧 (+2EV) 散粒噪声占主导 亮部SNR高,> 45 dB 暗部细节好,但亮部可能饱和
避坑指南: 我曾经在项目中直接用欠曝帧的暗部像素去填充HDR的暗区,结果噪点被放大了3倍以上。后来我学乖了——欠曝帧的暗部必须做空间域降噪预处理,否则合成后的暗区根本没法看。

1.4 噪声与HDR合成的矛盾

这里有个核心矛盾,我特别想强调一下:HDR合成需要多帧融合,但融合过程本身可能放大噪声。

你想想看,欠曝帧的暗部信噪比低,过曝帧的亮部信噪比高。如果我们简单地把它们加权平均,欠曝帧的噪声就会污染整个暗区。更麻烦的是,色调映射环节会把暗部提亮——这一提亮,噪声也跟着被放大了。

所以,多帧HDR合成中的噪声抑制,本质上是在做三件事:

  1. 帧间降噪: 利用多帧冗余信息,通过时域滤波降低随机噪声
  2. 自适应权重: 根据每帧的信噪比动态分配融合权重,压低噪声帧的贡献
  3. 后处理降噪: 在色调映射之后,对暗部做针对性降噪

这三件事说起来简单,做起来全是细节。后面的章节我会一个一个拆开来讲。今天先把基础概念理清楚——动态范围是什么、多帧合成怎么玩、噪声从哪里来。这些搞明白了,后面讲具体算法你才不会晕。

一个小建议: 如果你手头有相机,今晚就去拍一组不同曝光的夜景照片。欠曝、正常、过曝各拍一张,然后手动合成一下。亲眼看看噪声是怎么从暗部冒出来的——这比看一百页理论都管用。