HDR 原理和实践
动态范围的概念
动态范围(dynamic range)描述正在拍摄的场景的亮度范围,或给定数码相机或胶片可以捕捉的亮度范围的限制,用最高亮度和最低亮度的比值来表示,这里给出一些常见的动态范围:
- 现实世界的总动态范围 80,000,000:1
- 人类视觉系统的总动态范围 100,000,000:1
- 相机的动态范围相对来说要小得多
由于动态范围的数值太大,因此动态范围的单位一般用比值的对数来表示,称为档(stops),可以表示为:
HDR (High Dynamic Range)和色调映射(tone mapping)是用来解决动态范围问题的技术
- HDR 通过捕捉和合成多个曝光不同的图像来扩展相机的动态范围,以表现真实世界的高动态范围场景
- 解决传感器动态范围小的问题
- 色调映射是指将 HDR 成像结果中的高动态范围信息映射到低动态范围的显示器上
- 解决显示器动态范围小的问题
HDR 合成算法分类
多帧异曝光 HDR
这种方法基于包围曝光(Exposure Bracketing),即拍摄一系列曝光不同的照片,每张照片的曝光值之间相差一定的曝光值,将这些照片合成为 HDR 图片,这样暗部和亮部都会包含较丰富的细节。
多帧同曝光 HDR:HDR+
包围曝光的缺点是拍摄时间较长,特别是过曝的照片,拍摄期间如果有运动的物体或者使用手持相机拍摄,容易出现多张照片无法对齐的现象。
HDR+ 源自谷歌论文《Burst photography for high dynamic range and low-light imaging on mobile cameras》,HDR+ 的核心思路为捕获曝光不足的帧,对齐和合并这些帧以产生高比特深度的单个中间图像,并对该图像进行色调映射以产生高分辨率照片。
色调映射
色调映射可以分为全局色调映射和局部色调映射:
- 全局色调映射
- 对图像中的所有像素使用同样的映射函数
- 相同的输入像素值会被确定地映射到一个相同的输出像素值
- 可以用查表法加速,适合摄像机类的实时视频应用
- 局部色调映射
- 对空间位置不同的像素采用不同的映射函数
- 对于同一个输入像素值,由于其空间位置不同或者其周围像素值不同,映射的输出像素值也不同
全局色调映射
现代 CMOS 数模转换得到的有效色深可以有 14 bits,如果直接存储下来,会消耗大量空间。我们可以利用人眼的生理特性对这些信息做压缩。
史蒂文斯幂律
史蒂文斯幂律(Stevens's power law)是心理物理学中描述感知刺激强度和主观感受之间的关系的定律。该定律的一般形式是:
其中 \(I\) 是以物理单位(能量、重量、压力等)表示的刺激强度或强度,\(\psi(I)\) 是由刺激引起的感觉的大小,\(\alpha\) 是常数,取决于刺激或感觉方式的类型,k 是经验常数。
几种常见的物理刺激在史蒂文斯幂律下的表现如图所示:
史蒂文斯幂律告诉我们人眼对亮度的感知不是线性的,人眼对较暗的光线更为敏感,如果直接线性存储亮度,效果如下图所示,最高一档动态范围占据的比特范围是最多的,依次递减,但实际上对人眼来说,各档包含的信息量是相同的。
因此可以尝试对原始信息做编码压缩亮部的空间,拓展暗部的空间,常见的 HDR 编码方式有 Gamma 编码和 Log 编码。
Gamma 编码
伽马编码对图像信息做如下的非线性变换:
其中 \({\gamma}\) 是伽马值,sRGB 就使用伽马编码,其伽马值约等于 2.2。
Rec.709 定义了用于高清电视和视频的色彩空间标准,它规定了光电传递函数(OETF),即相机如何将线性场景光编码为非线性电信号值:
V 是非线性电信号值,L 是线性场景亮度,也就是说 OETF 近似等于伽马 1/2.2。
如下图所示,OETF 伽马编码存储的亮度各档所占的范围分布更均匀,且更符合人眼的生物特性。
有趣的是,CRT 显示器的一个电子特性是光强和电压之间的关系并不是线性的,而且表现出的关系也符合伽马编码,利用这个特性 sRGB 图像可以不做解码直接在 CRT 显示器上输出。
Log 编码
虽然 Rec.709 规定交付成片时需要使用伽马编码,但拍摄素材时可以使用更高效的编码,比如 Log 编码。Log 编码记录原始亮度的对数值。
电影机一般采用这种编码方式,Log 编码的特点是拍摄的视频是灰蒙蒙的,因此需要在后期做调色,以取得更好的显示效果。
各家都有自己的 Log 标准,采用不同的 Log 曲线,这些曲线是针对自家相机和传感器微调过的,比如:
- Sony:S-Log
- Canon:C-Log
- Panasonic:V-Log
- DJI:D-Log
从上图中可以看到,使用 Log 曲线能在达到饱和之前存储 800%-3500% 的动态范围。
局部色调映射
待补充。
Photoshop 中的 HDR Pro
利用 Photoshop 中的 HDR Pro 功能可以将多张不同曝光的照片合成为 HDR 图像。
拍摄用于 HDR 的照片
拍摄用于 HDR 的照片时,需要注意这些事项:
- 将相机固定在三角架上
- 拍摄足够多的照片以覆盖场景的整个动态范围
- 最少应拍摄三张照片
- 改变快门速度以获得不同的曝光度
- 调整光圈会使每次曝光的景深发生变化,可能导致图像品质降低
- 调整 ISO 或光圈还可能导致图像中出现杂色或晕影
- 一般来说,不要使用相机的自动包围曝光功能,因为曝光度的变化通常非常小
- 照片的曝光度差异应在一两个 EV 级
- 不要改变光照条件
- 例如,在这次曝光时不使用闪光灯,而在下次曝光时却使用闪光灯
- 确保场景中没有移动的物体
合并 HDR 图像的步骤
- 选择文件>自动>合并到 HDR Pro
- 浏览添加一组图像
- 如果手持相机拍摄图像,选择尝试自动对齐源图像
- 弹出合并到 HDR Pro 对话框,显示源图像的缩览图以及合并结果的预览
- 在预览的右上角,为合并后的图像选择一个位深度
- 如果希望合并后的图像存储 HDR 图像的全部动态范围,请选择 32 位
色调映射
HDR 合成预览时,如果选择 16/8 位,需要进行色调映射来将 32 位的动态范围压缩到 16/8 位
32 位 HDR 图像可以通过图像>模式>16 位通道/8 位通道来做色调映射转换成 16/8 位图像
Photoshop 中提供几种色调映射方法
- 局部适应
- 高光压缩
- 色调均化直方图
- 曝光度和灰度系数
曝光度和灰度系数
- 允许手动调整 HDR 图像的亮度和对比度
- 移动曝光度滑块可以调整增益
- 移动灰度系数(gamma)滑块可以调整对比度
色调均化直方图
- 在压缩 HDR 图像动态范围的同时,尝试保留一部分对比度
- 色调均化直方图没有参数
高光压缩
- 压缩 HDR 图像中的高光值,使其位于 8 位/通道或 16 位/通道的图像文件的亮度值范围内
- 高光压缩没有参数
局部适应
- 通过调整图像中的局部亮度区域来调整 HDR 色调
- 局部适应参数
- 边缘光
- 半径指定局部亮度区域的大小
- 强度指定两个像素的色调值相差多大时,它们属于不同的亮度区域
- 色调和细节
- 灰度系数设置为 1.0 时动态范围最大;较低的设置会加重中间调,而较高的设置会加重高光和阴影
- 曝光度值反映光圈大小。拖动细节滑块可以调整锐化程度,拖动阴影和高光滑块可以使这些区域变亮或变暗
- 颜色
- 自然饱和度可调整细微颜色强度,同时尽量不剪切高度饱和的颜色
- 饱和度调整从 –100(单色)到 +100(双饱和度)的所有颜色的强度
- 色调曲线
- 在直方图上显示一条可调整的曲线,从而显示原始的 32 位 HDR 图像中的明亮度值
- 横轴的红色刻度线以一个 EV(约为一级光圈)为增量
- 边缘光
参考材料
本文来自博客园,作者:路过的摸鱼侠,转载请注明原文链接:https://www.cnblogs.com/ljx-null/p/17484635.html