1. HDR成像基础:什么是高动态范围、HDR vs SDR对比、相机响应曲线(CRF)原理
1.1 什么是高动态范围?
先问大家一个问题:你站在窗边拍照,窗外阳光明媚,室内光线昏暗。普通手机拍出来,窗外一片死白,室内一团漆黑。但人眼却能同时看清窗外和室内的细节。为什么?
因为人眼的动态范围大约在 1000000:1 左右,而普通显示器和相机传感器只有 1000:1 到 2000:1。这个差距,就是我们要用 HDR 技术来填补的。
动态范围,说白了就是场景中最亮和最暗区域的亮度比值。用公式表示:
DR = L_max / L_min
其中 L_max 是场景最大亮度,L_min 是场景最小亮度。单位通常用 f-stop(档)或 dB 表示。
关键指标:1 f-stop = 2倍亮度变化。人眼约 20 f-stops,普通相机约 10-12 f-stops,HDR 成像目标 16-20 f-stops。
我在项目中遇到过最极端的场景——逆光下的车牌识别。白天强光直射,车牌反光到 10000 cd/m²,而车底阴影只有 0.1 cd/m²。普通相机根本拍不清车牌号。这就是典型的 HDR 刚需场景。
1.2 HDR vs SDR:差距到底有多大?
直接上对比表,大家感受一下:
| 对比维度 | SDR(标准动态范围) | HDR(高动态范围) |
|---|---|---|
| 亮度范围 | 0.1 - 100 cd/m² | 0.0005 - 10000 cd/m² |
| 色深 | 8-bit(256级) | 10/12-bit(1024/4096级) |
| 色域 | BT.709(约35%可见色域) | BT.2020(约75%可见色域) |
| 典型场景 | 室内、阴天、均匀光照 | 逆光、夜景、强光+阴影 |
| 存储格式 | JPEG(8-bit) | EXR/TIFF(16-bit float) |
嗯,这里要注意:SDR 的 8-bit 意味着每个通道只有 256 个灰度级。而 HDR 的 10-bit 有 1024 级,12-bit 有 4096 级。你想想看,在暗部区域,8-bit 可能只有 10 个灰度级来描述从黑到深灰的过渡,而 12-bit 有 160 级。这就是为什么 HDR 画面暗部细节更丰富、过渡更平滑。
我的经验:在嵌入式平台上做 HDR 融合时,我建议优先保证 10-bit 数据通路。8-bit 做 HDR 融合,量化误差会直接吃掉暗部细节,得不偿失。
1.3 相机响应曲线(CRF)原理
为什么需要 CRF?因为相机传感器是线性器件,但人眼对亮度的感知是非线性的。更麻烦的是,相机内部的 ISP 管线会对原始数据进行各种非线性变换——伽马校正、色调映射、去马赛克等等。
结果就是:像素值和场景亮度之间不是简单的线性关系。这个映射关系,就是 CRF(Camera Response Function)。
用数学表达:
I = f(E * t)
其中:
- I:最终像素值(0-255 或 0-1023)
- E:场景辐照度(场景真实亮度)
- t:曝光时间
- f(·):CRF 函数(非线性映射)
我曾经踩过一个坑:直接用线性模型做多曝光融合,结果融合出来的图像颜色怪异、对比度失真。后来才意识到,必须先把不同曝光的图像通过 CRF 逆变换映射到辐照度域,在辐照度域做融合,再通过 CRF 正变换映射回像素域。
避坑指南:千万不要在不同曝光图像之间直接做像素值加权平均!因为 CRF 是非线性的,不同曝光下的像素值不能直接比较。我曾经见过有人把 1/30s 和 1/1000s 的两张图直接平均,结果暗部偏紫、亮部偏绿——这就是 CRF 非线性导致的色偏。
1.4 CRF 的数学建模与标定
实际工程中,我们常用两种方式处理 CRF:
- Debevec 方法:基于多曝光图像对,通过最小二乘法拟合 CRF 曲线。精度高,但需要多张不同曝光的图像。
- Gamma 模型:用 f(x) = x^(1/γ) 近似 CRF。简单快速,但精度有限,γ 通常取 2.2。
Debevec 方法的核心公式:
g(Z_ij) = ln(E_i) + ln(t_j)
其中:
- Z_ij:第 i 个像素在第 j 张曝光图像中的像素值
- g(·):CRF 的逆函数(我们要拟合的目标)
- E_i:第 i 个像素的辐照度
- t_j:第 j 张图像的曝光时间
我个人习惯用 Debevec 方法做离线标定,Gamma 模型做在线快速处理。在嵌入式平台上,Gamma 模型只需要一个 LUT(查找表),计算量几乎为零。
1.5 本章知识体系
下面这张图总结了 HDR 成像的核心概念和它们之间的关系:
1.6 小结
这一章我们讲了三个核心概念:
- 动态范围:场景最亮和最暗的比值,HDR 的目标是逼近人眼的感知能力。
- HDR vs SDR:亮度范围差两个数量级,色深和色域也全面碾压。嵌入式平台上要优先保证 10-bit 数据通路。
- CRF 原理:相机像素值和场景亮度之间的非线性映射。记住一句话——在辐照度域做融合,再映射回像素域。