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 架构图,其中标注了关键模块的串联关系:
架构解读: 上图展示的是“先 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 曲线调整,避免色偏。