1. HDR 技术概述
1.1 HDR 定义与核心概念
HDR(High Dynamic Range,高动态范围) 是一种通过多帧曝光融合来扩展图像亮度记录范围的技术。与标准动态范围(SDR)图像相比,HDR 能够同时保留场景中最亮区域(如天空、灯光)和最暗区域(如阴影、暗部)的细节,避免过曝或欠曝。
| 对比维度 | SDR(标准动态范围) | HDR(高动态范围) |
|---|---|---|
| 亮度范围 | 0~255(8-bit) | 0~1023(10-bit)或更高 |
| 动态范围 | 约 6~8 档 | 12~20 档 |
| 暗部细节 | 易丢失(噪点淹没) | 保留完整纹理 |
| 亮部细节 | 易过曝(高光裁切) | 保留高光层次 |
| 典型场景 | 室内均匀光照 | 逆光、日落、夜景 |
关键指标: 动态范围每增加 1 档,传感器能记录的亮度差异翻倍。HDR 多帧合成通常将动态范围从 8 档扩展到 14~18 档,接近人眼感知能力(约 20 档)。
1.2 多帧合成原理
多帧 HDR 合成的核心思想是:用不同曝光时间的多张图像,分别捕获场景中不同亮度区间的信息,再通过算法融合成一张高动态范围图像。典型流程如下:
- 多帧采集: 相机连续拍摄 3~5 帧,曝光时间分别为短(EV-2)、中(EV0)、长(EV+2)。
- 对齐与配准: 消除手持抖动或物体运动造成的像素偏移,使用光流或特征匹配。
- 权重映射: 根据像素亮度计算每帧的融合权重——短帧贡献高光区域,长帧贡献暗部区域。
- 融合合成: 加权平均或拉普拉斯金字塔融合,生成 10-bit 或 12-bit 的 HDR 图像。
- 色调映射(Tone Mapping): 将 HDR 宽动态范围压缩到 8-bit 显示设备可呈现的范围,同时保留视觉对比度。
工程注意: 多帧合成的瓶颈通常不在算法,而在 帧间对齐精度 和 运动鬼影消除。HAL 层需要提供精确的帧时间戳和传感器增益参数,才能保证合成质量。
1.3 HDR 在移动摄影中的价值
移动设备受限于传感器尺寸和镜头光圈,单帧动态范围通常只有 6~8 档。HDR 多帧合成技术为移动摄影带来了以下核心价值:
- 逆光场景可用性提升: 人物面部不再死黑,背景天空不过曝,一次拍摄即可获得可用照片。
- 夜景细节增强: 长帧捕获暗部纹理,短帧抑制高光溢出,合成后噪点更少、细节更丰富。
- 算法替代硬件: 无需机械光圈或双增益传感器,通过软件即可实现接近专业相机的动态范围。
- 实时预览与抓拍: 现代 ISP 和 HAL 层支持零快门延迟(ZSL)HDR,用户按下快门的瞬间即可完成多帧合成。
| 应用场景 | 无 HDR 效果 | 有 HDR 效果 | 提升幅度 |
|---|---|---|---|
| 逆光人像 | 面部欠曝,背景过曝 | 面部清晰,天空有云层细节 | 动态范围 +6~8 档 |
| 室内窗边 | 窗外一片白,室内偏暗 | 窗外景物可见,室内纹理保留 | 高光细节恢复 80% |
| 夜景灯光 | 路灯过曝成光晕,暗部噪点严重 | 灯箱文字可读,暗部纹理清晰 | 信噪比提升 10~15 dB |
| 大光比风景 | 亮部或暗部必有一方丢失 | 全亮度区间细节完整 | 可用照片率提升 60% |
HAL 层注意事项: 多帧 HDR 对帧间隔、曝光同步、增益一致性要求极高。如果 HAL 层返回的帧时间戳抖动超过 1ms,或者不同帧的模拟增益不一致,合成结果会出现亮度闪烁或鬼影。建议在 HAL 层实现 帧序列 ID 标记 和 曝光参数锁定 机制。
1.4 HDR 在 Camera HAL 中的位置
在 Android Camera HAL 架构中,HDR 多帧合成涉及以下关键模块:
- Sensor HAL: 控制曝光时间、模拟/数字增益、帧率,输出 RAW 或 YUV 帧。
- ISP HAL: 执行 Bayer 去马赛克、白平衡、降噪,输出 YUV 帧供合成。
- HAL 3.x 框架: 通过
capture_request下发多帧请求,通过capture_result返回多帧数据。 - 后处理引擎: 通常运行在 CPU/GPU/DSP 上,执行对齐、融合、色调映射。