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 搬运的地址偏移量也需要相应调整。
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 相位,否则会产生周期性的条纹伪影。
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 传输效率优化的第一道关卡。