3. ISP Pipeline 概述:从 RAW 到 YUV 的典型处理流程

图像信号处理器(ISP)是 Camera 驱动与图像质量的核心引擎。原始传感器输出的 RAW 数据必须经过一系列复杂的信号处理模块,才能转换为人类视觉可接受的 YUV 或 RGB 图像。理解这条 Pipeline 中每个模块的功能、数据流以及 AWB(自动白平衡)与 HDR(高动态范围)模块的精确位置,是进行协同调试的前提。

3.1 典型 ISP Pipeline 模块与数据流

一个标准的 ISP Pipeline 通常遵循“传感器 RAW → 前端预处理 → 后端色彩处理 → YUV 输出”的架构。下表列出了从 RAW 到 YUV 的关键模块及其核心功能:

阶段 模块名称 核心功能 输入/输出格式
前端预处理 BLC(黑电平校正) 减去传感器暗电流偏移,恢复黑电平基准 RAW → RAW
DPC(坏点校正) 检测并插值修复传感器死点/亮点 RAW → RAW
LSC(镜头阴影校正) 补偿镜头边缘亮度衰减与色彩偏移 RAW → RAW
核心处理 AWB(自动白平衡) 估计光源色温,调整 R/G/B 增益使白色物体还原为白 RAW → RAW
HDR(高动态范围) 多帧合成或单帧 Tone Mapping,扩展动态范围 RAW/Linear → RAW/Linear
Demosaic(去马赛克) 将 Bayer 模式插值重建为全分辨率 RGB RAW → RGB
后端色彩处理 CCM(色彩校正矩阵) 将传感器 RGB 映射到标准色彩空间(如 sRGB) RGB → RGB
Gamma(伽马校正) 非线性编码,适配显示设备亮度响应 RGB → RGB
YUV 转换 将 RGB 转换为 YUV(亮度+色度)格式 RGB → YUV
调试要点: AWB 与 HDR 模块在 Pipeline 中的相对顺序直接影响最终图像质量。AWB 通常在 HDR 合成之前或之后,取决于 ISP 架构是“先 AWB 后 HDR”还是“先 HDR 后 AWB”。两种顺序对色彩还原和动态范围扩展有不同的影响,需要根据传感器特性和场景进行选择。

3.2 AWB 与 HDR 模块在 Pipeline 中的精确位置

为了更直观地展示 AWB 与 HDR 在整体流程中的位置,下图绘制了一个典型的 ISP Pipeline 架构图,其中标注了关键模块的串联关系:

ISP Pipeline 架构图:AWB 与 HDR 位置 ISP Pipeline 典型架构:AWB 与 HDR 模块位置 传感器 RAW 前端预处理 BLC / DPC / LSC AWB 白平衡增益 HDR 多帧/ToneMap Demosaic Bayer → RGB 后端色彩处理 CCM / Gamma / 色彩增强 YUV 输出 YUV 4:2:0 / 4:2:2 图例说明: • 蓝色节点:输入/输出数据格式(RAW / YUV) • 青色节点:预处理与后处理模块组 • 红色节点(AWB):自动白平衡模块,位于 HDR 之前(典型顺序) • 紫色节点(HDR):高动态范围处理模块,位于 AWB 之后、Demosaic 之前 • 橙色节点:Demosaic 模块,将 RAW 转换为 RGB
架构解读: 上图展示的是“先 AWB 后 HDR”的典型顺序。在这种架构中,AWB 首先在 RAW 域对白平衡进行校正,然后 HDR 模块对校正后的数据进行动态范围扩展。这种顺序的优势在于 HDR 处理的是色彩已校正的数据,避免了 HDR 合成后出现色偏;但缺点是 HDR 的 Tone Mapping 可能会放大 AWB 的增益噪声,需要协同调优。

3.3 AWB 与 HDR 的两种典型位置关系对比

在实际的 ISP 设计中,AWB 与 HDR 的位置并非固定不变。下表对比了两种主流架构的差异:

架构类型 处理顺序 优势 劣势 适用场景
先 AWB 后 HDR RAW → AWB → HDR → Demosaic HDR 处理色彩已校正数据,避免色偏;AWB 统计更准确 HDR Tone Mapping 可能放大 AWB 增益噪声;需要 AWB 与 HDR 增益协同 多帧 HDR、高精度色彩场景
先 HDR 后 AWB RAW → HDR → AWB → Demosaic HDR 处理原始数据,保留最大动态范围;AWB 可补偿 HDR 引入的色彩偏移 HDR 合成后可能引入色偏,增加 AWB 校正负担;AWB 统计受 HDR 影响 单帧 HDR(DOL)、低噪声传感器
调试陷阱: 在“先 HDR 后 AWB”架构中,如果 HDR 的 Tone Mapping 曲线是非线性的,会直接改变 R/G/B 通道的相对比例,导致 AWB 统计失效。此时必须将 HDR 的 Tone Mapping 曲线参数传递给 AWB 模块进行补偿,否则会出现严重的色偏问题。

3.4 从 RAW 到 YUV 的完整数据流示例

以下是一个简化的代码示例,展示了 ISP Pipeline 中 AWB 与 HDR 模块的调用顺序(伪代码):

// ISP Pipeline 主流程(伪代码)
void isp_pipeline_process(RAW_Image *raw_input, YUV_Image *yuv_output) {
    // 1. 前端预处理
    blc_correction(raw_input);          // 黑电平校正
    dpc_correction(raw_input);          // 坏点校正
    lsc_correction(raw_input);          // 镜头阴影校正

    // 2. AWB 白平衡校正(在 RAW 域)
    awb_stats_t awb_stats;
    awb_calculate_stats(raw_input, &awb_stats);  // 统计 R/G/B 分量
    awb_gains_t gains = awb_estimate_gains(&awb_stats); // 估计色温并计算增益
    awb_apply_gains(raw_input, &gains);            // 应用白平衡增益

    // 3. HDR 高动态范围处理
    hdr_params_t hdr_params;
    hdr_params.tone_curve = generate_tone_curve(&gains); // 根据 AWB 增益调整 Tone Curve
    hdr_process(raw_input, &hdr_params);               // 多帧合成或 Tone Mapping

    // 4. Demosaic 去马赛克
    RGB_Image rgb_image;
    demosaic(raw_input, &rgb_image);  // Bayer → RGB

    // 5. 后端色彩处理
    ccm_apply(&rgb_image, ccm_matrix);  // 色彩校正矩阵
    gamma_correction(&rgb_image);       // 伽马校正

    // 6. 转换为 YUV 输出
    rgb_to_yuv(&rgb_image, yuv_output);
}
协同调试关键点: 注意代码中 hdr_params.tone_curve = generate_tone_curve(&gains); 这一行。在实际调试中,AWB 的增益值必须传递给 HDR 模块,用于动态调整 Tone Mapping 曲线,避免 HDR 处理破坏白平衡。这是 AWB 与 HDR 协同调试的核心接口之一。

3.5 本章小结

  • ISP Pipeline 核心流程: RAW → 前端预处理(BLC/DPC/LSC)→ AWB → HDR → Demosaic → 后端色彩处理(CCM/Gamma)→ YUV 输出。
  • AWB 位置: 通常在 RAW 域、HDR 之前,负责色温估计与白平衡增益调整。
  • HDR 位置: 在 AWB 之后、Demosaic 之前,负责动态范围扩展。
  • 两种架构: “先 AWB 后 HDR” 与 “先 HDR 后 AWB” 各有优劣,需根据传感器和场景选择。
  • 协同接口: AWB 增益必须传递给 HDR 模块,用于 Tone Mapping 曲线调整,避免色偏。