2、图像传感器与RAW数据:Sensor工作原理、Bayer Pattern、RAW数据格式、黑电平校正

做ISP调优这些年,我始终觉得一个道理特别朴素——你连原材料都不了解,就别谈怎么加工了。图像传感器和RAW数据,就是ISP pipeline的原材料。这一章,咱们就把Sensor怎么干活、RAW数据长什么样、黑电平为什么要校正,彻底聊透。

2.1 Sensor工作原理:光怎么变成电,电又怎么变成数

说白了,图像传感器就是个“光子计数器”。每个像素点就是一个光电二极管,光子打上去产生电子,电子数量跟光强成正比。然后通过ADC(模数转换器)把电压值转成数字信号。

目前安防监控领域主流的传感器就两种:

类型 工作原理 优缺点 典型应用
CCD 电荷逐行转移,统一输出 画质好、噪声低,但功耗高、速度慢 高端工业相机、天文
CMOS 每个像素独立放大+ADC 功耗低、速度快、集成度高,但噪声略大 安防监控、手机、车载

现在安防监控99%都是CMOS。为什么?因为我们需要高帧率、低功耗、还能把ISP集成到一颗芯片上。CCD虽然画质好,但那个功耗和成本,做监控摄像头根本扛不住。

我的经验: 选Sensor时别只看分辨率。帧率、动态范围、信噪比、暗电流,这些参数在安防场景下比分辨率更重要。我曾经遇到一个项目,选了高分辨率Sensor,结果夜间帧率掉到15fps,运动目标全是拖影——后来换了低分辨率高帧率的Sensor,问题直接解决。

2.2 Bayer Pattern:为什么每个像素只认一种颜色

你可能会问:传感器不是彩色相机吗?为什么每个像素只感光一种颜色?

嗯,这里有个物理限制——光电二极管本身不区分颜色。它只能感知光的强度,分不清红绿蓝。那怎么办?

答案就是在每个像素上覆盖一个滤光片,只让特定波长的光通过。这就是Bayer Pattern,也叫拜耳阵列。最常见的格式是RGGB:

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

为什么绿色像素是红色的两倍?因为人眼对绿色最敏感。Sensor设计者故意让绿色通道采样率更高,这样经过插值后,人眼看着更自然。

除了RGGB,还有几种变体:

Pattern 排列方式 特点
RGGB 标准拜耳 最通用,适合大多数场景
RCCC 红+3个透明 高灵敏度,适合低照度
RCCB 红+2透明+蓝 兼顾色彩和灵敏度
RGBW 红绿蓝+白 提升低照度性能
注意: 不同Pattern的Sensor,ISP pipeline里的demosaic算法完全不同。我曾经接手一个项目,Sensor从RGGB换成了RCCB,结果直接套用原来的ISP参数,颜色全乱套了。后来重新标定了色彩校正矩阵才搞定。

2.3 RAW数据格式:Sensor的“原生语言”

RAW数据就是Sensor直接输出的、未经任何处理的原始数据。每个像素只包含一个颜色通道的值,位深通常是10bit、12bit或14bit。

举个例子,一个200万像素的Sensor,输出12bit RAW,一帧数据量就是:

1920 × 1080 × 12bit = 24,883,200 bit ≈ 3.1 MB

RAW数据在内存里的排列方式,直接决定了ISP后续处理的效率。常见格式有:

  • Bayer RAW:最原始,每个像素一个值,按Bayer Pattern排列
  • MIPI RAW:MIPI CSI接口传输的RAW格式,通常带packing
  • DPCM RAW:差分脉冲编码调制,压缩后减少带宽

我个人习惯在调试阶段,先用Bayer RAW格式。为什么?因为没有任何压缩损失,能看到Sensor最真实的噪声特性。等调优稳定了,再考虑用DPCM节省带宽。

关键点: RAW数据是ISP pipeline的“起点”。如果RAW数据本身有问题(比如坏点、暗电流不均、固定模式噪声),后面再怎么调也救不回来。所以,拿到一个新Sensor,我第一件事就是抓一帧RAW数据,用工具看它的直方图和噪声分布。

2.4 黑电平校正:把“0”找回来

你想想看,Sensor在完全无光的情况下,输出应该是0对吧?但实际不是。因为暗电流、ADC偏移、电路噪声等原因,Sensor在暗场下会输出一个非零值。这个值就叫黑电平(Black Level)。

黑电平校正的目的很简单:把暗场下的输出拉到0,保证后续处理的基准正确。

校正公式也很直接:

校正后像素值 = 原始像素值 - 黑电平值

但这里有个坑——黑电平不是固定值。它会随着温度、增益、曝光时间变化。我遇到过最典型的情况:

  • 白天温度低,黑电平正常
  • 晚上红外灯开启,Sensor温度升高,黑电平漂移
  • 结果暗部出现偏色,绿色通道明显偏亮

怎么解决?

大多数Sensor会提供光学黑区(Optical Black, OB)——就是Sensor边缘被遮挡的像素,它们永远接收不到光。这些像素的输出值,就是当前条件下的黑电平参考。

校正流程一般是:

  1. 读取OB区域的像素值,计算平均值
  2. 用这个平均值作为当前帧的黑电平
  3. 对每个有效像素减去黑电平值
  4. 做clamp处理,防止出现负值
避坑指南: 我曾经在一个项目中,OB区域被Sensor厂商配置成了无效像素,导致黑电平校正一直不准。后来我手动抓了暗场RAW数据,统计了全图的像素分布,才找到真正的黑电平值。所以,拿到新Sensor,一定要先确认OB区域是否有效。

2.5 本章知识结构

下面这张图,把Sensor工作原理、Bayer Pattern、RAW数据格式、黑电平校正的关系串起来了。你可以把它当作本章的“思维导图”:

图像传感器与RAW数据 — 知识结构图 图像传感器 (CMOS/CCD) 工作原理 光子 → 电子 → 电压 → ADC 帧率 / 动态范围 / 信噪比 暗电流 / 固定模式噪声 Bayer Pattern RGGB / RCCC / RCCB / RGBW 绿色通道双倍采样 Demosaic算法依赖Pattern RAW数据格式 Bayer RAW / MIPI RAW / DPCM 位深:10bit / 12bit / 14bit 数据量 = 分辨率 × 位深 黑电平校正 校正值 = 原始值 - 黑电平 OB区域参考 / 温度补偿

这张图的核心逻辑是:Sensor工作原理决定了RAW数据的产生方式;Bayer Pattern决定了RAW数据的排列结构;RAW数据格式决定了数据在内存中的组织方式;而黑电平校正是RAW数据进入ISP pipeline前的第一道预处理。四者环环相扣,缺一不可。

总结一句话: 理解Sensor和RAW数据,是ISP调优的“基本功”。基本功不扎实,后面所有调优都是空中楼阁。我见过太多工程师,上来就调AWB、调Gamma,结果发现暗部偏色、亮部过曝,最后追根溯源,发现是黑电平校正没做对。嗯,别走那条弯路。