第2章:ISP Pipeline概览——从RAW到YUV的完整旅程

做图像调试这些年,我经常被新人问一个问题:「ISP到底在干什么?」

说白了,ISP就是把传感器拍下来的原始数据,变成人眼看着舒服、算法能处理的图像。这个过程分三大阶段:RAW域、RGB域、YUV域。每个阶段都有它的使命。

今天我就带你走一遍联咏平台ISP的完整Pipeline。你不需要记住每个模块的细节,但得清楚它们的位置和关系。这就像看地图——先知道城市布局,再研究每条街道。

核心认知: ISP不是一条直线,而是一条有分支的流水线。RAW域处理传感器缺陷,RGB域还原真实色彩,YUV域优化人眼感知。三个域缺一不可。

2.1 整体流程:一张图看懂ISP Pipeline

先看这张图。我习惯把ISP Pipeline画成三个区块,每个区块代表一个色彩域。联咏平台的处理流程大致如下:

联咏平台ISP Pipeline 三大域流程 RAW域 传感器原始数据 BLC 黑电平校正 DPC 坏点校正 LSC 镜头阴影校正 AWB 自动白平衡 Demosaic 去马赛克 RGB域 色彩还原与校正 CCM 色彩校正矩阵 Gamma 校正 Tone Mapping 3D LUT YUV域 人眼感知优化 NR 降噪 Sharpen 锐化 EE 边缘增强 Saturation 饱和度 YUV420 输出 联咏平台支持灵活配置每个模块的开关与参数,实际项目中可根据场景裁剪流程

嗯,这张图我画了好几次才满意。你注意看,箭头方向是单向的,数据只能从RAW流到RGB再到YUV。联咏平台不允许逆向跳转,这点和某些平台不太一样。

2.2 RAW域:打好地基

RAW域处理的是传感器直接输出的Bayer数据。这个阶段的目标只有一个——把原始数据洗干净,为后续处理做准备。

模块 全称 核心作用 我踩过的坑
BLC Black Level Correction 消除暗电流引起的黑电平偏移 BLC没调好,整个画面偏色,怎么调AWB都拉不回来
DPC Dead Pixel Correction 检测并替换坏点 联咏的DPC对热噪点敏感,低光下容易误判
LSC Lens Shading Correction 补偿镜头边缘亮度衰减 广角镜头LSC增益不能给太大,否则边缘噪点爆炸
AWB Auto White Balance 估计色温并调整R/G/B增益 混合光源下AWB容易翻车,我一般会加场景约束
Demosaic 去马赛克 将Bayer插值成完整RGB 插值算法选不好,边缘会出现伪色
个人习惯: 我调试时,会先关掉所有RAW域模块,只开BLC看原始数据。确认传感器输出干净了,再逐个打开后面的模块。这样定位问题快很多。

2.3 RGB域:还原真实色彩

数据进入RGB域后,每个像素都有了完整的R、G、B值。这个阶段的核心是色彩还原和动态范围调整。

CCM(色彩校正矩阵) 是RGB域的灵魂。传感器对色彩的响应和人眼不一样,CCM就是做这个映射的。我记得有一次项目,客户说红色偏橙,我调了三天CCM才发现是LSC的增益曲线没匹配好。

Gamma校正 和 Tone Mapping 负责调整亮度映射关系。Gamma是固定曲线,Tone Mapping是动态的。联咏平台支持分段Gamma,这个功能很实用——暗部提亮、亮部压缩,都能独立控制。

3D LUT 是联咏平台的一个亮点。它可以把复杂的色彩映射做成查表,效果比CCM更精细。不过3D LUT吃内存,低端芯片慎用。

注意: RGB域的调整会影响后续YUV域的效果。比如你把Gamma调亮了,YUV域的降噪强度就得跟着调。我曾经吃过这个亏——Gamma调完忘了改NR参数,结果暗部噪点全出来了。

2.4 YUV域:让人眼看着舒服

YUV域把RGB拆成亮度(Y)和色度(UV)。人眼对亮度敏感、对色度不敏感,所以YUV域的处理策略就是——保亮度、控色度。

  • NR(降噪): 联咏平台有2D NR和3D NR。2D NR处理单帧,3D NR利用帧间信息。我个人建议:低光场景开3D NR,但运动场景要小心鬼影。
  • Sharpen(锐化): 提升边缘对比度。锐化太强会有光晕,太弱画面发肉。联咏的Sharpen有增益和阈值两个参数,阈值控制哪些边缘被锐化。
  • EE(边缘增强): 和Sharpen不同,EE主要增强高频细节。我习惯把EE放在Sharpen后面,先锐化再增强,效果更自然。
  • Saturation(饱和度): 控制色彩鲜艳程度。饱和度不是越高越好——调太高会溢出,肤色会变成蜡像。

YUV域的输出就是最终图像了。联咏平台支持YUV420、YUV422等多种格式,根据应用场景选就行。

2.5 三个域的协作关系

你可能觉得这三个域是独立的。其实不是。它们之间有很多隐性关联。

举个例子:RAW域的AWB如果偏了,RGB域的CCM再怎么调也救不回来。YUV域的饱和度再高,色彩也是错的。这就是为什么我总说「前级决定上限,后级决定下限」。

再比如:LSC的增益曲线会影响RGB域的CCM精度。因为LSC改变了像素的亮度分布,CCM的校正矩阵是基于均匀亮度设计的。所以调LSC的时候,一定要回头确认CCM的效果。

实战建议: 调试顺序应该是RAW域 → RGB域 → YUV域,但验证时要反过来——先看YUV输出有没有问题,再倒推是哪个域引起的。这样效率最高。

2.6 联咏平台的特色

联咏平台和其他平台比,有几个明显的特点:

特性 联咏平台 其他平台
模块开关 每个模块可独立开关 部分模块强制串联
参数动态调整 支持逐帧更新参数 多数需要重启Pipeline
3D LUT 原生支持33x33x33 部分平台需要外挂
调试接口 提供寄存器级和API级两种 通常只有API级

联咏的寄存器级调试接口是我最喜欢的。你可以直接读写每个模块的寄存器,看到最底层的状态。不过这也意味着——调错了没人帮你兜底。

一个小技巧: 联咏平台有个「Bypass模式」,可以跳过某个模块看前后对比。我调试时经常用这个功能,快速定位问题出在哪个环节。