4. HDR 基础理论:线性 vs 非线性、动态范围定义、多帧合成与单帧HDR
好,咱们进入HDR的基础理论部分。说实话,很多做Camera的工程师,调了几年3A,对HDR的理解还停留在“拍三张合成”的层面。我个人觉得,如果不把线性、非线性、动态范围这些概念吃透,后面做8K HDR实时处理,你连Pipeline怎么搭都无从下手。
这一章,咱们就把HDR的底裤扒干净。
4.1 动态范围:你到底能看清多少档?
动态范围,说白了就是传感器能同时记录的最亮和最暗之间的比值。单位是dB,或者更直观的——档(Stop)。
一档就是亮度翻倍。10档动态范围,意味着最亮比最暗亮1024倍。
| 场景 | 典型动态范围 | 备注 |
|---|---|---|
| 阴天室内 | 6-8 stops | 普通手机直出勉强能看 |
| 晴天户外 | 10-12 stops | 开始出现高光过曝或暗部死黑 |
| 逆光人像 | 14-16 stops | 不拍HDR,人脸就是剪影 |
| 夜景霓虹灯 | 18+ stops | 灯箱招牌和阴影同时存在 |
我遇到过最夸张的一次,是在一个博物馆的展柜前。展品被聚光灯打得极亮,但背景几乎是全黑。单帧Sensor输出,暗部全是噪声,亮部已经clip到发白。这就是典型的动态范围不够用。
核心结论:人眼能感知的动态范围大约在20-24 stops。而目前主流手机Sensor,单帧输出也就10-12 stops。中间的差距,就是HDR要填的坑。
4.2 线性 vs 非线性:Sensor到底在干什么?
很多人以为Sensor输出就是“所见即所得”。其实不是。Sensor本质上是线性器件——光子数翻倍,电压翻倍,ADC输出值翻倍。
但人眼对亮度的感知是非线性的。你想想看,在暗处,我们能分辨出细微的亮度变化;到了亮处,变化再大我们也觉得“差不多”。这就是韦伯-费希纳定律。
所以,如果Sensor直接输出线性数据,会有两个问题:
- 暗部量化精度不够——低光区域只有几个码值,稍微一压缩就丢细节。
- 亮部浪费码值——高光区域占了大量码值,但人眼根本分辨不出那么细。
于是就有了非线性编码。最常见的就是Gamma曲线,把线性空间映射到感知均匀的空间。8-bit的sRGB,实际上就是Gamma 2.2。
我的习惯:在做HDR Pipeline设计时,我坚持在RAW域做线性处理。所有非线性(Gamma、PQ、HLG)都放在Tone Mapping之后。为什么?因为线性空间下做多帧合成、降噪、去马赛克,数学性质最好,不会引入伪影。
4.3 多帧合成HDR:经典但代价高
多帧HDR,就是拍多张不同曝光时间的帧,然后合成一张高动态范围的图。这是目前手机最主流的方式。
典型的流程:
- 短曝光帧——保住高光细节,暗部全是噪声。
- 长曝光帧——暗部信噪比高,但高光过曝。
- 中间帧——(可选)作为过渡参考。
- 合成——按权重融合,取长补短。
但多帧合成有个致命问题——运动鬼影。你拍三帧,中间有人动了一下,合成出来就是重影。我当年调一个双摄HDR项目,鬼影调了三个月才勉强压下去。
避坑指南:我曾经在8K HDR项目里尝试用多帧合成。结果发现,8K 30fps下,留给每帧的曝光时间窗口只有33ms。拍三帧,每帧最多11ms。暗部信噪比根本不够。所以8K HDR,多帧方案基本行不通。
4.4 单帧HDR:8K时代的必然选择
单帧HDR,也叫DOL HDR(Digital Overlap HDR)或Staggered HDR。原理是在同一帧曝光时间内,Sensor以不同增益或不同曝光时间读出多组数据,然后合成。
高通平台上的典型实现:
- DCG(Dual Conversion Gain)——同一个像素,先读高转换增益(低光),再读低转换增益(高光)。
- SME(Spatial Multi-Exposure)——相邻像素用不同曝光参数,空间上交错排列。
- DOL(Digital Overlap)——时间上交错,但读出速度极快,近似单帧。
单帧HDR的好处很明显:
- 无鬼影——所有数据来自同一时刻。
- 低延迟——适合8K 30fps甚至60fps。
- 带宽可控——不需要DDR里存多帧数据。
但代价是Sensor硬件要支持,而且合成算法更复杂。
我的建议:如果你在做8K HDR项目,优先考虑单帧HDR方案。高通骁龙8 Gen 2之后的ISP,对DOL和DCG的支持已经很成熟了。别在多帧上浪费时间。
4.5 知识结构图:HDR技术全景
下面这张图,把HDR的核心概念和路线画清楚了。你可以把它当作本章的思维导图。
4.6 实战对比:多帧 vs 单帧,怎么选?
我整理了一个对比表,帮你快速决策:
| 维度 | 多帧合成HDR | 单帧HDR (DOL/DCG) |
|---|---|---|
| 动态范围 | 高(可叠加多帧) | 中高(受Sensor硬件限制) |
| 鬼影 | 严重(需复杂运动补偿) | 无(同一时刻读出) |
| 延迟 | 高(需等待多帧曝光) | 低(单帧内完成) |
| 带宽 | 高(DDR存多帧) | 低(单帧数据量) |
| 8K适用性 | 差(时间窗口不够) | 好(原生支持高帧率) |
| 算法复杂度 | 中(合成+去鬼影) | 高(需处理Sensor特殊数据格式) |
个人经验:如果你做的是8K 30fps以上的产品,别犹豫,直接上单帧HDR。多帧方案在8K下,暗部信噪比和鬼影两个坑,任何一个都够你调半年。
4.7 本章小结
嗯,这一章的内容就到这里。核心就三句话:
- 动态范围是HDR的起点,Sensor和人眼的差距决定了我们必须做HDR。
- 线性域处理是专业做法,非线性编码是给显示和存储用的。
- 8K时代,单帧HDR是唯一可行的路。