1. HDR成像概述:什么是高动态范围成像、多曝光融合的基本原理、鬼影问题的由来
各位同学好,我是这门课的主讲。今天咱们聊聊HDR成像的底层逻辑。说实话,我最早接触HDR是在2015年做手机相机算法的时候,那时候大家还在拼像素数量,很少有人关注动态范围。直到有一次我在逆光场景下拍了一张照片——天空一片死白,人脸一片死黑——我才意识到,传统成像的短板到底在哪。
1.1 什么是高动态范围成像
先问一个问题:你见过最亮的物体和最暗的物体同时出现在一个画面里吗?比如透过窗户看室外的阳光,室内还有一盏台灯。人眼能同时看清窗外的云和室内的书本,但相机不行。为什么?
因为人眼的动态范围大约在20档左右,而普通相机的传感器只有10-12档。动态范围,说白了就是传感器能同时记录的最亮和最暗区域的比值。比值越大,细节越丰富。
动态范围定义:传感器能同时记录的最大信号与最小信号的比值,通常用档位(EV)或分贝(dB)表示。
1 EV = 2倍亮度变化 ≈ 6 dB
高动态范围成像(HDR Imaging)就是通过技术手段,把有限动态范围的传感器拍出来的多张图片,合成一张动态范围更广的图像。我习惯把它比作「拼图」——每张图只负责一个亮度区间,合在一起就是完整的亮度信息。
| 成像方式 | 动态范围 | 典型场景 |
|---|---|---|
| 单帧LDR | 10-12 EV | 均匀光照、阴天 |
| 多帧HDR | 16-20 EV | 逆光、夜景、室内外混合 |
| 人眼 | ~20 EV | 几乎所有自然场景 |
1.2 多曝光融合的基本原理
多曝光融合,就是HDR最核心的实现手段。你想想看,既然单张照片拍不全,那就拍多张——一张欠曝保留高光细节,一张正常曝光保留中间调,一张过曝保留暗部细节。然后把这3张(或更多)融合成一张。
具体流程是这样的:
- 采集多帧:固定相机位置,改变曝光时间或ISO,连续拍摄2-5帧。
- 对齐:因为手持拍摄会有微小抖动,需要先做图像配准。
- 权重计算:对每个像素,根据其亮度值分配权重。比如欠曝帧的亮部权重高,过曝帧的暗部权重高。
- 融合:加权平均,生成HDR结果。
我在项目中遇到过一个问题:如果直接用线性加权,融合后的图像会发灰。后来发现是因为权重函数没调好。常用的权重函数有三种:
| 权重类型 | 公式 | 特点 |
|---|---|---|
| 高斯权重 | w(x) = exp(-(x-μ)²/2σ²) | 中间调权重高,两端低 |
| 三角权重 | w(x) = 1 - |x-μ|/L | 线性衰减,计算快 |
| 饱和权重 | w(x) = 1 - (x/255)² | 抑制过曝区域 |
我的经验:实际工程中,我建议用高斯权重配合饱和权重做组合。高斯保证中间调平滑,饱和权重压制高光溢出。别只用一种,效果会偏硬。
下面这张图展示了多曝光融合的核心流程:
1.3 鬼影问题的由来
好,前面说的都是理想情况。但现实很骨感——你拍多张照片的时候,场景里的物体可能在动。比如风吹树叶、行人走过、汽车驶过。这些运动物体在每帧中的位置不一样,融合之后就会出现半透明的重影,这就是鬼影(Ghosting)。
为什么会这样?我举个例子:
- 第1帧(欠曝):行人站在左边
- 第2帧(正常):行人走到中间
- 第3帧(过曝):行人走到右边
融合之后,行人同时出现在左、中、右三个位置,像鬼一样飘着。这就是鬼影。
注意:鬼影不是噪声,也不是模糊。它是运动物体在多帧融合时产生的伪影。我曾经在一个安防项目中吃过亏——监控场景里有人走动,HDR融合后人脸全是重影,根本没法做识别。后来才意识到,必须先做运动检测和去鬼影处理。
鬼影的严重程度取决于三个因素:
| 因素 | 影响 | 典型场景 |
|---|---|---|
| 运动速度 | 越快越严重 | 行人、车辆、飞鸟 |
| 帧间间隔 | 间隔越大越严重 | 长曝光HDR(夜景) |
| 运动区域大小 | 越大越明显 | 大面积树叶晃动 |
所以,去鬼影就成了HDR融合中绕不开的一环。这门课后面会详细讲各种去鬼影方法——从简单的运动检测到深度学习方案。但今天先记住一点:没有去鬼影的HDR,在动态场景下就是废片。
一个小技巧:如果你只是做实验,可以用三脚架固定相机,拍静态场景,这样就不会有鬼影。但真实产品里,用户都是手持拍摄,运动物体无处不在。所以去鬼影不是可选项,是必选项。