3、ISP Pipeline概览:ISP处理流程总览、各模块功能简介、RAW图到RGB/YUV的转换

好,咱们今天聊聊ISP的整个处理流程。说白了,ISP Pipeline就是一条“图像生产线”。RAW图从传感器出来,经过这条流水线,最终变成你屏幕上看到的漂亮照片。

我个人习惯把ISP Pipeline想象成一条“数据河流”。河水(RAW数据)从源头(传感器)出发,流经一个个“净化站”(各个处理模块),最后变成清澈的饮用水(RGB/YUV图像)。每个模块都有自己的任务,缺一不可。

3.1 ISP Pipeline整体流程

先看一张我画的流程图,帮你建立整体印象。

ISP Pipeline 核心流程 RAW输入 Bayer格式 黑电平校正 BLC 去噪 NR 去马赛克 Demosaic RGB 白平衡 AWB 伽马校正 Gamma 色彩校正 CCM 色彩空间转换 RGB→YUV YUV 图例说明 RAW域处理 RGB域处理 YUV域处理 虚线表示:RAW域处理完成后,进入RGB域,最后转换到YUV域

嗯,这张图基本涵盖了ISP的核心模块。你可能会问:“为什么模块顺序是这样?” 我告诉你,这个顺序是有讲究的。每个模块的输出,都是下一个模块的输入。顺序错了,效果就会大打折扣。

3.2 各模块功能简介

咱们一个一个来看。每个模块我都用一句话概括它的核心任务。

模块名称 英文缩写 一句话功能
黑电平校正 BLC 去掉传感器暗电流带来的固定偏移
去噪 NR 减少传感器和电路引入的随机噪声
去马赛克 Demosaic 从Bayer格式插值出完整的RGB图像
白平衡 AWB 让白色物体在任何光源下都呈现白色
伽马校正 Gamma 调整亮度曲线,适配显示设备
色彩校正 CCM 修正传感器色彩偏差,还原真实颜色
色彩空间转换 CSC 从RGB转换到YUV,便于压缩和传输
核心观点: RAW域处理(BLC、NR)解决的是“传感器物理缺陷”。RGB域处理(AWB、Gamma、CCM)解决的是“人眼感知匹配”。YUV域处理(CSC)解决的是“工程存储效率”。

3.3 RAW图到RGB的转换

这是ISP Pipeline中最关键的一步。RAW图是什么?说白了,就是传感器直接输出的“原始数据”。每个像素只记录一种颜色(红、绿或蓝),按照Bayer模式排列。

举个例子,一个典型的Bayer模式是这样的:

R  G  R  G  R  G
G  B  G  B  G  B
R  G  R  G  R  G
G  B  G  B  G  B

你看,每个像素只有一种颜色信息。要得到完整的RGB图像,就需要“猜”出缺失的颜色。这个“猜”的过程,就是去马赛克(Demosaic)。

我在项目中遇到过一种情况:如果去马赛克算法太简单,比如直接用最近邻插值,图像边缘会出现明显的“锯齿”和“伪色”。嗯,这里要注意,好的去马赛克算法会考虑边缘方向,避免这些 artifacts。

一个简单的双线性插值算法示例:

// 假设当前像素是绿色位置,需要插值红色和蓝色
// 红色插值:取上下左右四个红色像素的平均值
R_interp = (R_top + R_bottom + R_left + R_right) / 4

// 蓝色插值:取对角四个蓝色像素的平均值
B_interp = (B_tl + B_tr + B_bl + B_br) / 4

当然,实际工程中不会用这么简单的方法。我建议你至少用“边缘导向插值”或者“自适应插值”。

3.4 RGB到YUV的转换

RGB到YUV的转换,说白了就是“换一种方式描述颜色”。RGB适合显示,YUV适合压缩和传输。

Y代表亮度,UV代表色度。人眼对亮度敏感,对色度不敏感。所以我们可以对UV分量进行下采样,压缩数据量,而人眼几乎察觉不到。

标准转换公式如下:

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

你可能会问:“为什么系数是这些数字?” 这是根据人眼对红绿蓝三种颜色的敏感度来定的。人眼对绿色最敏感,所以G的权重最大(0.587)。对蓝色最不敏感,所以B的权重最小(0.114)。

小技巧: 在实际工程中,为了加速计算,我们通常用整数运算代替浮点运算。比如把系数乘以1024,然后右移10位。这样既快又准。

3.5 避坑指南

我曾经在调试一个ISP Pipeline时,发现图像颜色总是偏绿。查了半天,原来是去马赛克模块的绿色通道插值算法有bug。嗯,这种问题最头疼,因为颜色偏绿可能是AWB的问题,也可能是Demosaic的问题,还可能是CCM的问题。

我的排查方法是:分阶段检查。先看RAW图有没有问题,再看Demosaic后的RGB图,最后看YUV输出。每个阶段都输出一张中间结果图,一眼就能看出问题出在哪。

警告: 千万不要跳过黑电平校正!我见过有人为了省事,直接拿RAW图做Demosaic。结果图像暗部全是偏色,因为黑电平偏移没有被补偿。记住,BLC是Pipeline的第一步,也是最重要的一步。

好了,这一章的内容就到这里。ISP Pipeline的整体框架你已经了解了。下一章我们会深入每个模块的细节,从黑电平校正开始。


专注资料整理