第一章 高通ISP Pipeline全景:从Sensor到YUV的完整数据流

做高通平台影像调试这么多年,我经常被新人问到一个问题:「降噪到底是在ISP的哪个环节做的?」

说实话,这个问题看似简单,但真要讲清楚,得先把整个ISP Pipeline捋一遍。你想想看,从Sensor采集到RAW图,再到最终输出YUV,中间经过了多少个模块?每个模块又在干什么?

这一章,我就带你走一遍高通ISP的完整数据流。咱们不搞那些花里胡哨的架构图,直接看数据是怎么一步步「流」过来的。

1.1 ISP Pipeline整体架构

高通平台的ISP,说白了就是一个多级流水线。数据从Sensor出来,经过Bayer域处理、RGB域处理,最后到YUV域输出。每一级都有专门的硬件模块在干活。

我习惯把整个流程分成三大阶段:

  • Bayer域(RAW域):Sensor直接输出的原始数据,每个像素只有一种颜色分量(R/G/B)。
  • RGB域:经过Demosaic插值后,每个像素都有了完整的RGB三通道信息。
  • YUV域:转换亮度色度空间,方便后续编码和显示。

嗯,这里要注意:降噪模块在Bayer域和YUV域都有分布,但它们的职责完全不同。后面我会细说。

核心观点:降噪不是「一个模块」的事,而是贯穿整个Pipeline的「系统工程」。Bayer域降噪保细节,YUV域降噪磨平滑,两者缺一不可。

高通ISP Pipeline 完整数据流 高通ISP Pipeline 完整数据流 Bayer 域 (RAW) Sensor RAW 输入 BLC / 黑电平校正 LSC / 镜头阴影校正 Bayer 域降噪 (BNR) AWB / 自动白平衡 Demosaic / 去马赛克 RGB 域 颜色校正 (CCM) Gamma 校正 色调映射 (Tone Map) 色彩增强 RGB -> YUV 转换 YUV 域 Y 通道降噪 (YNR) UV 通道降噪 (CNR) 边缘增强 (Edge Enhancement) 饱和度 / 亮度调整 YUV 输出 说明:红色节点为降噪模块(BNR / YNR / CNR),其他为常规ISP处理模块。

1.2 各阶段数据流详解

1.2.1 Bayer域:降噪的第一道防线

Sensor出来的RAW数据,噪声是最「原始」的。这时候还没做任何插值,噪声形态主要是光子散粒噪声、读出噪声和固定模式噪声。

我个人习惯把Bayer域降噪(BNR)称为「保细节降噪」。为什么?因为一旦过了Demosaic,噪声和细节就混在一起了,再想分离就难了。

实战经验:我在项目中遇到过,有些场景下Bayer域降噪强度调得太大,结果Demosaic之后出现了明显的「伪彩」和「锯齿」。后来我总结了一条原则:Bayer域降噪以「不引入伪影」为底线,强度宁低勿高。

高通平台Bayer域降噪的典型处理流程:

  1. BLC(黑电平校正):减去Sensor暗电流带来的固定偏置。
  2. LSC(镜头阴影校正):补偿镜头边缘亮度衰减,同时会放大边缘噪声。
  3. BNR(Bayer域降噪):对RAW数据进行滤波,常见算法有BM3D、NLM、小波降噪等。
  4. AWB(自动白平衡):调整R/G/B增益,恢复场景色温。
  5. Demosaic(去马赛克):插值出完整RGB图像。

1.2.2 RGB域:色彩重建与映射

到了RGB域,数据已经变成了完整的彩色图像。这个阶段主要做色彩还原和动态范围调整。

说实话,RGB域本身不做降噪。但这里有个坑:Gamma校正和色调映射会改变噪声的分布特性。比如Gamma会拉伸暗部噪声,让原本不明显的噪声变得刺眼。

避坑指南:我曾经在调试一个暗光场景时,发现YUV域降噪怎么调都压不住暗部噪声。后来排查发现,是Gamma曲线拉得太狠,把Bayer域残留的噪声放大了。解决方案是调整Gamma曲线斜率,同时回退Bayer域降噪参数。记住:降噪是全局联动的,别只盯着一个模块调。

1.2.3 YUV域:降噪的最后一公里

YUV域是降噪的「主战场」。这里的数据已经分离成亮度(Y)和色度(UV)两个通道,噪声特性也分开了。

高通平台在YUV域通常有两个独立的降噪模块:

模块 处理对象 主要目标 典型算法
YNR 亮度通道 (Y) 去除亮度噪声,保留边缘细节 双边滤波、引导滤波、3D NR
CNR 色度通道 (UV) 去除色度噪声,避免偏色 均值滤波、中值滤波、色度低通

你想想看,亮度噪声和色度噪声的表现完全不同。亮度噪声像「颗粒感」,色度噪声像「彩色斑点」。所以必须分开处理,用不同的策略。

1.3 降噪模块在ISP中的位置与作用

我把降噪模块在整个Pipeline中的位置总结成一张表,方便你对照:

降噪模块 所在域 输入数据 输出数据 核心作用
BNR Bayer域 RAW (Bayer pattern) 降噪后的RAW 去除原始噪声,保护边缘和纹理
YNR YUV域 Y通道 降噪后的Y通道 平滑亮度噪声,保持图像清晰度
CNR YUV域 UV通道 降噪后的UV通道 消除色度噪声,防止偏色和伪彩

关键认知:BNR是「粗降噪」,负责干掉大部分原始噪声;YNR/CNR是「精降噪」,负责处理残留噪声和视觉优化。两者是串联关系,不是替代关系。BNR做不好,YNR再强也救不回来。

1.4 一个典型的降噪调试流程

嗯,讲到这里,我分享一个实际项目中的调试顺序,供你参考:

  1. 先调BNR:在RAW图上观察噪声形态,调整BNR强度,确保不产生伪影。
  2. 再调YNR:在Y通道上观察亮度噪声,调整YNR参数,注意边缘保护。
  3. 最后调CNR:在UV通道上观察色度噪声,调整CNR强度,避免偏色。
  4. 全局联调:在不同ISO、不同色温下验证效果,反复迭代。

我曾经在一个项目中,因为BNR参数没调好,导致YNR怎么调都压不住暗部噪声。后来花了三天时间重新调BNR,问题才解决。所以我的建议是:从源头抓起,Bayer域降噪是基础中的基础。

1.5 本章小结

这一章我们走完了高通ISP的完整数据流,从Sensor到YUV,每个阶段都有降噪模块在发挥作用。记住三个关键点:

  • 降噪分布在Bayer域和YUV域,职责不同,需要协同工作。
  • Bayer域降噪保细节,YUV域降噪磨平滑。
  • 调试顺序:先BNR,再YNR,最后CNR,全局联调。