2. ISP Pipeline概览:从RAW图到YUV

各位好,欢迎来到第二章。上一章我们聊了图像传感器怎么把光信号变成RAW数据,那RAW数据进到ISP之后,到底经历了什么?这一章,我带大家把ISP的整个Pipeline走一遍。

说白了,ISP就是个“图像厨师”。RAW图就像刚摘下来的蔬菜,带着泥土、还有虫眼。经过ISP一道道工序的清洗、切配、调味,最后端上桌的,才是我们肉眼看着舒服的YUV图像。

核心观点: ISP Pipeline的本质,是从“传感器看到的物理世界”到“人眼感知的数字世界”的映射过程。每一步都在做“校正”和“增强”。

2.1 为什么需要ISP?RAW图到底“Raw”在哪?

我刚开始接触ISP时,总觉得RAW图不就是黑白灰吗?后来才发现,RAW图的问题远不止“没颜色”这么简单。

RAW图的问题清单:

  • 暗电平偏移: 即使完全遮光,像素也有一个基础输出值,不是0。
  • 固定模式噪声(FPN): 每个像素的暗电流不一致,导致画面有固定的竖条纹或网格。
  • 镜头阴影: 镜头中心进光多,边缘进光少,画面四角发暗。
  • 坏点: 传感器上总有那么几个“死像素”,要么全亮要么全暗。
  • 拜耳阵列: 每个像素只采集一种颜色(R/G/B),需要猜出另外两种。
  • 白平衡偏差: 不同光源下,白色物体拍出来不白。
  • 人眼非线性响应: 传感器是线性的,但人眼对暗部更敏感。

你看,这么多问题,不经过ISP处理,RAW图根本没法看。ISP Pipeline就是逐一解决这些问题的流水线。

2.2 ISP Pipeline的宏观流程

先给大家一张总图,把整个流程串起来。我个人习惯把ISP分成三大阶段:前端校正、中间处理、后端输出。

ISP Pipeline 宏观流程图 ISP Pipeline 宏观流程 阶段一:前端校正 暗电平校正 FPN消除 镜头阴影校正 坏点校正 阶段二:中间处理 去马赛克 白平衡 去噪 色彩校正 Gamma校正 锐化 阶段三:后端输出 色彩空间转换 YUV输出 输入:RAW 输出:YUV 注意:实际芯片的Pipeline顺序可能因厂商而异, 但核心模块基本一致。去噪可能放在去马赛克前后,各有优劣。

嗯,这张图基本把Pipeline的骨架画出来了。下面我们逐个模块拆开讲。

2.3 前端校正:把RAW图“洗干净”

前端校正处理的是RAW域数据,也就是在拜耳阵列格式下直接操作。这个阶段的目标只有一个:消除传感器和镜头引入的固定瑕疵。

2.3.1 暗电平校正

传感器有“暗电流”,即使没光也有输出。校正方法很简单:减去一个参考值。这个参考值通常来自传感器周边的“光学黑区”(OB, Optical Black)。

我的经验: 暗电平不是固定值,它会随温度漂移。我曾经遇到一个案子,白天画面正常,晚上噪点爆炸。查了两天才发现是暗电平校正没做温度补偿。所以,一定要用实时OB值,别用固定值。

2.3.2 固定模式噪声(FPN)消除

FPN是传感器自身的“指纹”,每颗芯片都不一样。校正方法:在完全遮光条件下,采集一帧“暗场”,然后从后续每一帧中减去这个暗场。

2.3.3 镜头阴影校正(LSC, Lens Shading Correction)

镜头中心到边缘的光衰减,导致四角发暗。校正方法:预先标定一个增益矩阵,对边缘像素乘以更大的增益。

区域 相对亮度 需要增益
中心 100% 1.0x
中间 70% 1.43x
边缘 50% 2.0x
注意: 增益不能太大,否则边缘噪声会被放大。安防监控中,边缘画质可以适当妥协,但噪声不能炸。

2.3.4 坏点校正(DPC, Defective Pixel Correction)

传感器总有坏点。校正方法:检测到坏点后,用周围像素的平均值或中值替换。

2.4 中间处理:从RAW到RGB的“魔法”

前端校正完,RAW图干净了,但还是一片灰蒙蒙的拜耳阵列。中间处理阶段,我们要把它变成人眼能看的彩色图像。

2.4.1 去马赛克(Demosaic)

这是ISP里最核心的算法之一。每个像素只有一种颜色,需要根据周围像素猜出另外两种。说白了,就是“插值”。

常见的插值算法:

  • 双线性插值: 简单,但边缘有锯齿。
  • 边缘导向插值: 先判断边缘方向,再沿边缘插值,效果更好。
  • 自适应插值: 结合多种策略,是目前的主流。

2.4.2 白平衡(AWB, Auto White Balance)

不同光源下,白色物体拍出来不白。校正方法:找到场景中的“白色参考点”,然后调整R/G/B三个通道的增益,让白色点恢复为纯白。

关键指标: 色温。日光约5500K,白炽灯约2800K,荧光灯约4000K。AWB算法要能自动识别色温并调整。

2.4.3 去噪(NR, Noise Reduction)

去噪是ISP里最“艺术”的环节。去多了,画面糊;去少了,画面脏。

我个人的经验:去噪要分区域、分亮度。暗部噪声多,去狠一点;亮部细节多,去轻一点。安防监控尤其要注意运动区域的去噪,否则运动物体会出现“拖影”。

2.4.4 色彩校正矩阵(CCM, Color Correction Matrix)

传感器的色彩响应和人眼不一样。CCM是一个3x3的矩阵,把传感器RGB转换到标准RGB空间。

// 典型的CCM示例
R_out = 1.8 * R_in - 0.5 * G_in - 0.3 * B_in
G_out = -0.2 * R_in + 1.6 * G_in - 0.4 * B_in
B_out = -0.1 * R_in - 0.3 * G_in + 1.4 * B_in
避坑指南: CCM的系数不能太大,否则会放大噪声。我曾经调过一组系数,色彩很鲜艳,但暗部全是彩色噪点。后来把对角线系数控制在2.0以内,非对角线系数控制在0.5以内,才稳住。

2.4.5 Gamma校正

传感器是线性的,但人眼对暗部更敏感。Gamma校正就是把线性数据映射到人眼感知的非线性空间。标准Gamma值通常是2.2。

2.4.6 锐化(Sharpening)

经过前面几步,图像细节可能被模糊了。锐化就是增强边缘对比度,让画面更清晰。

2.5 后端输出:从RGB到YUV

最后一步,把RGB转换成YUV。为什么是YUV?因为YUV把亮度和色度分开,方便压缩和传输。安防监控中,YUV 4:2:0是最常见的格式。

转换公式很简单:

Y = 0.299 * R + 0.587 * G + 0.114 * B
U = -0.147 * R - 0.289 * G + 0.436 * B
V = 0.615 * R - 0.515 * G - 0.100 * B

2.6 数据流与带宽

讲完流程,我们聊聊数据流。ISP内部的数据量非常大,尤其是高分辨率、高帧率的安防摄像头。

分辨率 帧率 RAW带宽(10bit) YUV带宽(8bit 4:2:0)
1920x1080 30fps ~622 Mbps ~249 Mbps
3840x2160 30fps ~2.49 Gbps ~996 Mbps
3840x2160 60fps ~4.98 Gbps ~1.99 Gbps

你看,4K@60fps的RAW带宽接近5Gbps。ISP内部必须用流水线架构,逐行处理,不能等整帧数据都到了再处理。这也是为什么ISP设计这么有挑战性。

2.7 小结

这一章,我们把ISP Pipeline从头到尾捋了一遍。从RAW图到YUV,中间经历了前端校正、中间处理、后端输出三大阶段。每个阶段都有它的使命,每个模块都有它的坑。