第二章:HDR视频流水线总览
各位同学,今天我们来聊聊HDR视频流水线的全貌。说实话,这个主题我讲了不下二十次,但每次都有新感悟。从传感器到显示器,这条链路比你想象的要长得多。
2.1 从传感器到显示器的完整链路
先看一张整体架构图,我亲手画的,希望能帮你建立全局观。
这张图我画了好几个版本,最终选了这种上下分层的布局。上面是采集端,下面是显示端。中间是编码传输,但这不是我们今天的重点。
核心要点:HDR流水线不是单向的。采集端做一次Tone Mapping是为了编码传输,显示端再做一次Inverse TMO是为了还原。这两次映射必须匹配,否则画质会崩。
2.2 ISP与HDR的关系
ISP(图像信号处理器)是HDR流水线的起点。很多人以为HDR只是后期处理,其实不然。ISP的质量直接决定了HDR的天花板。
我在项目中遇到过一件事:某款芯片的ISP只有10bit精度,结果HDR合成后暗部全是噪点。后来换了12bit的ISP,效果立竿见影。嗯,这里要注意,ISP的位深是HDR的基础。
ISP在HDR流水线中承担的角色:
- RAW域处理:去马赛克、黑电平校正、镜头阴影校正。这些必须在HDR合成之前完成。
- 线性化:传感器输出是线性的,但人眼感知是非线性的。ISP要保证数据在线性域处理。
- 多帧对齐:HDR合成需要多帧图像,ISP要提供亚像素级别的对齐精度。
我的经验:ISP的降噪强度要谨慎。降噪太狠会抹掉HDR的细节纹理,降噪不够又会让暗部噪点爆炸。我一般建议在ISP阶段只做轻度降噪,把重度降噪留给Tone Mapping之后。
2.3 HDR流水线关键模块
好,接下来我们深入三个核心模块。这三个模块我称之为「HDR三剑客」,缺一不可。
2.3.1 Tone Mapping(色调映射)
Tone Mapping说白了就是把高动态范围压缩到低动态范围。比如传感器能拍出0.0001到10000 nit的场景,但显示器只能显示0.1到1000 nit。怎么办?压缩。
常见的Tone Mapping算法:
| 算法 | 特点 | 适用场景 |
|---|---|---|
| Reinhard | 全局映射,简单高效 | 实时视频处理 |
| Filmic | 模拟胶片响应曲线 | 电影级画质 |
| ACES | 工业标准,色彩准确 | 专业影视制作 |
| Local Tone Mapping | 保留局部对比度 | 高对比度场景 |
我个人习惯用Filmic曲线。为什么?因为它对暗部和高光的处理比较自然。Reinhard虽然快,但高光容易过曝。ACES太复杂,芯片面积扛不住。
避坑指南:我曾经在某个项目中用了全局Tone Mapping,结果画面暗部一片死黑。后来改成局部映射,暗部细节全回来了。但局部映射的计算量是全局的5倍,芯片面积要提前规划。
2.3.2 Color Gamut Mapping(色域映射)
色域映射解决的是色彩空间不匹配的问题。传感器采集的是BT.2020色域,但很多显示器只支持BT.709。你想想看,如果不做映射,颜色会偏成什么样?
色域映射的两种策略:
- 裁剪法:超出目标色域的颜色直接裁掉。简单粗暴,但会丢失色彩细节。
- 压缩法:把整个色域按比例压缩到目标色域内。保留色彩关系,但饱和度会降低。
我建议用压缩法。裁剪法虽然省资源,但画面会出现色块断层。压缩法更平滑,视觉体验更好。
2.3.3 Inverse TMO(逆色调映射)
Inverse TMO是Tone Mapping的逆过程。显示端收到SDR信号后,要把它还原成HDR信号。这听起来简单,但实际很难。
为什么难?因为Tone Mapping是有损压缩。压缩的时候丢掉了信息,还原的时候只能靠猜。比如一个像素被压缩成了128灰阶,它原本是1000 nit还是500 nit?不知道。
常见的Inverse TMO方法:
- 线性扩展:直接乘以一个系数。简单,但效果差。
- 基于统计的恢复:利用图像统计信息估算原始亮度。效果中等。
- 基于学习的恢复:用神经网络预测丢失的信息。效果好,但芯片面积大。
关键点:Inverse TMO的质量取决于Tone Mapping时保留了多少元数据。如果编码时传了亮度分布直方图,恢复效果会好很多。这就是为什么HDR10+和Dolby Vision要带动态元数据。
好了,这一章的内容就到这里。HDR流水线是个系统工程,每个模块都环环相扣。下一章我们会深入Tone Mapping的数学原理,到时候我会带你们手撕代码。
公众号:蓝海资料掘金营,微信deep3321