1. ISP Pipeline全景:从Sensor到显示器的图像处理链路
各位好,我是老周。做ISP调试这行十几年了,今天咱们聊聊ISP Pipeline的全貌。
说白了,ISP Pipeline就是一条图像处理的流水线。从Sensor捕捉到原始数据,到最终在屏幕上显示出来,中间经过的每一个处理环节,就是Pipeline上的一个节点。每个节点干一件事,环环相扣。
我刚开始接触ISP时,总觉得这玩意儿就是个黑盒子——RAW图进去,好看的图出来。后来踩了不少坑才明白,不理解Pipeline,你连问题出在哪个环节都找不到。
1.1 整体链路:从光子到像素
先看一张整体流程图,把Pipeline的骨架搭起来。
这张图我画了很多次。每次给新人讲,我都说:记住这个流向,从左到右,从上到下。Sensor出来的RAW图,经过BLC、AWB、Demosaic、CCM,然后转到YUV域做NR和Sharpen,最后输出。
核心要点:ISP Pipeline分为两大阶段——RAW域处理和YUV域处理。RAW域主要做校正和重建,YUV域主要做增强和压缩。分清楚这两个域,调试时能少走一半弯路。
1.2 各模块功能速览
下面这张表,我把Pipeline里最常见的模块列出来。每个模块干什么、输入输出是什么、调试时关注什么,一目了然。
| 模块 | 全称 | 输入 | 输出 | 调试关注点 |
|---|---|---|---|---|
| BLC | Black Level Correction | RAW | RAW | 暗电流补偿,黑电平偏移 |
| LSC | Lens Shading Correction | RAW | RAW | 镜头暗角,色偏校正 |
| AWB | Auto White Balance | RAW | RAW | 色温估计,R/G增益 |
| Demosaic | 去马赛克 | RAW | RGB | 伪色,拉链效应 |
| CCM | Color Correction Matrix | RGB | RGB | 色彩还原,饱和度 |
| Gamma | 伽马校正 | RGB | RGB | 亮度映射,对比度 |
| RGB→YUV | 色彩空间转换 | RGB | YUV | 转换矩阵精度 |
| NR | Noise Reduction | YUV | YUV | 降噪强度,细节保留 |
| Sharpen | 锐化 | YUV | YUV | 过冲,振铃 |
| JPEG Enc | JPEG编码 | YUV | JPEG | 压缩率,块效应 |
这张表我建议你打印出来贴在工位上。调试时遇到问题,先看是哪个域、哪个模块的活。
1.3 RAW域 vs YUV域:为什么这么分?
你可能会问:为什么非要把Pipeline分成两个域?
我个人习惯这么理解:RAW域处理的是传感器原生数据,YUV域处理的是人眼感知数据。
RAW域的数据是线性的,每个像素只记录一种颜色(R/G/B之一)。这个阶段做的BLC、LSC、AWB,本质上都是在校正传感器的物理缺陷。比如BLC去掉暗电流,LSC补偿镜头边缘进光量不足。
YUV域就不一样了。Y是亮度,UV是色度。人眼对亮度敏感,对色度不敏感。所以降噪和锐化主要放在Y通道做,UV通道可以适当降低分辨率。这是图像压缩的基础思路。
小技巧:调试时如果发现图像偏色,先查AWB和CCM,别急着动Gamma。如果发现图像噪点多,先查NR,但要注意NR太强会抹掉细节。我见过不少新手一上来就调Gamma,结果越调越乱。
1.4 3A统计:Pipeline的大脑
Pipeline里还有一套并行系统,叫3A统计。它不直接处理图像,但控制着整个Pipeline的参数。
- AE(自动曝光):控制Sensor的曝光时间和增益,保证图像亮度合适。
- AWB(自动白平衡):估计当前光源色温,调整R/G/B增益,让白色物体看起来是白的。
- AF(自动对焦):通过对比度或相位检测,驱动镜头找到最清晰的位置。
3A统计模块会从图像中提取统计信息(比如亮度直方图、色温分布、对比度值),然后反馈给控制算法。算法算出新的参数,再写回Sensor或ISP寄存器。
嗯,这里要注意:3A是闭环系统。参数调不好,图像会闪烁、偏色、来回对焦。我曾经在一个项目中,AE收敛速度调慢了,结果用户拍照时画面忽明忽暗,被投诉了好几次。
1.5 调试工具链概览
做ISP调试,光靠眼睛看是不够的。你需要一套工具链来帮你量化问题。
| 工具类型 | 常见工具 | 用途 |
|---|---|---|
| 抓图工具 | imx390_capture, raw2dng | 从Sensor或ISP抓取RAW/YUV图 |
| 分析工具 | Imatest, DxOMark | MTF、SNR、色彩精度分析 |
| 调试工具 | ISP Tuning Tool (各芯片厂商) | 在线调参,实时预览效果 |
| 仿真工具 | MATLAB, Python + OpenCV | 离线算法验证,Pipeline仿真 |
我个人习惯先用抓图工具把RAW图抓下来,然后用MATLAB或Python做离线分析。这样不占硬件资源,还能反复调参。等离线参数调得差不多了,再上板验证。
避坑提醒:我曾经在项目里直接上板调参,结果每次改参数都要重新编译、烧录、重启,一天调不了几个参数。后来改成离线仿真,效率翻了好几倍。记住:能离线就别在线,能仿真就别上板。
1.6 本章小结
这一章我们把ISP Pipeline的骨架搭起来了。你至少要知道:
- Pipeline分RAW域和YUV域,各模块的输入输出是什么
- 3A统计是Pipeline的控制大脑
- 调试工具链要抓图、分析、调参三步走
后面的章节,我们会一个一个模块深入进去。每个模块怎么调、常见问题怎么定位,我都会把实际项目中的经验拿出来讲。准备好了吗?