HDR 原理和实践

动态范围的概念

动态范围(dynamic range)描述正在拍摄的场景的亮度范围,或给定数码相机或胶片可以捕捉的亮度范围的限制,用最高亮度和最低亮度的比值来表示,这里给出一些常见的动态范围:

  • 现实世界的总动态范围 80,000,000:1
  • 人类视觉系统的总动态范围 100,000,000:1
  • 相机的动态范围相对来说要小得多

由于动态范围的数值太大,因此动态范围的单位一般用比值的对数来表示,称为档(stops),可以表示为:

\[stops=log_2\frac{\text{the whitest whites}}{\text{the blackest blacks}} \]

HDR (High Dynamic Range)和色调映射(tone mapping)是用来解决动态范围问题的技术

  • HDR 通过捕捉和合成多个曝光不同的图像来扩展相机的动态范围,以表现真实世界的高动态范围场景
    • 解决传感器动态范围小的问题
  • 色调映射是指将 HDR 成像结果中的高动态范围信息映射到低动态范围的显示器上
    • 解决显示器动态范围小的问题

HDR 合成算法分类

多帧异曝光 HDR

这种方法基于包围曝光(Exposure Bracketing),即拍摄一系列曝光不同的照片,每张照片的曝光值之间相差一定的曝光值,将这些照片合成为 HDR 图片,这样暗部和亮部都会包含较丰富的细节。

image

多帧同曝光 HDR:HDR+

包围曝光的缺点是拍摄时间较长,特别是过曝的照片,拍摄期间如果有运动的物体或者使用手持相机拍摄,容易出现多张照片无法对齐的现象。

HDR+ 源自谷歌论文《Burst photography for high dynamic range and low-light imaging on mobile cameras》,HDR+ 的核心思路为捕获曝光不足的帧,对齐和合并这些帧以产生高比特深度的单个中间图像,并对该图像进行色调映射以产生高分辨率照片。

image

色调映射

色调映射可以分为全局色调映射和局部色调映射:

  • 全局色调映射
    • 对图像中的所有像素使用同样的映射函数
    • 相同的输入像素值会被确定地映射到一个相同的输出像素值
    • 可以用查表法加速,适合摄像机类的实时视频应用
  • 局部色调映射
    • 对空间位置不同的像素采用不同的映射函数
    • 对于同一个输入像素值,由于其空间位置不同或者其周围像素值不同,映射的输出像素值也不同

全局色调映射

现代 CMOS 数模转换得到的有效色深可以有 14 bits,如果直接存储下来,会消耗大量空间。我们可以利用人眼的生理特性对这些信息做压缩。

史蒂文斯幂律

史蒂文斯幂律(Stevens's power law)是心理物理学中描述感知刺激强度和主观感受之间的关系的定律。该定律的一般形式是:

\[\psi(I) = kI^\alpha \]

其中 \(I\) 是以物理单位(能量、重量、压力等)表示的刺激强度或强度,\(\psi(I)\) 是由刺激引起的感觉的大小,\(\alpha\) 是常数,取决于刺激或感觉方式的类型,k 是经验常数。

几种常见的物理刺激在史蒂文斯幂律下的表现如图所示:

image

史蒂文斯幂律告诉我们人眼对亮度的感知不是线性的,人眼对较暗的光线更为敏感,如果直接线性存储亮度,效果如下图所示,最高一档动态范围占据的比特范围是最多的,依次递减,但实际上对人眼来说,各档包含的信息量是相同的。

image

因此可以尝试对原始信息做编码压缩亮部的空间,拓展暗部的空间,常见的 HDR 编码方式有 Gamma 编码和 Log 编码。

Gamma 编码

伽马编码对图像信息做如下的非线性变换:

\[V_{out}=AV_{in}^{\frac{1}{\gamma}} \]

其中 \({\gamma}\) 是伽马值,sRGB 就使用伽马编码,其伽马值约等于 2.2。

Rec.709 定义了用于高清电视和视频的色彩空间标准,它规定了光电传递函数(OETF),即相机如何将线性场景光编码为非线性电信号值:

\[\begin{equation} V=\left\{ \begin{array}{rcl} &4.500L & & L < 0.018\\ &1.099L^{0.45} - 0.099 & & L \ge 0.018 \end{array} \right. \end{equation} \]

V 是非线性电信号值,L 是线性场景亮度,也就是说 OETF 近似等于伽马 1/2.2。

如下图所示,OETF 伽马编码存储的亮度各档所占的范围分布更均匀,且更符合人眼的生物特性。

image

有趣的是,CRT 显示器的一个电子特性是光强和电压之间的关系并不是线性的,而且表现出的关系也符合伽马编码,利用这个特性 sRGB 图像可以不做解码直接在 CRT 显示器上输出。

image

Log 编码

虽然 Rec.709 规定交付成片时需要使用伽马编码,但拍摄素材时可以使用更高效的编码,比如 Log 编码。Log 编码记录原始亮度的对数值。

电影机一般采用这种编码方式,Log 编码的特点是拍摄的视频是灰蒙蒙的,因此需要在后期做调色,以取得更好的显示效果。

各家都有自己的 Log 标准,采用不同的 Log 曲线,这些曲线是针对自家相机和传感器微调过的,比如:

  • Sony:S-Log
  • Canon:C-Log
  • Panasonic:V-Log
  • DJI:D-Log

image

从上图中可以看到,使用 Log 曲线能在达到饱和之前存储 800%-3500% 的动态范围。

局部色调映射

待补充。

Photoshop 中的 HDR Pro

利用 Photoshop 中的 HDR Pro 功能可以将多张不同曝光的照片合成为 HDR 图像。

拍摄用于 HDR 的照片

拍摄用于 HDR 的照片时,需要注意这些事项:

  • 将相机固定在三角架上
  • 拍摄足够多的照片以覆盖场景的整个动态范围
    • 最少应拍摄三张照片
  • 改变快门速度以获得不同的曝光度
    • 调整光圈会使每次曝光的景深发生变化,可能导致图像品质降低
    • 调整 ISO 或光圈还可能导致图像中出现杂色或晕影
  • 一般来说,不要使用相机的自动包围曝光功能,因为曝光度的变化通常非常小
  • 照片的曝光度差异应在一两个 EV 级
  • 不要改变光照条件
    • 例如,在这次曝光时不使用闪光灯,而在下次曝光时却使用闪光灯
  • 确保场景中没有移动的物体

合并 HDR 图像的步骤

  • 选择文件>自动>合并到 HDR Pro

image

  • 浏览添加一组图像
    • 如果手持相机拍摄图像,选择尝试自动对齐源图像

image

  • 弹出合并到 HDR Pro 对话框,显示源图像的缩览图以及合并结果的预览

image

  • 在预览的右上角,为合并后的图像选择一个位深度
    • 如果希望合并后的图像存储 HDR 图像的全部动态范围,请选择 32 位

image

色调映射

HDR 合成预览时,如果选择 16/8 位,需要进行色调映射来将 32 位的动态范围压缩到 16/8 位

32 位 HDR 图像可以通过图像>模式>16 位通道/8 位通道来做色调映射转换成 16/8 位图像

Photoshop 中提供几种色调映射方法

  • 局部适应
  • 高光压缩
  • 色调均化直方图
  • 曝光度和灰度系数

曝光度和灰度系数

  • 允许手动调整 HDR 图像的亮度和对比度
    • 移动曝光度滑块可以调整增益
    • 移动灰度系数(gamma)滑块可以调整对比度

image

色调均化直方图

  • 在压缩 HDR 图像动态范围的同时,尝试保留一部分对比度
  • 色调均化直方图没有参数

高光压缩

  • 压缩 HDR 图像中的高光值,使其位于 8 位/通道或 16 位/通道的图像文件的亮度值范围内
  • 高光压缩没有参数

局部适应

  • 通过调整图像中的局部亮度区域来调整 HDR 色调
  • 局部适应参数
    • 边缘光
      • 半径指定局部亮度区域的大小
      • 强度指定两个像素的色调值相差多大时,它们属于不同的亮度区域
    • 色调和细节
      • 灰度系数设置为 1.0 时动态范围最大;较低的设置会加重中间调,而较高的设置会加重高光和阴影
      • 曝光度值反映光圈大小。拖动细节滑块可以调整锐化程度,拖动阴影和高光滑块可以使这些区域变亮或变暗
    • 颜色
      • 自然饱和度可调整细微颜色强度,同时尽量不剪切高度饱和的颜色
      • 饱和度调整从 –100(单色)到 +100(双饱和度)的所有颜色的强度
    • 色调曲线
      • 在直方图上显示一条可调整的曲线,从而显示原始的 32 位 HDR 图像中的明亮度值
      • 横轴的红色刻度线以一个 EV(约为一级光圈)为增量

image

参考材料

posted @ 2023-06-16 02:04  路过的摸鱼侠  阅读(654)  评论(0编辑  收藏  举报