第一章 高通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域降噪磨平滑,两者缺一不可。
1.2 各阶段数据流详解
1.2.1 Bayer域:降噪的第一道防线
Sensor出来的RAW数据,噪声是最「原始」的。这时候还没做任何插值,噪声形态主要是光子散粒噪声、读出噪声和固定模式噪声。
我个人习惯把Bayer域降噪(BNR)称为「保细节降噪」。为什么?因为一旦过了Demosaic,噪声和细节就混在一起了,再想分离就难了。
实战经验:我在项目中遇到过,有些场景下Bayer域降噪强度调得太大,结果Demosaic之后出现了明显的「伪彩」和「锯齿」。后来我总结了一条原则:Bayer域降噪以「不引入伪影」为底线,强度宁低勿高。
高通平台Bayer域降噪的典型处理流程:
- BLC(黑电平校正):减去Sensor暗电流带来的固定偏置。
- LSC(镜头阴影校正):补偿镜头边缘亮度衰减,同时会放大边缘噪声。
- BNR(Bayer域降噪):对RAW数据进行滤波,常见算法有BM3D、NLM、小波降噪等。
- AWB(自动白平衡):调整R/G/B增益,恢复场景色温。
- 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 一个典型的降噪调试流程
嗯,讲到这里,我分享一个实际项目中的调试顺序,供你参考:
- 先调BNR:在RAW图上观察噪声形态,调整BNR强度,确保不产生伪影。
- 再调YNR:在Y通道上观察亮度噪声,调整YNR参数,注意边缘保护。
- 最后调CNR:在UV通道上观察色度噪声,调整CNR强度,避免偏色。
- 全局联调:在不同ISO、不同色温下验证效果,反复迭代。
我曾经在一个项目中,因为BNR参数没调好,导致YNR怎么调都压不住暗部噪声。后来花了三天时间重新调BNR,问题才解决。所以我的建议是:从源头抓起,Bayer域降噪是基础中的基础。
1.5 本章小结
这一章我们走完了高通ISP的完整数据流,从Sensor到YUV,每个阶段都有降噪模块在发挥作用。记住三个关键点:
- 降噪分布在Bayer域和YUV域,职责不同,需要协同工作。
- Bayer域降噪保细节,YUV域降噪磨平滑。
- 调试顺序:先BNR,再YNR,最后CNR,全局联调。