3. Bayer RAW数据格式

各位工程师,今天我们聊聊ISP管线中最基础、也最容易被忽视的一环——Bayer RAW数据。说白了,这就是相机传感器看到世界的原始语言。你后续所有的图像处理,都建立在对这组数据的正确理解上。

3.1 Bayer模式详解:为什么是RGGB?

人眼对绿色最敏感,所以拜耳阵列里绿色像素占了半壁江山。常见的四种排列模式:

模式 第一行 第二行 常见传感器
RGGB R G R G ... G B G B ... Sony IMX系列
BGGR B G B G ... G R G R ... 部分OmniVision
GRBG G R G R ... B G B G ... 某些安森美传感器
GBRG G B G B ... R G R G ... 部分三星传感器

我个人习惯在拿到新传感器时,第一件事就是确认Bayer模式。为什么?因为一旦搞错,后续的demosaic出来的颜色会完全错乱。我曾经在项目中遇到过,供应商给的文档写的是RGGB,实际传感器输出是BGGR,结果调试了三天才发现是模式搞反了。

⚠️ 避坑指南: 我曾经因为Bayer模式配置错误,导致整个图像偏紫红色。后来养成了一个习惯:拿到新传感器,先拍一张均匀白板,然后检查每个2x2块的像素值分布。R通道值最高就是RGGB,B通道值最高就是BGGR,一目了然。

3.2 RAW数据存储格式:比特位与排列

RAW数据不是简单的像素值堆叠。不同传感器有不同的位深和存储方式:

  • 8-bit RAW:每个像素1字节,常见于低端USB相机
  • 10-bit RAW:每个像素10位,存储时通常用16位对齐(高10位有效)
  • 12-bit RAW:工业相机主流,每个像素12位,存储方式多样
  • 14-bit / 16-bit RAW:高端科学相机,动态范围更大

存储排列方式也分两种:

  1. Packed格式:连续比特位压缩存储,节省带宽。比如10-bit packed,每5个字节存4个像素。
  2. Unpacked格式:每个像素对齐到16位,高位补0。处理简单,但带宽浪费。
💡 我的建议: 调试阶段尽量用unpacked格式。虽然数据量大一些,但你可以直接用十六进制查看器检查每个像素值,排查问题非常方便。等算法稳定了,再考虑切换到packed格式节省带宽。

3.3 黑电平校准原理:为什么需要减去一个值?

你想想看,传感器在完全无光的情况下,输出值应该是0对吧?但实际不是。由于暗电流、读出噪声等因素,即使盖上镜头盖,传感器也会输出一个非零值。这个值就是黑电平(Black Level)。

黑电平校准,说白了就是把这个底噪减掉。公式很简单:

// 黑电平校准伪代码
for each pixel in RAW buffer:
    calibrated_pixel = raw_pixel - black_level
    if calibrated_pixel < 0:
        calibrated_pixel = 0

但这里有几个关键参数需要确认:

参数 说明 典型值
黑电平值 每个通道的暗电流偏移量 12-bit RAW: 64~256
OB区域 传感器边缘的光学黑像素行/列 通常4~16行
通道差异 R/G/B通道的黑电平可能不同 R: 64, G: 68, B: 72
🔧 实战技巧: 我在项目中遇到过一个问题:黑电平校准后,暗部出现了偏色。后来发现是R/G/B三个通道的黑电平值不一样,但我用了同一个值去减。正确的做法是:从OB区域分别统计每个通道的平均值,然后各自减去对应的黑电平。

3.4 知识体系总览

下面这张图把Bayer RAW数据从传感器到预处理的核心流程串起来了:

Bayer RAW数据知识体系 传感器原始输出 Bayer模式识别 位深 存储格式 黑电平校准(减去暗电流偏移) 校准后的RAW数据 🔑 关键点: • Bayer模式错误 → 颜色完全错乱 • 黑电平校准不当 → 暗部偏色或细节丢失 • 位深和存储格式影响后续处理精度和带宽

3.5 实战中的常见问题

嗯,这里我要多说几句。很多工程师觉得Bayer RAW这部分太基础,直接跳过。但我在实际项目中踩过的坑,十有八九都跟这些基础参数有关。

  • 问题一:黑电平校准后出现负值——检查OB区域统计是否正确,或者传感器是否有动态黑电平校正功能
  • 问题二:不同增益下黑电平漂移——有些传感器在高增益下黑电平会变化,需要做增益补偿
  • 问题三:Bayer模式与ISP配置不匹配——建议在初始化阶段做一次自动检测
📌 总结一下: Bayer RAW数据是ISP管线的起点。模式、位深、存储格式、黑电平,这四个参数必须100%确认无误。我个人的习惯是:在代码里加一个断言,每次启动时校验Bayer模式和黑电平值,一旦异常立即报错,绝不往下走。