高动态范围成像

<image>

高动态范围成像（High Dynamic Range Imaging，简称HDRI或HDR），在计算机图形学与电影摄影术中，是用来实现比普通数位图像技术更大曝光动态范围（即更明亮以及更大的明暗差别）的一组技术。高动态范围成像的目的就是要正确地表示真实世界中的大范围亮度（即高动态范围），因为直接拍摄出来的照片亮度范围没有那么大。

高动态范围成像最初只用于纯粹由计算机生成的图像。之后又开发出一些从不同曝光范围照片中生成高动态范围图像的方法。随着数码相机的日渐流行以及桌面软件变得易于使用，许多业余摄影师使用高动态范围成像的方法生成高动态范围场景的照片，但是，实际上高动态范围还有许多其它的应用。

超高清电视论坛(Ultra HD Forum)也将HDR技术列为UHD电视标准需要支持的技术之一。目前，电视与移动端使用的HDR技术标准主要包括：HDR10, HDR10+, HDR Vivid, Dolby Vision以及HLG(Hybrid Log-Gamma)等。这些技术标准中定义了相比于传统标准动态范围图像（SDR）更大的亮度范围，更广的色域，更大的比特深度，不同于伽马校正的转换函数以及新的编码方式。

当用于显示的时候，高动态范围图像经常要进行色调映射，并且要与其它几种全屏显示效果 一起使用。

## 历史

在计算机图形学中开创高动态范围成像的先驱是Paul Debevec，据说Debevec是第一个使用高动态范围成像图生成计算机图像以逼真地对计算机图形物体进行照明与动画处理。人们普遍认为Gregory Ward是高动态范围成像文件格式的奠基人。

## 与传统数字图像的比较

通常保存在高动态范围图像中的信息对应于真实世界可以观察到的亮度（luminance）或者radiance值，这与传统的数字图像保存的在显示器或者打印纸上显示的颜色不同。所以，高动态范围图像格式也经常成为“与场景相关”，以区别于传统的“与设备相关”或者“与输出相关”的数字图像。另外，传统图像通常经常针对人类视觉系统进行编码（最大化保存在固定数据位中的可视信息），这些编码通常称作“伽玛编码”或者“gamma校正”。保存在高动态范围图像中的数据经常是线性的，这就意味着它们表示亮度或者radiance的相对或者绝对值（gamma 1.0）。

高动态范围图像每个颜色通道需要比传统图像更多的数据位，这是因为它的线性编码以及需要表示从$10^{-4}$到$10^8$人眼可见亮度范围甚至是更大范围的数值。经常使用16位“half precision”或者32位浮点数表示高动态范围像素。但是，如果使用合适的传递函数进行变换，一些应用中的高动态范围像素可以用10-12位表示亮度，用8位表示色度，并且不会带来任何可见的量化误差。

## 图像来源

高动态范围图像最初使用不同的渲染工具生成，其中著名的一个是Radiance。由于所使用单位都是基于如瓦/球面度/米2这样的实际物理单位，所以这种方法可以实现更加逼真的模型场景表现。这种方法可以模拟真实场景的光照，以及利用这个结果选择照明（假设几何形状、照明以及材料都是真实场景的精确表现）。

在1997年的SIGGRAPH上，Paul Debevec提交了题为“从照片中恢复高动态范围辐射图”的论文。这篇论文描述了按照不同的曝光设置对同一个场景进行拍照，然后将这些采用不同曝光的照片组合成高动态范围图像。这种高动态范围图像可以捕捉从黑暗的阴影到亮光源或者高反光的更大动态范围的场景。

在SIGGRAPH '98一年之后，Debevec又提交一篇论文“将人造物体渲染成真实场景：沟通基于图像的传统图形与全局照明以及高动态范围照片”。在这篇论文中，他使用以前的技术对光滑的铬球照相以生成他所称作的“light probe”，即本质上的高动态范围环境图。然后将这个light probe用于合成场景的渲染。与普通的环境图简单地提供反射或者折射信息不同，light probe还提供了场景中的照明，实际上，这是唯一的光源。这种方法实现了一种前所未有的真实感效果，为整体照明模型提供了真实世界的照明数据。

## 图像显示

高动态范围图像在传统的萤光幕只能显示有限动态范围,但是随着OLED/mini-LED技术越来越成熟,很多使用这类技术的高档手提电话,平板电脑,手提电脑,电脑显示器,超清电视机能够显示峰值亮度高达1600nits的高动态范围图像

## 色调映射

在查看高动态范围图像的时候经常会遇到一个问题，CRT、LCD、打印机以及其它图像显示方法只能显示有限动态范围的图像。因此，人们开发了各种将高动态范围图像“转换”成可以查看的图像的方法，这些方法统称为“色调映射”。

早期的色调映射非常简单，这些方法设置一个动态范围窗口，按照最大值、最小值对图像进行裁剪。最近出现的方法试图显示更大的动态范围，一些更加复杂的方法已经在研究人眼及视神经感知场景的机制，并且争取在保持真实的颜色与对比度前提下显示全部的动态范围。

## 例子

<image>

- –4 stops

<image>

- –2 stops

<image>

- +2 stops

<image>

- +4 stops

<image>

- 简单的对比度降低

<image>

- 局部色调映射

<image>

- 自然色调映射

一些图像实例可以用来帮助说明高动态范围成像的用途。下面的实例所用的图片是用Uffizi图库中著名的Paul Debevec光探头在Radiance中渲染生成。

### 曝光

<image>

在将高动态范围图像通过色调映射生成用于显示的低动态范围图像的过程中，通过调整曝光展示了高动态范围图像。中间的曝光是所期望的曝光，也最有可能是场景正常显示的效果。左侧较暗图像使用光圈4曝光，只能显示天空较亮云彩的一些细节。右侧较亮图像使用光圈3曝光，可以显示场景中较暗的部分。

<image>

### 模糊

这里的高斯模糊展示了高动态范围图像中超出取值范围的数值也是有用的，即使它们在转换成低动态范围图像的时候通常都要被裁掉。左侧图像是原始图像首先经过色调映射成的低动态范围版本，然后在GIMP中进行模糊得到，右侧的图像是原始高动态范围图像在pgblur中进行模糊，然后经过色调映射得到。

尽管两幅图像非常相似，但是明显的区别就是光滑铬球上的高亮光部分。在原始的高动态范围图像中，这些像素都有非常大的亮度值。当图像模糊的时候，周围的像素亮度被“拉高”并且在色度映射时裁剪成最大值，当然高亮像素的亮度也会被周围像素“拉低”，但是它们的亮度非常高所以在色度映射的时候仍然要超出最大值。这样的结果就是更大的区域变成了白色。

但是对于低动态范围模糊来说，高亮区域的像素在模糊处理之前已经裁剪成了最大值，这就从总体上大幅度地降低了亮度值。因此，在模糊处理之后，光亮区域周围的像素将不再有非常高的亮度，即使是高亮区域内的像素也由于周围像素的影响而被拉低。这样高亮区域就变得比较模糊，看起来不再非常明亮。

对于常见的动态模糊也是同样的结果。

## 其他例子

<image>

- 奥地利蓬高地区圣约翰阴天时的景象（经HDR处理），事实上地面的亮度比此影像所呈现要要暗很多

<image>

- 日落时分的巴黎街景，HDR突显了逆光处的暗部细节

<image>

- 泰国帕亚那空山洞内的一座楼台，HDR处理使山洞内阴暗处的纹理得以显示出来

<image>

- 夕阳下的马特洪峰，实际上此时地面和天空的亮度差异非常大

## 外部链接

- 网易HDR摄影中国HDR摄影论坛
- Artizen HDR 高动态范围图像编辑及色调映射软件
- Hdrland这种技术的图片库
- Photomatix 高动态范围图像合成及色调映射软件
- 基于演示照明的实时高动态范围图像
- 高动态范围图像编码，Greg Ward, Anyhere Software
- Linux中的高动态范围图像，Nathan Willis
- Hyperfocal Design 商用高动态范围图像、教程、软件评估以及新闻
- 高动态范围图像与视频的处理——从获取到显示
- AHDRIA使用标准数码相机捕获高动态范围图像的软件
- 全自动梯度域高动态范围压缩描述
- HDRShop 高动态范围图像处理软件资源
- HDRIE（高动态范围图像编辑器）- 受HDRShop启发的开发源代码项目
- Renderman中高动态范围图像渲染
- PFStools - 创建、编辑高动态范围图像的开放源代码包
- Where to Go for More H.D.R.

### 摄影

- 如何生成高动态范围图像 - Tutorial Compares Photomatix and Photoshop CS2 Bridge
- 高动态范围照相 - Photoshop CS2实现
- Photoshop CS2高动态范围图像介绍 - 用Photoshop CS2生成32位高动态范围图像
- Exposure Bracketing Technique for HDR Photography