成像基础:从光子到数字信号,理解RAW图与Bayer格式

各位同学好,我是你们这堂课的主讲工程师。今天咱们聊点最基础、但也最容易被忽视的东西——图像传感器是怎么把光变成数字信号的。

很多人一上来就调ISP参数、跑AI模型,结果连RAW图长什么样都没见过。我当年刚入行时也犯过这毛病,拿着RAW数据当RGB图直接显示,出来的画面……嗯,你们可以想象一下,全是马赛克。从那以后,我老老实实把成像链路从头啃了一遍。

1. 光子到电子的转换:传感器的第一道工序

说白了,图像传感器就是个光子计数器。每个像素点上的光电二极管,把打进来的光子转换成电子。光子越多,积累的电荷就越多。

这个过程有几个关键参数,我列个表给你们看:

参数 物理含义 典型值 我的经验
量子效率(QE) 光子转电子的比例 50%-80% 背照式传感器QE更高,暗光下优势明显
满阱容量(FWC) 单个像素能存的最大电子数 10k-100k e⁻ 大像素FWC高,但分辨率会降
转换增益(CG) 电子转电压的倍数 30-150 μV/e⁻ 高增益模式适合暗光,但噪声也放大
读出噪声 读出电路引入的噪声 1-10 e⁻ rms 这是限制动态范围的主要因素之一
小提示: 我在调试一款手机传感器时,发现暗光下信噪比总上不去。后来查了数据手册,发现QE在近红外波段掉得厉害。换了个RGGB的滤波器方案,问题就解决了。所以,选传感器时别只看像素数,QE曲线更重要。

2. 为什么是Bayer格式?一个聪明的妥协

人眼对绿色最敏感,对红色和蓝色相对迟钝。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

每个像素只记录一种颜色。所以RAW图本质上是个单通道图像,每个像素值代表该位置的光强,但颜色信息是残缺的。

注意: 千万别把RAW图直接当RGB图显示!我曾经见过一个新手,把RAW数据用imshow()直接看,结果画面全是绿色和紫色条纹。他以为是传感器坏了,折腾了两天……其实只是没做demosaic。

3. RAW图的位深与动态范围

RAW图通常用10bit、12bit或14bit存储。为什么不用8bit?因为8bit只有256个灰度级,根本不够描述真实场景的亮度范围。

我给你们算笔账:

  • 8bit:0-255,动态范围约48dB
  • 10bit:0-1023,动态范围约60dB
  • 12bit:0-4095,动态范围约72dB
  • 14bit:0-16383,动态范围约84dB

一个典型室外场景,从阴影到太阳直射的亮度差可能超过100dB。你想想看,8bit根本不够用。所以HDR算法才需要多帧融合,把不同曝光时间的RAW图拼起来。

核心概念: RAW图的位深决定了你能保留多少亮度细节。位深越高,后期调整空间越大。但代价是数据量变大,处理速度变慢。在AI ISP中,我通常建议用12bit作为输入,既能保证质量,又不会让模型太吃力。

4. 从RAW到RGB:Demosaic是第一步

Bayer格式的RAW图要变成彩色图像,必须做demosaic(去马赛克)。这个过程就是根据周围像素的颜色信息,插值出每个像素缺失的两个颜色通道。

常见的插值方法有:

  1. 最近邻插值:最快,但锯齿严重。我从来不用。
  2. 双线性插值:简单,但边缘模糊。
  3. 方向自适应插值:先判断边缘方向,再沿边缘插值。效果不错,我早期项目常用。
  4. 基于深度学习的插值:现在AI ISP的主流方案,效果好但计算量大。

给你们看一段简单的双线性插值代码,理解一下原理:

// 假设Bayer格式为RGGB
// 位置(2,2)是绿色像素,需要插值R和B

// 插值R:取左右两个R像素的平均
R_at_G = (raw[1][2] + raw[3][2]) / 2;

// 插值B:取上下两个B像素的平均
B_at_G = (raw[2][1] + raw[2][3]) / 2;

当然,实际工程中不会这么简单。方向自适应算法会先计算水平和垂直方向的梯度,选择梯度小的方向做插值。这样可以避免边缘处的伪彩色。

避坑指南: 我曾经在一条流水线上调试demosaic算法,发现画面边缘总有彩色条纹。查了半天,发现是Bayer阵列的起始相位搞错了。传感器厂商的文档里写的是RGGB,但实际输出是GBRG。所以,拿到新传感器后,第一件事就是确认Bayer相位。

5. 黑电平与增益:RAW图的校准

RAW图不是直接从传感器读出来就能用的。有两个重要的校准步骤:

  • 黑电平校正:传感器在无光条件下也会输出一个非零值,这叫黑电平。通常需要减去这个值,让黑色真正归零。
  • 增益校正:不同像素的灵敏度有差异,需要乘以一个增益系数来统一。

黑电平的值一般在数据手册里能找到,比如64(12bit RAW)。但实际项目中,我建议你们自己测一下:盖上镜头盖,拍一张全黑图,然后统计所有像素的均值。这个值才是真正的黑电平。

注意: 黑电平校正必须在demosaic之前做!否则插值出来的颜色会偏色。我见过有人先做demosaic再做黑电平校正,结果画面整体偏绿,怎么调白平衡都调不回来。

6. 知识结构图:从光子到数字信号的完整链路

下面这张图总结了整个成像链路,我建议你们保存下来,以后调试ISP时对照着看:

从光子到数字信号的成像链路 从光子到数字信号:成像链路 光子入射 光电转换 电荷积累 读出电路 Bayer格式 黑电平校正 增益校正 RAW图输出 Demosaic RGB图像 ISP处理 最终图像 说明: 虚线箭头表示RAW图可以直接输出存储,也可以直接进入Demosaic流程。 黑电平校正和增益校正是RAW图预处理的关键步骤,必须在Demosaic之前完成。

7. 总结:理解RAW图是ISP工程师的基本功

好了,这一章的内容就这些。总结几个关键点:

  • RAW图是传感器直接输出的原始数据,每个像素只记录一种颜色(Bayer格式)
  • 位深决定了动态范围,12bit是AI ISP的常用输入
  • 黑电平校正和增益校正是RAW图预处理的关键步骤
  • Demosaic是把RAW图变成RGB图的必经之路

我个人觉得,理解RAW图是ISP工程师的基本功。你只有知道传感器输出了什么,才能知道怎么处理它。下一章我们会讲多帧融合的基本原理,到时候你会看到,RAW图的质量直接决定了HDR效果的上限。

嗯,今天就到这里。有问题随时找我。