ISP Pipeline全景:一张照片的诞生,从RAW数据到YUV/JPEG的完整流程

大家好,我是老周。今天咱们聊聊ISP Pipeline的全貌。

很多人做了好几年图像算法,却说不清一张照片到底是怎么从传感器变成屏幕上那张图的。我见过不少工程师,能把某个模块调得特别好,但一问前后级关系就含糊了。这其实挺要命的——你调黑电平的时候,想过它会影响后面的AWB吗?

所以这一章,我带你把整个Pipeline走一遍。不深究每个模块的数学细节,先把骨架搭起来。

2.1 从光子到数字:RAW数据是怎么来的

一切从传感器开始。光打在像素上,每个像素只能感知亮度,不感知颜色。那颜色怎么来的?靠滤色片阵列——最常见的就是Bayer Pattern。

关键认知: 传感器输出的RAW数据,本质上是一个灰度图。每个像素只记录一个颜色通道的强度。颜色信息是“猜”出来的。

我刚开始做ISP时,总觉得RAW就是“原始”的,应该最干净。后来发现不是这么回事。RAW里有大量传感器特性:暗电流、光响应非均匀性、坏点……这些不处理掉,后面全是错的。

RAW数据特性 说明 典型问题
Bayer Pattern RGGB/GRBG等排列 每个像素只有单通道信息
黑电平偏移 传感器暗电流导致 暗部偏色、动态范围损失
坏点 像素响应异常 亮点/暗点,去噪前必须处理
线性响应 RAW是线性数据 人眼对亮度是非线性的

2.2 ISP Pipeline的完整流程

好,现在RAW数据进来了。接下来就是ISP的表演时间。我把它分成三大阶段:

  1. 前端预处理——把RAW修干净
  2. 核心处理——颜色重建、降噪、锐化
  3. 后端输出——压缩、编码、存储

你想想看,这就像做菜。预处理是洗菜切菜,核心处理是炒菜调味,后端输出是装盘上桌。哪个环节出问题,菜都端不出去。

我曾经踩过的坑: 有一款手机项目,前端黑电平校正参数没调准,结果AWB怎么调都偏色。折腾了两周,最后发现是黑电平差了2个LSB。从那以后,我每次调参都先确认前端预处理是否到位。

2.3 核心模块逐个看

下面这张图,是我自己画的ISP Pipeline全景图。建议你保存下来,后面每个章节都会用到。

ISP Pipeline 全景流程图 RAW 输入 前端预处理 黑电平校正 坏点校正 LSC 核心处理 去噪 Demosaic AWB CCM 后端输出 Gamma校正 YUV转换 JPEG编码 YUV/JPEG 输出 说明: 前端预处理:修复传感器缺陷 核心处理:重建颜色、降噪、增强 后端输出:适配人眼/存储格式

2.4 前端预处理:把RAW修干净

前端预处理的目标只有一个:把传感器带来的“脏东西”去掉。我习惯按这个顺序处理:

  • 黑电平校正——减去暗电流偏移,让黑色真正是黑色
  • 坏点校正——检测并替换异常像素
  • 镜头阴影校正(LSC)——补偿镜头边缘亮度衰减
  • 增益校正——调整整体亮度到目标范围
我的经验: 黑电平校正的参数最好在暗室下标定。我曾经图省事用了默认值,结果暗部细节全丢了。后来老老实实做了全黑帧采集,效果立竿见影。

2.5 核心处理:颜色重建与增强

核心处理是ISP的灵魂。这里我重点说几个关键模块:

2.5.1 去噪

去噪是第一步,也是最容易出问题的。去噪太强,细节没了;去噪太弱,后面放大全是噪点。我个人习惯先做空域去噪,再做时域去噪(如果有视频流)。

2.5.2 Demosaic

Demosaic就是把Bayer数据变成全彩图。说白了,就是根据周围像素猜当前像素缺失的颜色通道。算法很多,从简单的双线性插值到复杂的自适应方向插值。我建议初学者先从双线性开始,理解原理后再上复杂算法。

2.5.3 AWB

自动白平衡。这个模块调起来特别有意思——你永远不知道用户会在什么光源下拍照。我做过一个项目,用户投诉照片偏黄,结果发现是在蜡烛光下拍的。AWB算法再强,也架不住极端场景。

2.5.4 CCM

颜色校正矩阵。这个模块决定了照片的色彩风格。调CCM的时候,我建议用色卡标定,别凭感觉调。否则你会发现,红色偏橙、绿色偏黄,怎么调都调不回来。

2.6 后端输出:从线性到人眼友好

后端输出主要做三件事:

  1. Gamma校正——把线性数据映射到人眼感知的非线性空间
  2. YUV转换——从RGB转到亮度色度分离的YUV空间
  3. JPEG编码——压缩存储

这里有个容易忽略的点:Gamma校正的顺序。我见过有人把Gamma放在Demosaic前面,结果颜色全乱了。Gamma必须在颜色重建之后做,因为它是针对人眼感知的,不是针对传感器数据的。

注意: JPEG编码是有损压缩。如果你需要后期处理,建议先保存为无损格式(如TIFF或DNG),等所有处理完成后再转JPEG。我吃过这个亏——有一次为了省空间直接存JPEG,结果后期调色时发现色块严重。

2.7 总结:一张照片的诞生

好了,现在我们把整个流程串起来:

  1. 传感器采集RAW数据(Bayer Pattern)
  2. 前端预处理:黑电平校正 → 坏点校正 → LSC → 增益校正
  3. 核心处理:去噪 → Demosaic → AWB → CCM → Gamma校正
  4. 后端输出:YUV转换 → JPEG编码
  5. 最终输出:YUV或JPEG文件

你想想看,从光子到数字,中间经历了多少步?每一步都有算法在背后支撑。后面我们会逐个模块深入,但今天先把全景图刻在脑子里。

嗯,这一章就到这里。记住:ISP不是孤立的模块堆叠,而是一个环环相扣的系统。调任何一个参数,都要想清楚它对前后级的影响。