图像数据管道:从RAW图到可显示图像

图像数据管道,说白了就是相机从「看到」到「输出」的全过程。我最早接触这块时,以为就是传感器拍下来直接显示——太天真了。实际上,传感器输出的RAW数据离我们能看的图像,中间差了整整一条ISP流水线。

这一章,咱们就从头捋一遍。从RAW图格式、Bayer阵列,到去马赛克,再到ISP流水线的基本框架。这些都是后面3A算法的基础,绕不开。

RAW图数据格式:传感器的「原始供词」

传感器每个像素只能感知光的强度,不区分颜色。那彩色是怎么来的?答案是在传感器表面覆盖一层彩色滤光片阵列(CFA),最常见的就是Bayer阵列。

RAW图就是传感器直接输出的、未经任何处理的数字信号。每个像素只记录一个颜色通道的值——要么R,要么G,要么B。格式上通常是12bit或14bit,比最终8bit图像细腻得多。

关键点:RAW图不是「灰图」,也不是「彩图」,它是「马赛克图」。每个像素只有一种颜色信息,另外两种颜色需要靠插值算出来。

我遇到过不少新手,拿到RAW数据直接当灰度图显示,结果发现图像暗部细节全丢了。其实RAW的线性空间和显示用的gamma空间完全不同,直接显示肯定不对。

Bayer阵列:最常见的CFA模式

Bayer阵列的排列是:一行RGRG,下一行GBGB,交替重复。为什么绿色像素占一半?因为人眼对绿色最敏感。这个设计很聪明——用更多的绿色像素模拟人眼的亮度感知。

像素位置 第1列 第2列 第3列 第4列
第1行 R G R G
第2行 G B G B
第3行 R G R G
第4行 G B G B

你想想看,每个2x2的块里,有1个R、2个G、1个B。这就是最经典的Bayer模式。当然也有其他变种,比如RGBW、RCCC等,但Bayer是主流。

个人习惯:我在调试ISP时,第一步永远是先验证Bayer排列顺序。不同厂商的传感器,Bayer的起始相位可能不同——有的是RGGB,有的是BGGR。搞错了,整张图颜色就全乱了。

去马赛克:从残缺到完整

去马赛克(Demosaic)就是把Bayer RAW变成完整RGB图像的过程。说白了,就是给每个像素补上缺失的两种颜色。

最简单的办法是双线性插值——用相邻同色像素的平均值。但这样会带来严重的伪色和锯齿。我早期做算法时用过这种方法,结果图像边缘全是彩色条纹,惨不忍睹。

稍微好一点的是边缘导向插值。先检测边缘方向,然后沿着边缘方向插值,不跨边缘。这样能大幅减少伪色。

再高级一点,就是基于梯度的方法。比如Hamilton-Adams算法,它用色差(R-G、B-G)的梯度来指导插值。色差在图像局部通常是平滑的,利用这个先验能恢复出更自然的细节。

我曾经踩过的坑:去马赛克算法对噪声非常敏感。如果RAW图有噪声,插值会把噪声放大成彩色斑点。所以ISP流水线里,去马赛克之前通常先做降噪。顺序搞反了,图像质量会断崖式下降。

ISP流水线基础:从RAW到YUV

ISP(Image Signal Processor)流水线,就是把RAW图一步步处理成可显示、可编码的图像。典型的ISP流水线包含以下模块:

  1. 黑电平校正:减去传感器暗电流带来的固定偏置
  2. 镜头阴影校正:补偿镜头边缘亮度衰减
  3. 坏点校正:修复传感器上的死点或亮点
  4. 降噪:减少传感器噪声
  5. 去马赛克:Bayer到RGB
  6. 白平衡:调整色温,让白色物体看起来是白的
  7. 颜色校正矩阵:把传感器颜色空间映射到标准颜色空间
  8. Gamma校正:从线性空间转到非线性显示空间
  9. 色调映射:压缩动态范围,适配显示设备

嗯,这里要注意——不同厂商的ISP流水线顺序可能略有差异。但核心逻辑是一致的:先校正传感器缺陷,再恢复颜色,最后做显示适配。

下面这张图展示了ISP流水线的基本流程:

ISP流水线基本流程 ISP流水线基本流程 RAW图输入 预处理阶段:黑电平校正 → 镜头阴影校正 → 坏点校正 → 降噪 去马赛克(Demosaic) 颜色处理:白平衡 → 颜色校正矩阵 → Gamma校正 后处理:色调映射 → 锐化 → 色彩增强 → 格式转换 YUV/RGB输出 注:不同ISP实现中模块顺序可能微调,但整体逻辑一致

ISP流水线中的关键权衡

做ISP调试,本质上是在多个指标之间找平衡。我整理了一张表,列出几个最常见的权衡:

权衡项 偏向一方 偏向另一方 我的建议
降噪 vs 细节 降噪强 → 图像平滑 降噪弱 → 细节保留 根据场景动态调整,夜景多降噪,白天少降噪
锐化 vs 伪影 锐化强 → 边缘清晰 锐化弱 → 无过冲 宁可欠锐化,不要出现halo
饱和度 vs 自然度 饱和度高 → 鲜艳 饱和度低 → 真实 消费级产品可以偏鲜艳,专业级偏真实
动态范围 vs 对比度 HDR强 → 细节丰富 对比度高 → 视觉冲击 HDR要配合色调映射,否则图像发灰

我个人习惯是,先保证基础质量(无坏点、无色偏、无伪色),再调风格参数(饱和度、锐度、对比度)。基础没打好,后面怎么调都救不回来。

小结

这一章我们覆盖了图像数据管道的三个核心环节:RAW图格式、Bayer阵列与去马赛克、ISP流水线基础。说白了,就是从传感器原始数据到可显示图像的完整链路。

理解这些基础,后面讲AWB、AE、AF时你才能知道——这些算法到底在ISP流水线的哪个位置起作用,它们又受哪些前置模块的影响。

一个实用建议:如果你刚开始接触ISP,建议先找一个开源的ISP pipeline(比如libcamera或rawpy),把RAW图跑一遍。亲眼看看每个模块前后的图像变化,比看一百页文档都管用。