1. ISP Pipeline 概述:高通平台架构与降噪模块定位
各位同学,咱们今天聊聊高通 ISP 的 Pipeline。说白了,ISP 就是相机的大脑,负责把 Sensor 送来的原始数据变成一张能看的照片。我刚开始接触高通平台时,也被那一长串模块搞得头晕——Bayer、Demosaic、Gamma、YUV……每个模块都在干自己的活,但最终目标只有一个:让图像更干净、更真实。
降噪模块在 Pipeline 里什么位置?嗯,这很关键。位置放错了,效果差一大截。我曾在某个项目里把降噪放在 Demosaic 之后,结果彩色噪点被放大,调了三天才发现是顺序问题。
1.1 高通 ISP 架构概览
高通的 ISP 架构,我习惯把它分成三个大阶段:
- 前端(IFE):处理 Sensor 原始数据,做坏点校正、黑电平、LSC 等
- 中端(IPE):核心图像处理,包括 Demosaic、降噪、锐化、色彩校正
- 后端(VPU/GPU):视频编码、显示处理、人脸检测等
降噪模块主要落在 IPE 阶段。为什么?因为这时候数据已经从 Bayer 格式转成了 RGB 或 YUV,更容易做空域和时域的处理。你想想看,如果在 Bayer 域做降噪,还得考虑不同通道的噪声特性,复杂度直接翻倍。
核心要点:高通 ISP 的降噪模块分布在 IPE 内部,通常包含 2D NR(空域降噪)和 3D NR(时域降噪)两个子模块,两者协同工作。
1.2 降噪模块在 Pipeline 中的具体位置
我拿高通 SM8250(骁龙 865)举个例子。它的 ISP Pipeline 里,降噪模块的典型位置是这样的:
- Bayer 域处理:坏点校正、黑电平、LSC
- Demosaic:Bayer 转 RGB
- RGB 域处理:白平衡、色彩校正
- YUV 域处理:降噪(2D NR + 3D NR)、锐化、Gamma
- 输出:YUV 或 JPEG
为什么降噪放在 YUV 域?我个人理解是:YUV 把亮度和色度分开,亮度通道的噪声更容易被识别,色度通道的噪声可以单独处理,不会互相干扰。我在项目中试过把降噪放在 RGB 域,结果色偏问题层出不穷,最后还是老老实实放回 YUV 域。
我的经验:降噪模块的位置不是死的。如果你做的是超低光场景,可以考虑在 Bayer 域加一个简单的预降噪,能有效减少后续模块的噪声放大效应。但要注意,Bayer 域降噪会损失细节,别调太狠。
1.3 降噪算法分类:空域、时域、AI
降噪算法,说白了就三大类。我按高通平台的实现方式给你捋一捋:
| 分类 | 原理 | 高通实现 | 适用场景 |
|---|---|---|---|
| 空域降噪 (2D NR) | 利用单帧图像的空间相关性,对每个像素及其邻域做滤波 | Bilateral Filter、NLM、BM3D 的硬件加速版本 | 静态场景、低噪声环境 |
| 时域降噪 (3D NR) | 利用多帧图像的时间相关性,通过帧间运动补偿后做加权平均 | Multi-Frame NR、MCTF(运动补偿时域滤波) | 视频、手持夜景、运动场景 |
| AI 降噪 | 用深度学习模型直接学习噪声到干净图像的映射 | 高通 SNPE 加速的 CNN 模型(如 MIRNet、Restormer 的轻量版) | 极端低光、复杂噪声模式 |
这里有个坑,我必须要说。空域降噪和时域降噪不是二选一的关系,而是互补的。我见过不少工程师上来就把 2D NR 拉满,结果图像像油画一样,细节全没了。正确的做法是:先用 3D NR 做帧间降噪,再用 2D NR 做残留噪声的精细处理。
避坑指南:我曾经在一个夜景项目中,把 3D NR 的强度调到 80%,结果运动物体拖影严重,用户投诉说拍出来的行人像鬼影。后来我把 3D NR 降到 40%,配合 2D NR 的细节保护,效果才平衡。记住:时域降噪对运动场景不友好,必须配合运动检测。
1.4 三种降噪算法的对比与选择
我整理了一个对比表,方便你快速决策:
| 维度 | 空域降噪 | 时域降噪 | AI 降噪 |
|---|---|---|---|
| 计算开销 | 低(硬件加速后几乎无感) | 中(需要运动估计) | 高(需要 NPU/GPU) |
| 细节保留 | 中等(容易过平滑) | 好(多帧信息互补) | 优秀(学习能力强) |
| 运动场景 | 好(单帧处理) | 差(需要运动补偿) | 中等(依赖训练数据) |
| 低光表现 | 一般(噪声放大) | 好(多帧叠加) | 优秀(端到端学习) |
| 调优难度 | 低(参数少) | 中(运动检测参数复杂) | 高(需要训练数据和模型优化) |
你可能会问:那 AI 降噪是不是最好的?嗯,理论上是的,但实际落地有门槛。我在高通平台上跑过一个轻量级 AI 降噪模型,SNPE 加速后单帧处理时间约 15ms,对于 30fps 的视频流来说,这个开销还能接受。但如果你做的是 4K 60fps 的视频,AI 降噪基本没戏,老老实实用 2D+3D 组合。
1.5 高通平台的降噪模块配置示例
最后,我贴一段高通 ISP 的 XML 配置片段,让你看看降噪模块在代码里长什么样。这是我在 SM8550 平台上调过的实际配置:
<!-- 高通 ISP 降噪模块配置示例 -->
<module name="ipe_nr">
<parameter name="nr_2d_enable" value="1"/>
<parameter name="nr_2d_strength" value="0.6"/>
<parameter name="nr_2d_edge_preserve" value="0.8"/>
<parameter name="nr_3d_enable" value="1"/>
<parameter name="nr_3d_strength" value="0.4"/>
<parameter name="nr_3d_motion_threshold" value="0.15"/>
<parameter name="nr_ai_enable" value="0"/>
<parameter name="nr_ai_model_path" value="/vendor/etc/camera/nr_model.dlc"/>
</module>
注意看 nr_3d_motion_threshold 这个参数。它控制运动检测的灵敏度,值越小,对运动越敏感,但容易误判静态区域为运动,导致降噪不足。我一般从 0.1 开始调,根据实际场景微调。
总结一下:高通 ISP 的降噪模块位于 IPE 的 YUV 域,包含 2D NR、3D NR 和可选的 AI 降噪。三种算法各有优劣,实际项目中通常组合使用。调优时,先确定场景需求,再选择合适的降噪策略。