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,就是拍多张不同曝光时间的帧,然后合成一张高动态范围的图。这是目前手机最主流的方式。

典型的流程:

  1. 短曝光帧——保住高光细节,暗部全是噪声。
  2. 长曝光帧——暗部信噪比高,但高光过曝。
  3. 中间帧——(可选)作为过渡参考。
  4. 合成——按权重融合,取长补短。

但多帧合成有个致命问题——运动鬼影。你拍三帧,中间有人动了一下,合成出来就是重影。我当年调一个双摄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的核心概念和路线画清楚了。你可以把它当作本章的思维导图。

HDR技术全景图 HDR 核心技术 动态范围定义 Sensor 10-12 stops vs 人眼 20+ stops 线性 vs 非线性 RAW域线性 → Gamma/PQ/HLG 多帧合成HDR 短/中/长曝光 → 鬼影问题 单帧HDR (DOL/DCG) 无鬼影 · 低延迟 · 适合8K 高通ISP Pipeline RAW域合成 → Tone Mapping → 编码输出 骁龙8 Gen2+ 原生支持DOL/DCG

4.6 实战对比:多帧 vs 单帧,怎么选?

我整理了一个对比表,帮你快速决策:

维度 多帧合成HDR 单帧HDR (DOL/DCG)
动态范围 高(可叠加多帧) 中高(受Sensor硬件限制)
鬼影 严重(需复杂运动补偿) 无(同一时刻读出)
延迟 高(需等待多帧曝光) 低(单帧内完成)
带宽 高(DDR存多帧) 低(单帧数据量)
8K适用性 差(时间窗口不够) 好(原生支持高帧率)
算法复杂度 中(合成+去鬼影) 高(需处理Sensor特殊数据格式)

个人经验:如果你做的是8K 30fps以上的产品,别犹豫,直接上单帧HDR。多帧方案在8K下,暗部信噪比和鬼影两个坑,任何一个都够你调半年。

4.7 本章小结

嗯,这一章的内容就到这里。核心就三句话:

  • 动态范围是HDR的起点,Sensor和人眼的差距决定了我们必须做HDR。
  • 线性域处理是专业做法,非线性编码是给显示和存储用的。
  • 8K时代,单帧HDR是唯一可行的路。