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(时域降噪)两个子模块,两者协同工作。

高通 ISP Pipeline 降噪模块位置 前端 IFE 坏点校正 · 黑电平 · LSC 中端 IPE Demosaic · 降噪 · 锐化 色彩校正 · Gamma 后端 VPU/GPU 视频编码 · 显示处理 降噪模块 (NR) 2D NR (空域) 3D NR (时域) 说明: 降噪模块位于 IPE 内部,通常先做 2D NR(空域降噪),再做 3D NR(时域降噪)。 部分高通平台支持 AI 降噪作为可选模块,放在 3D NR 之后。

1.2 降噪模块在 Pipeline 中的具体位置

我拿高通 SM8250(骁龙 865)举个例子。它的 ISP Pipeline 里,降噪模块的典型位置是这样的:

  1. Bayer 域处理:坏点校正、黑电平、LSC
  2. Demosaic:Bayer 转 RGB
  3. RGB 域处理:白平衡、色彩校正
  4. YUV 域处理:降噪(2D NR + 3D NR)、锐化、Gamma
  5. 输出: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 降噪。三种算法各有优劣,实际项目中通常组合使用。调优时,先确定场景需求,再选择合适的降噪策略。