raw格式数据流与MIPI CSI-2对接 - 第2节

2.1 Bayer 阵列原理

Bayer 阵列是单传感器彩色成像的基础结构。由于单个像素只能感知光强(亮度),无法直接区分颜色,因此需要在像素表面覆盖彩色滤光片阵列(CFA),使每个像素只响应红、绿、蓝中的一种分量。Bayer 阵列是最常用的 CFA 模式,由 Bryce Bayer 于 1976 年提出。

核心思想:人眼对绿色亮度变化最敏感,因此 Bayer 阵列中绿色像素数量是红色和蓝色的两倍,形成 RG/GB 交错排列。
Bayer 阵列 4×4 像素排列 R G R G G B G B R G R G G B G B R 像素 (25%) G 像素 (50%) B 像素 (25%) 每个像素只记录一种颜色分量,完整彩色图像需通过去马赛克(Demosaic)算法重建

Bayer 阵列的典型排列模式为 RG/GB 或 GR/BG,具体取决于传感器厂商的设计。在 MIPI CSI-2 传输中,Bayer 模式信息通过帧头中的 Data Type 字段标识,接收端据此解析像素排列顺序。

2.2 Raw 数据格式定义

Raw 格式直接存储传感器每个像素的原始量化值,不经过任何颜色处理、白平衡或伽马校正。根据量化位深的不同,MIPI CSI-2 定义了多种 Raw 数据类型:

格式名称 位深 (bit/pixel) MIPI Data Type 每像素字节数 典型应用
Raw8 8 0x2A 1 低端摄像头、预览模式
Raw10 10 0x2B 1.25 (4像素打包5字节) 主流手机后摄、安防
Raw12 12 0x2C 1.5 (2像素打包3字节) 高端手机、工业相机
Raw14 14 0x2D 1.75 (4像素打包7字节) 专业相机、医疗成像
Raw16 16 0x2E 2 科学级相机、天文
实战提示:Raw10 和 Raw12 在 MIPI 链路上采用打包传输以节省带宽。Raw10 每 4 个像素打包为 5 字节(4×10=40bit=5Byte),Raw12 每 2 个像素打包为 3 字节(2×12=24bit=3Byte)。接收端必须按对应解包算法还原像素值。

2.3 位深与动态范围

位深决定了每个像素可区分的灰度等级数量,直接关联传感器的动态范围。动态范围定义为传感器能同时记录的最大信号与最小可分辨信号之比,通常以 dB 为单位。

位深与动态范围关系 8bit 10bit 12bit 14bit 16bit 位深 (bit) 0 dB 48 dB 96 dB 144 dB 48dB 60dB 72dB 84dB 96dB 每增加1bit,动态范围提升约6dB

动态范围的理论计算公式为:

DR (dB) = 6.02 × N + 1.76

其中 N 为位深(bit),1.76dB 为理想 ADC 的量化噪声修正项。

实际传感器的动态范围还受读出噪声、暗电流、满阱容量等模拟因素限制,通常低于理论值。下表对比了不同位深下的理论动态范围与典型实际值:

位深 灰度等级 理论动态范围 典型实际动态范围 适用场景
8-bit 256 48 dB 40~45 dB 低光照、低成本
10-bit 1024 60 dB 52~58 dB 消费电子主流
12-bit 4096 72 dB 62~70 dB HDR、专业摄影
14-bit 16384 84 dB 72~80 dB 医疗、科研
16-bit 65536 96 dB 80~90 dB 天文、科学级
工程注意:高位深 Raw 数据在 MIPI CSI-2 传输中会显著增加带宽占用。例如 4K@60fps 的 Raw12 数据流带宽需求约为 4K×60×12 = 2.98 Gbps,已接近 MIPI D-PHY 4-lane 的极限。设计时需根据传感器输出位深、分辨率和帧率,提前计算链路带宽余量。

2.4 Raw 数据在 MIPI CSI-2 中的打包方式

MIPI CSI-2 对 Raw 数据的传输采用 像素打包(Pixel Packing) 机制,将多个像素的比特位拼接成整数字节传输。以 Raw10 和 Raw12 为例:

Raw10 打包(4 像素 → 5 字节)

Byte 0: [P0[9:2]]          // 像素0的高8位
Byte 1: [P1[9:2]]          // 像素1的高8位
Byte 2: [P2[9:2]]          // 像素2的高8位
Byte 3: [P3[9:2]]          // 像素3的高8位
Byte 4: [P3[1:0] P2[1:0] P1[1:0] P0[1:0]]  // 4个像素的低2位拼接

Raw12 打包(2 像素 → 3 字节)

Byte 0: [P0[11:4]]         // 像素0的高8位
Byte 1: [P1[11:4]]         // 像素1的高8位
Byte 2: [P1[3:0] P0[3:0]]  // 两个像素的低4位拼接
解包要点:接收端必须根据 Data Type 字段识别打包格式,按位掩码和移位操作还原每个像素的完整值。Raw10 解包时需从 Byte4 中提取 4 个 2-bit 片段,分别拼接到对应像素的高 8 位之后。

Raw8 和 Raw16 不需要打包:Raw8 每个像素占用 1 字节,Raw16 每个像素占用 2 字节(小端序,低字节在前)。Raw14 的打包方式与 Raw10 类似,每 4 个像素打包为 7 字节。

2.5 本章小结

  • Bayer 阵列是单传感器彩色成像的基础,G 像素占 50%,R 和 B 各占 25%。
  • Raw 格式直接存储传感器原始量化值,MIPI CSI-2 支持 Raw8/10/12/14/16 五种位深。
  • 位深每增加 1bit,理论动态范围提升约 6dB,但实际受传感器噪声限制。
  • 打包传输是高位深 Raw 数据在 MIPI 链路上的标准做法,接收端需按对应算法解包。
  • 选择 Raw 格式时需综合考虑图像质量、带宽占用和硬件处理能力三者平衡。