1. RAW 图基础:图像格式定义与色彩阵列

RAW 图像是图像传感器(CMOS / CCD)直接输出的原始数据,未经任何 ISP(图像信号处理)流水线处理。它保留了每个像素点最原始的电荷-数字转换结果,是嵌入式视觉系统中最“真实”的底层数据源。理解 RAW 图的结构,是后续 DMA 传输优化与内存管理调试的前提。

1.1 RAW 图像格式定义

RAW 格式并非单一文件类型,而是一类按像素位深(bit depth)和 Bayer 排列方式组织的裸数据流。常见特征如下:

属性 典型值 说明
位深 8 / 10 / 12 / 14 / 16 bit 每个像素的量化精度;10/12 bit 在嵌入式 ISP 中最常见
数据排列 Bayer 模式 / X-Trans / Quad Bayer 决定每个像素对应的颜色通道
元数据 行有效、帧有效、曝光参数 通常由 sensor 驱动通过 CSI-2 嵌入式行传输
存储格式 packed / unpacked / MIPI RAW 影响 DMA 传输时的对齐与带宽利用率
调试要点:RAW 图没有白平衡、去马赛克、伽马校正等处理。在内存中看到的每个像素值直接对应 sensor 感光单元的电荷量,因此 RAW 数据对噪声、暗电流、坏点非常敏感,调试 DMA 时需注意数据完整性。

1.2 Bayer 阵列模式详解

绝大多数单传感器彩色相机使用 Bayer 滤色阵列。每个 2×2 像素单元包含 1 个红色(R)、2 个绿色(G)、1 个蓝色(B)像素,利用人眼对绿色更敏感的特性分配更多绿色采样点。

四种标准 Bayer 排列模式:

  • RGGB:第一行 R G R G …,第二行 G B G B …(最常用)
  • GBRG:第一行 G B G B …,第二行 R G R G …
  • GRBG:第一行 G R G R …,第二行 B G B G …
  • BGGR:第一行 B G B G …,第二行 G R G R …
工程经验:在 FPGA 或 DSP 中处理 RAW 数据时,必须根据 sensor 数据手册确认 Bayer 起始相位。相位错误会导致后续去马赛克算法产生严重偏色,且 DMA 搬运的地址偏移量也需要相应调整。
四种标准 Bayer 阵列模式(2×2 单元) RGGB R G G B GBRG G B R G GRBG G R B G BGGR B G G R Bayer 阵列关键规则 • 每个 2×2 单元中绿色像素占 2 个(G 通道采样率是 R/B 的 2 倍) • 行与行之间的 Bayer 相位交替:奇数行与偶数行颜色顺序不同 • DMA 传输时需按行 stride 对齐,不能破坏 Bayer 相位连续性

1.3 RAW 与 RGB / YUV 的区别

RAW、RGB、YUV 是图像处理流水线中三个不同阶段的数据表示。理解它们的差异,有助于在 DMA 传输和内存管理时选择正确的数据格式与带宽预算。

对比维度 RAW RGB YUV
数据来源 sensor 直接输出 去马赛克(demosaic)后 色彩空间转换后
每个像素信息 单通道(R/G/B 之一) 三通道(R/G/B 全) 亮度 Y + 色度 UV
数据量(以 1080p 为例) 1920×1080 × 1 × 2B ≈ 4 MB 1920×1080 × 3 × 2B ≈ 12 MB YUV420: 1920×1080 × 1.5 × 2B ≈ 6 MB
ISP 处理阶段 最前端 中端 后端(编码/显示)
DMA 传输特点 行 stride 需对齐 Bayer 相位 三通道连续排列,带宽需求大 Y 平面与 UV 平面分离传输
常见误区:初学者常将 RAW 数据当作灰度图处理。虽然 RAW 每个像素只有单通道值,但它包含的是经过 Bayer 滤色后的特定颜色分量,并非全波段亮度。直接对 RAW 做边缘检测或直方图统计时,必须考虑 Bayer 相位,否则会产生周期性的条纹伪影。
ISP 流水线:RAW → RGB → YUV 数据流 RAW Bayer 阵列 去马赛克 RGB R/G/B 三通道 色彩空间转换 YUV Y + UV 平面 🔍 在 DMA 传输优化中,RAW 阶段数据量最小但相位敏感;RGB 阶段带宽最大;YUV 阶段适合分离平面传输

1.4 RAW 数据在内存中的排列示例

以 4×4 像素、10 bit RGGB 模式为例,RAW 数据在内存中的线性排列如下(每个像素占 2 字节,高 6 位填充 0 或保留):

// 4×4 RGGB RAW 内存布局(行优先)
// 地址偏移:  0   2   4   6   8  10  12  14
// 第0行:     R0  G0  R1  G1  R2  G2  R3  G3
// 第1行:     G4  B0  G5  B1  G6  B2  G7  B3
// 第2行:     R4  G8  R5  G9  R6  G10 R7  G11
// 第3行:     G12 B4  G13 B5  G14 B6  G15 B7

// 注意:每行像素数必须为偶数,否则会破坏 Bayer 相位对齐
// DMA 传输时 stride(行跨度)通常设置为 width * bytes_per_pixel
// 但某些 sensor 要求 stride 对齐到 8 或 16 字节边界
调试技巧:在逻辑分析仪或 FPGA 在线调试中,抓取 DMA 传输的第一个像素和第二个像素,对比其 Bayer 颜色分量,可以快速判断相位是否正确。例如 RGGB 模式下,若连续两个像素都是 R 值,说明地址偏移或 stride 计算有误。

1.5 本章小结

  • RAW 是 sensor 最原始的“单像素单色”数据,每个像素只包含 R/G/B 中的一种分量。
  • Bayer 阵列有四种标准模式,相位错误会导致后续 ISP 处理产生严重偏色。
  • RAW → RGB → YUV 的数据量依次增大,DMA 传输策略需根据阶段特点调整。
  • 内存中 RAW 数据的 stride 对齐和 Bayer 相位连续性,是 DMA 传输效率优化的第一道关卡。