1. ISP Pipeline 概述:从 Sensor 到 YUV 的像素之旅
各位同学,咱们今天聊聊 ISP Pipeline。说白了,它就是一条图像处理的流水线。Sensor 把光信号转成电信号,然后经过一系列算法模块的“打磨”,最终输出一张我们能看懂的、色彩自然的图像。
我刚开始接触 ISP 时,觉得这玩意儿不就是调调参数吗?后来踩了不少坑才明白——Pipeline 的架构设计,直接决定了图像质量的上限和系统延迟的下限。
1.1 什么是 ISP Pipeline?
ISP,全称 Image Signal Processor。Pipeline 就是“流水线”的意思。合起来,就是一条图像信号处理的流水线。
它的输入是 Sensor 的原始 RAW 数据。输出呢?可能是 YUV、RGB,甚至是压缩后的 JPEG。中间经过的每一个模块,都在做一件事:把不完美的原始数据,修正成人眼或算法能接受的样子。
核心观点:ISP Pipeline 的本质,是一个“数据修复 + 色彩还原 + 格式转换”的串行处理链。每个模块解决一个特定的图像缺陷。
1.2 ISP 在相机系统中的位置
你想想看,一个完整的相机系统,从镜头到最终显示,ISP 卡在哪个环节?
我习惯把相机系统分成三段:
- 前端光学部分:镜头、光圈、Sensor。负责把光变成数字信号。
- 中间处理部分:ISP Pipeline。负责把 RAW 数据变成可用的图像。
- 后端应用部分:编码器、显示驱动、AI 算法。负责存储、传输或进一步分析。
ISP 就是那个“承上启下”的枢纽。前端 Sensor 给什么,它就得接什么;后端应用要什么格式,它就得吐什么格式。我在项目中遇到过,后端算法团队突然说要换 YUV 格式,结果 ISP 的配置参数全得重调——这就是位置决定的“夹心层”宿命。
| 系统层级 | 组件 | 输出数据 | ISP 的职责 |
|---|---|---|---|
| 前端 | Sensor + 镜头 | RAW (Bayer 格式) | 接收并预处理 |
| 中间 | ISP Pipeline | YUV / RGB | 核心处理 |
| 后端 | 编码器 / 显示 / AI | H.264 / JPEG / 特征图 | 提供标准输入 |
1.3 ISP Pipeline 的典型架构
咱们来看一条最经典的 Pipeline 链路:
Sensor → BLC → AWB → Demosaic → CCM → Gamma → YUV 输出
这条链路,我做了十年 ISP 还在用。虽然各家厂商会加一些私有模块,但骨架基本不变。下面我逐个模块拆开讲。
1.3.1 Sensor(传感器)
Sensor 输出的是 RAW 数据。每个像素点只记录一种颜色——红、绿或蓝。这就是 Bayer 格式。嗯,这里要注意:Sensor 的 RAW 数据是线性的,而且有暗电流噪声。
1.3.2 BLC(黑电平校正)
BLC 的作用是减去 Sensor 的暗电流偏移。说白了,就是让“纯黑”像素的值归零。我见过一些新手,BLC 参数没调准,结果整张图偏色,还以为是 AWB 的问题。
避坑指南:BLC 的校正值不是固定的。它会随 Sensor 温度、增益变化。我曾经在项目中吃过亏——常温下调好的 BLC,到高温环境下图像就发灰了。后来加了温度查表补偿才解决。
1.3.3 AWB(自动白平衡)
AWB 负责把图像中的白色物体还原成白色。它估算当前光源的色温,然后对 R、G、B 通道施加不同的增益。
为什么 AWB 放在 Demosaic 前面?我个人习惯是:在 RAW 域做白平衡,精度更高。因为 RAW 数据还没被插值污染,每个像素的颜色信息是“纯净”的。
1.3.4 Demosaic(去马赛克)
Demosaic 把 Bayer 格式的 RAW 数据,插值成每个像素都有 R、G、B 三通道的完整图像。这是 Pipeline 里计算量最大的模块之一。
你想想看,Sensor 只给了 1/4 的红色信息、1/4 的蓝色信息、1/2 的绿色信息。Demosaic 要“猜”出缺失的那 2/3 像素值。猜得好不好,直接决定图像的锐度和边缘质量。
1.3.5 CCM(色彩校正矩阵)
CCM 把 Sensor 的 RGB 色彩空间,映射到标准色彩空间(比如 sRGB)。因为 Sensor 的滤色片响应和人眼不一样,必须用矩阵乘法来校正。
这个矩阵是 3x3 的。调 CCM 参数时,我建议你盯着色卡看——尤其是红色和蓝色区域。调不好,肤色会偏紫,天空会偏青。
1.3.6 Gamma(伽马校正)
Gamma 校正解决的是“人眼对暗部更敏感”的问题。它把线性数据映射成非线性,让暗部细节更丰富。
标准 Gamma 曲线是 2.2。但不同显示设备可能用不同的 Gamma 值。我在项目中遇到过,ISP 输出 Gamma 2.2 的图像,接到某个工业显示器上,暗部一片漆黑——后来发现那台显示器内置了 Gamma 校正,双重 Gamma 导致暗部被压死了。
警告:Gamma 校正必须在 CCM 之后做。因为 CCM 是线性运算,如果在 Gamma 之后做 CCM,色彩矩阵的线性假设就不成立了,结果会严重偏色。
1.3.7 YUV 输出
最后一步,把 RGB 转成 YUV。Y 是亮度,U、V 是色度。YUV 的好处是:人眼对亮度更敏感,对色度不敏感。所以后续编码时可以压缩色度信息,节省带宽。
YUV 的格式有很多种:YUV420、YUV422、YUV444。选哪种?看你的带宽和画质要求。我一般建议:消费级产品用 YUV420,工业检测用 YUV444。
1.4 典型 Pipeline 的 SVG 架构图
下面这张图,把整个流程串起来了。你可以把它当作本章的“知识地图”。
1.5 本章小结
这一章,咱们把 ISP Pipeline 的骨架搭起来了。从 Sensor 到 YUV,七个核心模块,每个都有它的使命。
记住一句话:Pipeline 的设计,就是延迟和画质的权衡。模块越多,画质越好,但延迟也越大。怎么在两者之间找到平衡点?后面的章节会一步步展开。
课后思考:如果让你去掉 Pipeline 中的一个模块,你会去掉哪个?为什么?想清楚这个问题,你对每个模块的价值理解就更深一层。