4. 图像信号处理(ISP)流水线:ISP Pipeline整体架构、各模块功能与顺序、RAW域与RGB域处理区别

ISP Pipeline,说白了就是传感器拍完照片后,到我们能看见漂亮图像之间,那一整套“洗照片”的工序。我经常跟新人讲,传感器是眼睛,ISP就是大脑。眼睛看到的是原始数据,大脑才能把它变成有意义的画面。

今天咱们就把这个“大脑”拆开看看。我会结合自己这些年调过的项目,把每个模块的坑和心得都抖出来。

4.1 ISP Pipeline 整体架构

一个典型的ISP流水线,从传感器拿到RAW数据开始,一路处理到YUV或RGB输出。我习惯把它分成三大阶段:

  • RAW域处理:坏点校正、黑电平校正、去噪、去马赛克前的预处理
  • RGB域处理:白平衡、颜色校正、Gamma、锐化
  • YUV域处理:亮度/色度分离后的降噪、边缘增强、色彩调整

你想想看,为什么要有这么多域?因为每个域的数据特性不一样,适合干的事也不一样。RAW域数据最原始,噪声特性最清楚;RGB域人眼看着最直观,适合做颜色相关的调整;YUV域把亮度和颜色分开,处理起来互不干扰。

核心观点:ISP Pipeline的顺序不是随便排的。每个模块的输入输出格式、数据位宽、时序要求,都得前后匹配。我曾经见过一个团队,把去马赛克放在坏点校正前面,结果坏点被插值算法“美化”成了彩色条纹,后面怎么调都去不掉。

下面这张图是我自己画的ISP Pipeline标准流程,你可以把它当作一个“地图”来用:

ISP Pipeline 标准流程架构图 ISP Pipeline 标准流程架构 RAW 域 RGB 域 YUV 域 传感器 RAW 输入 坏点校正 (DPC) 黑电平校正 (BLC) RAW 去噪 (NR) 镜头阴影校正 (LSC) 去马赛克 (Demosaic) 白平衡 (AWB) 颜色校正矩阵 (CCM) Gamma 校正 色调映射 (Tone Mapping) RGB 去噪 RGB → YUV Y 去噪 / 锐化 UV 色度降噪 边缘增强 (EE) 饱和度 / 对比度 YUV 输出 说明:实际芯片中的 ISP 顺序可能因厂商架构不同而微调,但 RAW→RGB→YUV 的大逻辑不变。 去马赛克是 RAW 域到 RGB 域的分水岭,之后的数据才具有完整的彩色信息。

4.2 各模块功能与顺序

咱们按流程顺序,一个一个来过。每个模块我都会说清楚它干什么、为什么放在这个位置。

4.2.1 坏点校正 (DPC)

传感器上的像素点,总有几个是“坏”的——要么一直亮、要么一直暗。DPC就是把这些点找出来,用周围像素的值替换掉。我建议把它放在最前面,因为后面的处理都会放大坏点的影响。

经验之谈:坏点检测有两种方式——静态标定和动态检测。静态标定在产线做一次,记下坏点坐标;动态检测在运行时实时判断。我一般两种都用:静态的保底,动态的兜住温度变化产生的新坏点。

4.2.2 黑电平校正 (BLC)

传感器在完全无光的情况下,输出并不是0,而是有一个基底值。BLC就是把这个基底减掉。嗯,这里要注意:不同增益下的黑电平不一样,不能只减一个固定值。

4.2.3 RAW去噪

在RAW域做去噪,好处是噪声模型简单——主要是光子散粒噪声和读出噪声。我习惯用双边滤波或者非局部均值,效果比简单的高斯滤波好得多。

4.2.4 镜头阴影校正 (LSC)

镜头中心透光多、边缘透光少,拍出来的照片四角发暗。LSC就是给边缘像素乘一个增益系数,把亮度拉回来。这个系数跟镜头、光圈、焦距都有关系,一般需要标定。

4.2.5 去马赛克 (Demosaic)

这是RAW域到RGB域的分水岭。Bayer格式的每个像素只有一种颜色,去马赛克就是通过插值,让每个像素都有R、G、B三个值。插值算法的好坏,直接决定图像的边缘和细节质量。

注意:去马赛克之后,数据量变成原来的3倍。后面的模块都得处理全彩数据,计算量会大很多。所以有些低功耗芯片会把部分处理放在RAW域做,就是为了省带宽。

4.2.6 白平衡 (AWB)

人眼有“色温恒常性”——不管在日光灯下还是蜡烛下,看白纸都是白的。但传感器没有这个能力。AWB就是估算当前光源色温,然后调整R、G、B的增益,让白色物体真正呈现白色。

4.2.7 颜色校正矩阵 (CCM)

传感器的色彩响应和人眼不一样。CCM用一个3x3的矩阵,把传感器RGB转换到标准色彩空间(比如sRGB)。这个矩阵需要对着色卡标定,我一般用24色卡,最小二乘法拟合。

4.2.8 Gamma校正

人眼对暗部的变化更敏感,对亮部的变化不敏感。Gamma校正就是把暗部细节拉开、亮部压缩,让图像看起来更自然。标准Gamma值是2.2,但不同显示设备可能不一样。

4.2.9 色调映射 (Tone Mapping)

高动态范围(HDR)场景下,传感器记录的亮度范围比显示设备能显示的大得多。色调映射就是把宽动态范围压缩到显示范围内,同时保留细节和对比度。

4.2.10 YUV域处理

转到YUV域后,亮度和色度分开处理。Y通道做锐化和去噪,UV通道做色度降噪和饱和度调整。这样做的好处是:锐化不会产生彩色伪影,降噪也不会模糊边缘。

4.3 RAW域与RGB域处理区别

这个区别,我直接用表格来说清楚:

对比维度 RAW域处理 RGB域处理
数据格式 单通道(Bayer模式),每个像素只有一种颜色 三通道,每个像素有完整R、G、B
数据量 小(1/3的RGB数据量) 大(3倍于RAW)
噪声特性 噪声模型简单,与信号强度相关 噪声经过插值和颜色变换后变得复杂
处理目标 修复传感器物理缺陷、降低原始噪声 调整颜色、对比度、亮度等视觉属性
典型算法 坏点校正、黑电平、RAW去噪、LSC AWB、CCM、Gamma、色调映射
计算复杂度 低到中 中到高
硬件实现 适合用简单流水线、行缓冲 需要帧缓冲或大块行缓冲

说白了,RAW域处理是“修底片”,RGB域处理是“调照片”。底片修不好,后面怎么调都白搭。我见过太多团队在RGB域花大力气调颜色、调锐度,结果RAW域的坏点和噪声没处理好,图像质量天花板就在那里了。

我的建议:调试ISP时,先把RAW域的参数调好——坏点、黑电平、去噪、LSC。这些基础打牢了,再去碰RGB域的白平衡、CCM和Gamma。顺序对了,事半功倍;顺序错了,事倍功半。

举个例子。有一次我调一个安防摄像头项目,客户反映夜间图像偏色严重。我一看,团队把AWB调了无数版,CCM也换了好几套,就是没效果。后来我查了RAW域的数据,发现黑电平校正的参数不对——不同增益下的黑电平没分开标定。导致暗部信号整体偏移,AWB再怎么调也拉不回来。修正了BLC之后,偏色问题直接解决了。

所以,记住这个原则:先RAW后RGB,先修底片再调照片。