ISP流水线概览:从RAW到RGB/YUV的完整流程

好,咱们正式开始聊ISP流水线。很多刚入行的朋友拿到RAW图,第一反应就是——这玩意儿灰蒙蒙的,怎么调都像没睡醒。别急,这就是RAW的本来面目。ISP流水线说白了,就是一套把「半成品」RAW数据,加工成「成品」RGB或YUV图像的工序链。

我习惯把ISP比作一个厨房。RAW是刚洗好的菜,RGB/YUV是端上桌的菜。中间要经过切、焯、炒、调味、摆盘。每一道工序都有讲究,顺序错了或者火候过了,菜就毁了。

核心认知: ISP不是单一步骤,而是一条流水线。每个模块的输出,是下一个模块的输入。模块之间的顺序和参数耦合,决定了最终图像质量。

2.1 流水线整体框架

先看一张整体流程图。我画了这么多年框图,这张图的结构几乎没变过——因为CMOS传感器的物理特性决定了处理顺序。

ISP流水线核心流程 RAW输入 黑电平校正 镜头阴影校正 坏点校正 去噪 自动白平衡 去马赛克 色彩校正矩阵 Gamma校正 色调映射 锐化 色彩增强 RGB/YUV输出 说明:实际ISP流水线可能包含更多模块(如HDR合成、3A统计、畸变校正等), 但以上12个模块构成了最核心的「标准流水线」骨架。

这张图我建议你存下来。每次调试遇到问题,先回到这张图,问自己:问题出在第几个环节?

2.2 各模块功能简介

下面我把每个模块拆开聊。不追求一次讲透,先建立整体印象。

2.2.1 预处理阶段(RAW域)

这个阶段的操作全部在RAW域完成,数据还是Bayer格式。说白了,就是先把传感器原始信号「洗干净」。

模块 功能 我的经验
黑电平校正 减去传感器暗电流引入的固定偏置 不同增益下黑电平会漂移,我习惯做分段校正
镜头阴影校正 补偿镜头中心到边缘的光衰减 广角镜头阴影特别重,校正系数要实测
坏点校正 检测并替换死点/亮点 动态坏点检测容易误判,我一般先做静态标定
去噪 降低传感器读出噪声 RAW域去噪比RGB域效果好,但算力开销大
注意: 预处理阶段的参数一旦设错,后面所有模块都会跟着错。我曾经在一个项目里把黑电平设偏了10个DN,结果白平衡怎么调都偏色,查了三天才发现是黑电平的问题。

2.2.2 色彩重建阶段(RAW→RGB)

这个阶段的核心任务,是把Bayer格式的RAW数据,变成全彩的RGB图像。嗯,这里要注意,去马赛克是ISP里最「玄学」的模块之一。

  • 自动白平衡(AWB): 估计场景色温,调整R/G/B增益。我见过很多新手直接套用D65的固定白平衡,结果在室内暖光灯下拍出来一片惨蓝。AWB一定要做场景自适应。
  • 去马赛克(Demosaic): 从Bayer阵列插值出每个像素的R/G/B值。插值算法直接影响分辨率和伪色。简单双线性插值速度快但边缘有锯齿,自适应插值效果好但计算量大。怎么选?看你的硬件算力。

2.2.3 色彩与色调调整阶段(RGB域)

到了RGB域,图像已经有了颜色,但还不够「好看」。这个阶段就是调色。

模块 功能 典型参数
色彩校正矩阵(CCM) 将传感器RGB映射到标准色彩空间 3×3矩阵系数
Gamma校正 非线性映射,适配显示设备 Gamma值(通常2.2)
色调映射 压缩动态范围,保留细节 映射曲线/局部对比度
小技巧: CCM的调试我建议用24色卡。先拍一张RAW,然后在标准光源下标定。别偷懒用网上找的通用矩阵——每个传感器的光谱响应都不一样。

2.2.4 后处理阶段(RGB/YUV域)

最后一步,提升视觉体验。说白了就是「美颜」。

  • 锐化: 增强边缘对比度,让图像看起来更清晰。但锐化过度会产生光晕(halo),我一般控制在1.2倍以内。
  • 色彩增强: 提升饱和度、调整色相。这里有个坑——增强过度会导致肤色失真。我曾经调一个安防摄像头,把红色通道增益拉太高,结果人脸拍出来像关公。

2.3 流水线的数据流与格式转换

整个流水线中,数据格式会经历多次变化。我整理了一张表,方便你对照。

阶段 数据格式 位深 说明
传感器输出 Bayer RAW 10/12/14 bit 每个像素只有一种颜色
预处理后 Bayer RAW 10/12/14 bit 格式不变,数据已校正
去马赛克后 RGB 12/16 bit 每个像素有完整RGB
Gamma校正后 RGB 8/10 bit 非线性映射,位深可能降低
最终输出 RGB/YUV 8/10 bit YUV用于视频编码

为什么最后要转YUV?因为人眼对亮度敏感、对色度不敏感。YUV可以把色度分量降采样,节省带宽。做视频传输的项目,这一步几乎是标配。

2.4 流水线调试的通用原则

聊完模块,说说调试思路。我总结了三条原则,算是这些年踩坑踩出来的。

  1. 从前往后调: 先调RAW域,再调RGB域。前面的问题没解决,后面调得再好也没用。我见过有人花两周调色彩,结果发现是黑电平没校好——白费功夫。
  2. 单变量原则: 每次只改一个模块的参数。改完看效果,记录前后对比。别同时调AWB和CCM,出了问题你根本不知道是谁的锅。
  3. 用客观指标辅助主观评价: 人眼会骗人。我习惯同时看PSNR、SSIM、色差ΔE。主观觉得「好看」不一定准,指标不会说谎。
一句话总结: ISP流水线不是魔法,是一套有逻辑的工序链。理解每个模块「为什么放在这个位置」,比记住参数更重要。