HDR 图像处理 - 理解和使用高动态范围
理解动态范围 - 明暗的光谱
动态范围是指图像能够表现的最亮和最暗之间的比率。人眼可以感知约 20 档(stops)的动态范围,而传统的 SDR(标准动态范围)显示器仅能表现约 6-8 档。HDR 技术旨在缩小这一差距,让数字图像更接近人眼所见的真实世界。
在摄影中,动态范围决定了能否同时保留高光和阴影的细节。典型的高动态范围场景包括:逆光人像(人脸暗而背景亮)、室内窗户场景(室内暗而窗外亮)、日落风景(天空亮而地面暗)。SDR 图像在这些场景中必须牺牲高光或阴影的细节。
HDR 图像使用更高的位深(通常 10-16 位而非 8 位)和更宽的亮度范围来存储场景信息。8 位图像每通道 256 级,而 10 位有 1024 级,16 位有 65536 级。更多的级数意味着更平滑的渐变和更丰富的细节。
HDR 图像文件格式 - 按用途选择
不同的 HDR 格式适用于不同的工作流程和用途。
OpenEXR (.exr):电影和视觉特效行业的标准格式。支持 16 位和 32 位浮点数、多通道(深度、法线等)、多层。文件较大但信息最完整,适合后期制作流程。
Radiance HDR (.hdr):较早的 HDR 格式,使用 RGBE 编码(RGB + 共享指数)。文件较小,广泛用于环境贴图和 3D 渲染的光照探针。
HEIF/AVIF with Gain Map:Apple 和 Google 推动的现代方案。在标准 SDR 图像基础上附加一个 Gain Map(增益图),HDR 显示器使用 Gain Map 扩展亮度范围,SDR 显示器直接显示基础图像。向后兼容性极佳。
JPEG XL:支持 HDR 的下一代图像格式,可以无损转码现有 JPEG 并添加 HDR 信息。压缩效率高,但浏览器支持仍有限。
选择建议:Web 分发使用 AVIF/HEIF with Gain Map(兼容性最好);专业后期使用 OpenEXR;3D/游戏使用 Radiance HDR。
色调映射 - 在 SDR 显示器上显示 HDR
色调映射(Tone Mapping)是将 HDR 图像的宽亮度范围压缩到 SDR 显示器可显示范围的过程。这是 HDR 工作流中最关键的步骤之一,直接决定最终图像的视觉效果。
全局色调映射:对所有像素应用相同的映射曲线。简单快速但可能丢失局部对比度。代表算法:Reinhard 色调映射(L_mapped = L / (1 + L))将所有亮度值映射到 0-1 范围。
局部色调映射:根据像素周围区域的亮度调整映射参数。能保留更多局部细节但计算量大,且可能产生光晕伪影。代表算法:Durand-Dorsey 双边滤波方法。
Filmic 色调映射:模拟电影胶片的响应曲线,在高光区域平滑过渡(shoulder)而非硬截断。ACES(Academy Color Encoding System)色调映射是电影行业标准,也被游戏引擎广泛采用。
自适应色调映射:根据图像内容自动选择最佳参数。现代相机和手机的"HDR 模式"本质上就是拍摄多张不同曝光的照片,合并后进行自适应色调映射。
HDR 拍摄技术 - 包围曝光与合并处理
HDR 图像的获取通常通过包围曝光(Exposure Bracketing)实现:以不同曝光值拍摄同一场景的多张照片,然后合并为单张 HDR 图像。
包围曝光设置:通常拍摄 3-7 张,每张相差 1-2 EV。例如 -2EV、0EV、+2EV 三张覆盖约 12 档动态范围。场景动态范围越大,需要的张数越多。使用三脚架确保画面对齐。
合并算法:Debevec 方法通过多张不同曝光的照片恢复场景的真实辐照度图。对每个像素,选择曝光最佳(既不过曝也不欠曝)的照片中的值,加权合并生成 HDR 图像。
对齐与去鬼影:手持拍摄时需要图像对齐(使用特征点匹配)。场景中有运动物体时需要去鬼影处理(检测并排除运动区域,仅使用参考帧的数据)。
单张 HDR:现代手机使用计算摄影技术,从单次快门(或极短时间内的多帧)生成 HDR 效果。通过 AI 模型预测过曝和欠曝区域的细节,无需传统的包围曝光。
Web 上的 HDR 图像 - 浏览器与 CSS 支持现状
Web 平台对 HDR 内容的支持正在快速发展,但仍存在碎片化问题。
CSS Color Level 4:引入了 color(display-p3 1 0 0) 语法,允许指定超出 sRGB 色域的颜色。支持 Display P3、Rec.2020 等宽色域。现代浏览器已广泛支持。
HDR 图像显示:带有 Gain Map 的 AVIF/HEIF 图像在 HDR 显示器上会自动以扩展亮度显示。Safari 对 Apple 的 Gain Map HDR 支持最好;Chrome 正在跟进 AVIF HDR 支持。
Canvas 和 WebGL:Canvas 2D 上下文支持 colorSpace: 'display-p3' 选项,允许在宽色域中进行像素操作。WebGL 支持浮点纹理,可以处理 HDR 数据。
媒体查询:@media (dynamic-range: high) 检测用户是否使用 HDR 显示器;@media (color-gamut: p3) 检测宽色域支持。可以据此提供不同质量的图像资源。
当前建议:使用带 Gain Map 的格式确保向后兼容。SDR 显示器看到正常图像,HDR 显示器自动获得增强效果。不要强制所有用户下载 HDR 数据。
实用 HDR 图像处理 - 工具与工作流
HDR 图像处理的实用工具和推荐工作流。
桌面工具:Adobe Lightroom 和 Camera Raw 内置 HDR 合并和色调映射功能;Luminance HDR 是开源的 HDR 处理工具,支持多种色调映射算法;darktable 提供完整的 HDR 工作流支持。
命令行工具:ImageMagick 支持 HDR 格式的读写和基本处理;FFmpeg 可以处理 HDR 视频和提取 HDR 帧;libvips 提供高性能的 HDR 图像处理能力。
编程库:OpenCV 提供完整的 HDR 处理流水线(包围曝光合并、色调映射、对齐);Python 的 imageio 库支持 EXR 和 HDR 格式的读写。
推荐工作流:
- 拍摄:使用包围曝光或 RAW 格式获取最大动态范围
- 合并:将多张曝光合并为 32 位 HDR 图像
- 编辑:在 HDR 空间中进行颜色和曝光调整
- 输出:根据目标平台选择色调映射参数和输出格式
- Web 分发:导出带 Gain Map 的 AVIF/HEIF,确保 SDR 兼容性