ISP Pipeline 概览:从 Bayer 到 YUV 的三大域与 HDR 融合定位

在深入 HDR 融合算法之前,必须建立对整个 ISP(Image Signal Processor)流水线的全局认知。本章将拆解 ISP 的标准处理流程,明确 HDR 模块在其中的物理位置与逻辑角色,并厘清多帧融合与单帧 WDR 的本质区别。

1. ISP 基本流程:Bayer 域 → RGB 域 → YUV 域

典型的 ISP Pipeline 按照数据域划分为三个主要阶段:Bayer 域、RGB 域和YUV 域。每个域处理特定的图像缺陷,并为后续模块提供标准化的数据格式。

核心原则: 数据在 ISP 中逐级传递,每个域的处理结果直接影响下一域的质量。HDR 融合通常发生在 Bayer 域或 RGB 域的早期阶段,以保留最多的原始信息。
ISP Pipeline 三大域处理流程 ISP Pipeline 三大域处理流程 Bayer 域 原始 RAW 数据 黑电平校正 镜头阴影校正 坏点校正 HDR 多帧融合 RGB 域 去马赛克 白平衡校正 颜色校正矩阵 Gamma 校正 色调映射 (TMO) YUV 域 色彩空间转换 降噪 (NR) 锐化 (Sharp) 边缘增强 编码输出 HDR 多帧融合通常位于 Bayer 域末端;色调映射 (TMO) 位于 RGB 域末端

2. HDR 模块在 ISP 中的位置

HDR 处理并非一个孤立的模块,而是由多帧融合(Multi-Frame Fusion)和色调映射(Tone Mapping)两个子模块协同完成。它们在 ISP Pipeline 中的插入位置决定了算法的复杂度与效果上限。

HDR 子模块 所属域 输入数据 输出数据 主要作用
多帧融合 Bayer 域 多帧不同曝光的 RAW 单帧高动态 RAW 扩展动态范围,保留高光/暗部细节
色调映射 (TMO) RGB 域 高动态 RGB 数据 低动态范围 RGB 将宽动态压缩到显示设备可呈现的范围
实战提示: 在调优过程中,多帧融合阶段的参数(如融合权重、运动检测阈值)直接影响鬼影抑制效果;而色调映射阶段的曲线(如对数映射、自适应映射)决定了最终画面的对比度与自然度。两者需要联合调优,不可割裂。

3. 多帧融合与单帧 WDR 的区别

单帧 WDR(Wide Dynamic Range)与多帧融合是两种截然不同的技术路线。理解它们的差异是选择调优策略的前提。

  • 单帧 WDR(单次曝光 + 像素内 HDR)
    • 原理:在传感器像素内使用双增益或大小光电二极管,一次曝光同时捕获高/低增益信号。
    • 优点:无鬼影、无运动伪影、功耗低、帧率高。
    • 缺点:动态范围扩展有限(通常 100-120dB),信噪比在过渡区较差。
  • 多帧融合(多曝光合成)
    • 原理:连续拍摄 2-3 帧不同曝光时间的 RAW 图像,通过运动对齐与融合算法合成一帧。
    • 优点:动态范围极高(可达 140dB+),信噪比优秀,暗部细节丰富。
    • 缺点:存在鬼影风险,对运动场景敏感,需要额外帧缓存与算力。
多帧融合 vs 单帧 WDR 技术对比 多帧融合 vs 单帧 WDR 技术对比 多帧融合 长曝光帧 短曝光帧 运动对齐 融合输出 单帧 WDR 单次曝光 双增益像素 片上合成 单帧输出 多帧融合需额外帧缓存与运动补偿;单帧 WDR 无鬼影但动态范围受限

4. 关键参数对比表

以下表格从工程实现角度对比两种 HDR 方案的核心指标,帮助调优工程师快速选型。

对比维度 多帧融合 单帧 WDR
动态范围 120-140 dB+ 100-120 dB
鬼影风险 高(需运动检测与补偿) 无
信噪比 (SNR) 优秀(多帧平均降噪) 中等(单帧噪声无法消除)
帧率 降低(需连续拍摄多帧) 正常(单帧输出)
功耗 较高(额外帧缓存与计算) 低(片上合成)
调优复杂度 高(融合权重、运动阈值、去鬼影) 中(增益曲线、过渡区平滑)
适用场景 夜景、高对比度静态场景 运动场景、实时取景、安防监控
调优避坑: 在多帧融合调优中,运动检测阈值设置过严会导致鬼影残留,设置过松则造成运动区域模糊。建议在 Bayer 域融合前先做亚像素级别的运动对齐,并在融合权重中引入置信度图。

5. 实战案例:多帧融合 Pipeline 代码框架

以下是一个简化的多帧融合 ISP 模块初始化与处理流程的伪代码框架,展示了 HDR 模块在 Bayer 域的典型调用顺序。

// 多帧融合 HDR 模块初始化
typedef struct {
    uint8_t  num_frames;          // 融合帧数 (2 或 3)
    uint16_t exposure_ratios[3];  // 曝光比 [1x, 4x, 16x]
    uint8_t  motion_threshold;    // 运动检测阈值 (0-255)
    uint8_t  blend_strength;      // 融合强度 (0-100)
} HDR_Config;

// Bayer 域多帧融合处理函数
void HDR_MultiFrameFusion(
    uint16_t **raw_frames,        // 输入:多帧 RAW 数据
    uint16_t *output_raw,         // 输出:融合后 RAW 数据
    HDR_Config *cfg,
    uint32_t width,
    uint32_t height
) {
    // 1. 帧对齐(基于特征点或光流)
    FrameAlign(raw_frames, cfg->num_frames, width, height);

    // 2. 运动检测与掩码生成
    uint8_t *motion_mask = MotionDetect(raw_frames, cfg->num_frames,
                                        cfg->motion_threshold);

    // 3. 自适应权重计算
    float *weights = ComputeWeights(raw_frames, motion_mask,
                                    cfg->exposure_ratios);

    // 4. 加权融合
    WeightedBlend(raw_frames, output_raw, weights,
                  cfg->num_frames, width, height);

    // 5. 后处理:去噪与细节补偿
    PostProcess(output_raw, width, height);
}
工程要点: 上述代码中的 motion_threshold 是调优中最敏感的全局参数。建议在实验室场景下使用灰度卡与运动转台进行标定,先确定静态场景下的最优融合权重,再逐步引入运动阈值。