第2章:ISP Pipeline概览——从RAW到YUV的完整旅程
做图像调试这些年,我经常被新人问一个问题:「ISP到底在干什么?」
说白了,ISP就是把传感器拍下来的原始数据,变成人眼看着舒服、算法能处理的图像。这个过程分三大阶段:RAW域、RGB域、YUV域。每个阶段都有它的使命。
今天我就带你走一遍联咏平台ISP的完整Pipeline。你不需要记住每个模块的细节,但得清楚它们的位置和关系。这就像看地图——先知道城市布局,再研究每条街道。
2.1 整体流程:一张图看懂ISP Pipeline
先看这张图。我习惯把ISP Pipeline画成三个区块,每个区块代表一个色彩域。联咏平台的处理流程大致如下:
嗯,这张图我画了好几次才满意。你注意看,箭头方向是单向的,数据只能从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 | 插值算法选不好,边缘会出现伪色 |
2.3 RGB域:还原真实色彩
数据进入RGB域后,每个像素都有了完整的R、G、B值。这个阶段的核心是色彩还原和动态范围调整。
CCM(色彩校正矩阵) 是RGB域的灵魂。传感器对色彩的响应和人眼不一样,CCM就是做这个映射的。我记得有一次项目,客户说红色偏橙,我调了三天CCM才发现是LSC的增益曲线没匹配好。
Gamma校正 和 Tone Mapping 负责调整亮度映射关系。Gamma是固定曲线,Tone Mapping是动态的。联咏平台支持分段Gamma,这个功能很实用——暗部提亮、亮部压缩,都能独立控制。
3D LUT 是联咏平台的一个亮点。它可以把复杂的色彩映射做成查表,效果比CCM更精细。不过3D LUT吃内存,低端芯片慎用。
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的效果。
2.6 联咏平台的特色
联咏平台和其他平台比,有几个明显的特点:
| 特性 | 联咏平台 | 其他平台 |
|---|---|---|
| 模块开关 | 每个模块可独立开关 | 部分模块强制串联 |
| 参数动态调整 | 支持逐帧更新参数 | 多数需要重启Pipeline |
| 3D LUT | 原生支持33x33x33 | 部分平台需要外挂 |
| 调试接口 | 提供寄存器级和API级两种 | 通常只有API级 |
联咏的寄存器级调试接口是我最喜欢的。你可以直接读写每个模块的寄存器,看到最底层的状态。不过这也意味着——调错了没人帮你兜底。