4. RAW图数据格式:Bayer Pattern详解、RAW10/RAW12/RAW14格式差异、数据存储与对齐

4.1 Bayer Pattern 详解

Bayer Pattern 是单传感器彩色成像最核心的底层数据组织方式。由于图像传感器每个像素只能感知光的强度(单色),无法直接区分颜色,因此需要在像素表面覆盖一层彩色滤光阵列(CFA),让每个像素只通过红、绿、蓝中的一种分量。Bayer Pattern 是最经典的 CFA 排列方式,由 Bryce Bayer 于 1976 年提出。

标准 Bayer Pattern 的基本单元为 2×2 像素块,包含 1 个红色(R)、2 个绿色(G)、1 个蓝色(B)像素。人眼对绿色最敏感,因此绿色通道采样率是红蓝的两倍。

关键概念: 原始 RAW 数据中每个像素仅包含一种颜色分量,必须通过 去马赛克(Demosaic) 算法插值出全彩色图像。Bayer Pattern 的排列方式直接影响 ISP 流水线中 Demosaic、去噪、锐化等模块的算法设计。
Bayer Pattern 基本单元与常见变体 标准 BGGR B G G R 标准 RGGB R G G B 标准 GBRG G B R G 标准 GRBG G R B G Bayer Pattern 命名规则: • 四字母表示 2×2 块中左上、右上、左下、右下的颜色顺序。 • 海思平台默认使用 BGGR 排列,但可通过寄存器配置为 RGGB/GBRG/GRBG。 • 调试时需确认 sensor 输出的实际 Pattern,否则 Demosaic 会产生严重偏色。

4.2 RAW10 / RAW12 / RAW14 格式差异

RAW 数据的位深度决定了每个像素的量化精度。海思平台常见的 RAW 格式包括 RAW8、RAW10、RAW12、RAW14,其中 RAW10/RAW12/RAW14 是主流。位深度越高,动态范围越大,但数据量也成倍增加。

格式 每像素位数 每像素存储占用 典型动态范围 海思平台支持 典型应用场景
RAW8 8 bit 1 字节 ~48 dB 是 低端摄像头、预览模式
RAW10 10 bit 1.25 字节(packed) ~60 dB 是 主流安防、车载摄像头
RAW12 12 bit 1.5 字节(packed) ~72 dB 是 高动态场景、专业监控
RAW14 14 bit 1.75 字节(packed) ~84 dB 是(部分型号) 超高动态、工业/医疗成像
实战提示: 海思平台 ISP 内部处理精度通常为 14 bit 或更高。即使 sensor 输出 RAW10,ISP 也会在内部扩展为更高位宽处理,避免精度损失。调试时建议优先使用 sensor 原生最高位宽输出,以获得最佳画质。

4.3 数据存储与对齐

RAW 数据在内存中的存储方式直接影响带宽利用率和 ISP 读取效率。海思平台支持两种主流存储模式:Packed(打包) 和 Unpacked(解包/对齐)。

4.3.1 Packed 模式

Packed 模式将多个像素的位数据连续排列,不留空位,以最小化存储空间。例如 RAW10 的 Packed 格式:每 4 个像素(共 40 bit)打包为 5 字节。

// RAW10 Packed 存储示例(4 像素打包为 5 字节)
// 像素0 [9:0] + 像素1 [9:0] + 像素2 [9:0] + 像素3 [9:0]
// 内存布局:
// Byte0: Pixel0[7:0]
// Byte1: Pixel1[7:0]
// Byte2: Pixel2[7:0]
// Byte3: Pixel3[7:0]
// Byte4: Pixel3[9:8] | Pixel2[9:8] | Pixel1[9:8] | Pixel0[9:8]
//         [7:6]        [5:4]        [3:2]        [1:0]

4.3.2 Unpacked 模式

Unpacked 模式每个像素占用固定字节数(如 RAW10 占用 2 字节,高 6 位填充 0),以对齐到字节边界。虽然浪费存储空间,但便于 CPU/DSP 直接访问和 SIMD 优化。

// RAW10 Unpacked 存储示例(每像素 2 字节,高 6 位填充 0)
// 内存布局:
// Byte0: Pixel0[7:0]
// Byte1: 0 | 0 | 0 | 0 | 0 | 0 | Pixel0[9:8]
//         [7:6] [5:4] [3:2] [1:0]
RAW10 存储模式对比:Packed vs Unpacked Packed 模式(4像素 → 5字节) P0[7:0] P1[7:0] P2[7:0] P3[7:0] P3[9:8] P2[9:8] P1[9:8] P0[9:8] Byte0 Byte1 Byte2 Byte3 Byte4 Unpacked 模式(每像素2字节,高6位填充0) P0[7:0] 00 | P0[9:8] P1[7:0] 00 | P1[9:8] Byte0 Byte1 Byte2 Byte3 海思平台建议: 对于高帧率场景(如 4K@60fps),推荐使用 Packed 模式以降低 DDR 带宽占用;对于需要 CPU/DSP 频繁访问像素的场景,推荐使用 Unpacked 模式以简化寻址。

4.4 海思平台 RAW 数据对齐要求

海思 ISP 模块对 RAW 数据有严格的对齐约束,不满足对齐条件会导致 ISP 处理异常或性能下降。

  • 行对齐(Line Alignment): 每行数据的起始地址必须 16 字节对齐(部分型号要求 32 字节对齐)。
  • 宽度对齐(Width Alignment): 图像宽度(像素数)必须为 2 的整数倍(Bayer Pattern 2×2 块要求),部分 ISP 通道要求 4 或 8 对齐。
  • Buffer 对齐: 帧 Buffer 的起始物理地址必须 256 字节对齐,以满足 DMA 传输要求。
  • Stride(跨度): 每行实际占用的字节数必须向上对齐到 16 字节。例如 RAW10 Packed 模式下,宽度 1920 像素的行实际占用字节数计算如下:
// RAW10 Packed 行跨度计算示例
// 宽度 = 1920 像素
// 每行原始字节数 = 1920 * 10 / 8 = 2400 字节
// 对齐到 16 字节:stride = ((2400 + 15) / 16) * 16 = 2400 → 已对齐
// 若宽度 = 1922 像素
// 每行原始字节数 = 1922 * 10 / 8 = 2402.5 → 向上取整 2403 字节
// 对齐到 16 字节:stride = ((2403 + 15) / 16) * 16 = 2416 字节
常见踩坑点: 调试时如果图像出现条纹、错位或颜色异常,首先检查 RAW 数据的对齐参数是否与 ISP 配置一致。特别是从第三方 sensor 接入时,务必确认 sensor 输出的行跨度(stride)与海思 ISP 期望的 stride 匹配。

4.5 不同 RAW 格式的带宽与存储对比

下表以 1920×1080@60fps 为例,对比不同 RAW 格式的带宽和存储需求,帮助调试时评估系统瓶颈。

格式 每像素位数 每帧大小(Packed) 带宽需求(60fps) 相对 RAW8 倍数
RAW8 8 bit ~2.07 MB ~124 MB/s 1.0x
RAW10 10 bit ~2.59 MB ~155 MB/s 1.25x
RAW12 12 bit ~3.11 MB ~186 MB/s 1.5x
RAW14 14 bit ~3.62 MB ~217 MB/s 1.75x
优化建议: 在带宽受限的系统中(如多路拼接或多 sensor 输入),可考虑使用 RAW10 替代 RAW12,配合海思 ISP 的 14 bit 内部处理精度,在画质损失极小的情况下节省 25% 的带宽。对于静态场景,还可启用海思的 RAW 压缩功能(如 Lossless RAW Compression),进一步降低存储和带宽需求。

4.6 本章小结

  • Bayer Pattern 是 RAW 数据的基础组织方式,海思平台默认 BGGR,支持通过寄存器切换。
  • RAW10/RAW12/RAW14 的位深度决定了动态范围和带宽需求,选择时需平衡画质与系统资源。
  • Packed 模式节省空间但访问复杂,Unpacked 模式便于处理但浪费带宽,需根据场景选择。
  • 海思平台对 RAW 数据有严格的对齐约束(行对齐、宽度对齐、Buffer 对齐),调试时必须确认。
  • 带宽计算是 ISP 系统设计的基础,建议在项目初期就根据 sensor 输出格式评估 DDR 带宽余量。