深度解析HDR
Posted 程序员茶馆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度解析HDR相关的知识,希望对你有一定的参考价值。
随着数字摄影时代的深入发展和计算机软硬件技术的进步以及人们对数字图像品质提高的进一步需求日益强烈,一百七十五年以来传统胶片时代影像动态范围狭窄的瓶颈现在终于被HDRI(High-Dynamic Range image高动态范围图像)技术突破。但是,在我们摄影界包括广大的摄影爱好者,对什么是HDRI还相当陌生。即就是对PHOTOSHOP比较熟悉的摄影师,也依然基本上停留在LDRI(Low-Dynamic Range Image低动态范围图像)层面上工作。什么是HDRI(高动态范围图像),它和我们目前普遍使用的LDRI(低动态范围图像)有着什么样质的区别,如何拍摄、生成和编辑处理HDRI,这个问题事实上对多数摄影爱好者甚至专业摄影师可能还不是很清楚的。
一.什么是HDRI
要了解什么是HDRI,当然得了解什么是HDR。而要知道HDR,首先回顾一下DR这个概念。
关于DR——Dynamic Range(动态范围):Dynamic Range是一种用数学方式来描述某个给定场景的亮度层次范围的技术术语。最通常的解释有两种。一种是摄影界通常所说的D值(以对数值表示的场景最高亮度和最低亮度比的相对数值),通常由0-4之间的很精确的数字来表示。D值的计算公式为:Dynamic Range=log10(Max Intensity / Min Intensity)。公式中intensity是指光照强度,我们对最大亮度除以最低亮度的结果取对数,得到的结果就是动态范围的相对数值——我们摄影界所说的D值。各种景物、底片和照片都有其各自特定的D值范围。
一种是计算机图形学中通常使用的直接以场景最高亮度和最低亮度的亮度比表述的方法,如255:1。 在数字图像领域一般都采用这第二种比值的表述方式来评述场景的动态范围。亮度的单位以每平方米的烛光来表示(cd/m2)。太阳自身的亮度大约为1,000,000,000 cd/m2。阳光照射下的景物的亮度可达100,000 cd/m2,而星光的亮度大约在0.001 cd/m2以下,二者相差高出上亿倍以上。为了更易于描述这样巨大差异的数值,通常使用一个对数标尺来划分亮度。图005中的标尺采用以10为底的对数来描述亮度值,这样,可以用相同的刻度间隔表示相差成百倍的数值。
面对现实世界如此极其巨大的动态范围,我们人类肉眼在同一时间所能分辨的动态范围大约只是10,000:1,而普通计算机显示器或者普通数码照片的这个比值通常只有100:1。而一个反映带有窗外阳光照射下景色的室内场景,它所具有的动态范围大约是100,000:1。换算成摄影界的D值相当于5。众所周知,胶片的动态范围就是我们摄影者常说的密度范围,二者是同一个概念。而负片的最大密度是2.5D,正片的最大密度也只有3.5D。这样大的动态范围胶片自然是难于表达的。至于照片的最大密度约为2.2D,印刷品则仅为1.8D。但这种情况是和目前我们普遍使用的LDR数字图像格式和LDR电脑软硬件状况相互适应的。
二.什么是LDRI
那么,什么是LDRI?LDRI(低动态范围图像)是英文Low Dynamic Range Image的缩写。它所采用的色彩模型是目前通用的图像描述模型——RGB模型。这个模型与硬件密切相关,因为它是为CRT(阴极射线显像管)显示而开发的。CRT显示器的每种色彩都可以用三原色(红、绿、蓝)加上适当的亮度来表示,三原色的亮度梯度各为256级。选定每色256级是在电脑硬件性能、照片级真彩图片需要和电脑2进制方案综合考虑后的结果。这是在从前计算机制造工艺不发达的前提下做出的折中选择。在RGB模型中,每色256级带来的1670万色基本上可以满足照片级图片对色彩的需要。2的8次方=256这种低数量级数字也便利于电脑的2进制运算处理。这就是目前我们非常熟习的观看、编辑、交换和处理数字图像的软硬件环境。我们最常用的数字图像格式如JPEG、TIFF或PSD等通常都是LDR图像文件格式。这种8比特位元RGB低动态范围图像描述模型是将场景最高亮度和最低亮度的亮度比限定为255比1,计算得出的动态范围D值即为2.4。即就是16比特位元整数运算的LDR图像最大的动态范围只能达到4.8D,也就是目前扫描仪能够达到的最高扫描密度的数值。譬如你在Photoshop中打开一幅JPEG格式的普通白天风景图像,看上去白云和太阳可能都呈现是同样的亮度,都是纯白色,但实际上白云和太阳之间实际的亮度不可能一样,它们之间的亮度差别是巨大的。因此,普通的图形文件格式是很不精确的,远远没有纪录到现实世界的实际状况。它不但与现实世界场景非常巨大的动态范围相差极大,也与我们人类肉眼所能分辨的动态范围相距甚远。
然而,随着数字图像时代的来临,人们已经不能满足这种LDRI的画质。它难于充分表现现实世界极其丰富多彩的自然影调层次。于是在计算机显示技术革新进步的推动下,HDRI技术应运而生。HDRI(高动态范围图像),顾名思义,即具有比LDRI高得多的动态范围。
HDRI(英文High Dynamic Range Image的缩写)文件是一种特殊的图像格式,它的每一个像素除了普通的RGB信息,还有该点的实际亮度信息。而且它记录亮度的方式与传统的图像不同,不是用非线性的方式将亮度信息压缩到8比特位元或16比特位元的色彩空间内,而是用直接对应的方式记录亮度信息。它比其它格式的图像有着更大亮度的数据贮存,可以说这种格式记录了拍摄现场环境中的真实光照信息。这就为后期将HDR图像转换为可以在标准显示器上正常观看的LDR图像提供了坚实的数据基础。
三.HDRI与LDRI数学模型的差异
HDRI和LDRI最大的差异在于HDRI具有支持32位(32 位/通道)的浮点数字运算、显示和存储 HDR亮度值的功能,而16位/通道(非浮点型)和8位/通道的图像文件则不能存储这样大的亮度范围。
这就需要深入了解什么是32位图像的问题。
在RGB图像中每一个像素都包含有红、绿、蓝三个原色通道。每一个通道都可以用8位、16位或32位来描述。但它们的描述精度有极大的差别,这一点可以由下表来说明。
-------------------------------------------------------
位深/每通道 8位 16位 32位(HDR)
-------------------------------------------------------
描述方式 整数 整数 浮点算法
-------------------------------------------------------
密度范围 0—255 0—65535 -10±38—+10±38
-------------------------------------------------------
LDRI如JPEG格式图像,系只支持8位整数数据的图像,JPEG 2000和TIFF格式文件也只是支持8位或16位整数数据的图像。这样,像素的色彩可以达到2563=16777216,即我们常说的1670万真彩色。但问题出在色彩通道的亮度上。因为每个色彩通道的亮度只有256级,虽然合起来后每个像素的色彩数量很大,但每个像素的亮度仍然只有256级,也就是说,最终图像的动态范围只有255:1,即D值仅为2.4。这样的精度连基本够用的水平都达不到。既就是16位整数图像,其亮度数据也仅提高到为65536级,即动态范围D值为4.8。虽然比8位图像高出许多,也不能从根本上解决真实描写现实世界高动态范围的问题。
而32位格式文件则由每个颜色通道用32位浮点计算来描述。这种32位浮点型数字所表达的精度是相当高的。理论上在HDR模式下,动态范围的数值最高可以到达D值=76.8。这意味着HDR图像能够包含极为宽广的动态范围。实践上它所能实现的最大动态范围已经超过了人眼的D值9,结果带来了更加真实的视觉体验。这里所说的人眼能够分辨的亮暗对比为109:1是指人眼可以经过调节瞳孔大小等措施所能达到的极限最大亮度和最小亮度的比值,是人的生理极限;并不是说人眼可以直接分辨出109种不同的亮度,人眼能同时看到是5 级亮度对比。这就是HDRI和LDRI最本质的差异——图像品质不同的原因。
HDRI和LDRI的另一个最大的差异就是,观看的条件不同。LDRI由于是和现有计算机系统一同成长起来的产物,自然可以很方便的用现有计算机进行计算处理和在现有显示器上进行显示查看。但HDRI则不能在现有的标准显示器上直接观看到它的全部真面目。所以,你在现有计算机的Windows资源管理器或ACDSee之类图片浏览器中只能看到HDRI文件的图标,而看不到其预览缩图。为此,必须使用适当的算法将浮点运算处理的HDRI转换成整数运算的LDRI而且要保持其图像的品质不变,然后才可以在现有标准显示设备上正常的观看到它的真面目。
HDRI和LDRI的最后一个质的差异则是其完全不同的编辑特性。HDRI不管你如何编辑处理,它所显示的外貌会千变万化,但它所包含的原始数据并没有丢失,即它是可以无损编辑的。而LDRI则不能,尤其是我们最常用的JPEG格式图像文件,你每编辑和保存一次,它包含的图像细节会不可逆转的变化一次。所以说,二者的编辑处理特性有天壤之别。
但HDRI在现有的技术条件下,其获得的工作流程比LDRI要复杂的多。最基本的获得途径是来自对不同曝光量图片的合成。这就是说,要想得到一幅高品质的HDRI,首先要进行针对性的拍摄;其次要用适当的软件进行合成和处理。当然,我们也可以通过对底片的多次扫描或对合适的RAW文件进行多次曝光来获得用于合成HDRI的素材图像。这就是说,HDRI摄影师必需既会用相机进行拍摄,又会使用计算机进行图像处理,两手都要硬,才可以玩转HDRI。但这也给摄影师提供了更加完善的控制影像的手段。
四.HDRI的拍摄技术
既然HDRI最基本的获得途径是来自对不同曝光量图片的合成。那么拍摄用于合成HDR图像的LDR图片则必须遵循如下的原则:1.建议使用三脚架拍摄,越重越好,并最好同时使用快门线。2.使用手动曝光模式,并选择一个适合于场景的光圈(例如,f/8或更小,如果你需要较大的景深),以及一个较低的感光度。3. 对场景中最明亮的部分进行测光(点测光,或在Av光圈优先模式下只瞄准高光区),并记录曝光时间。再对你的场景的最暗区进行同样的操作。4. 以亮部测得的曝光时间为基础进行包围曝光,步进应取1.5或2.0EV值,直到使最暗区也能获得恰当的曝光为止。当然,你也可以使用自动包围曝光进行拍摄,如果你的相机有此功能,并且允许EV值曝光范围为±2的话。否则,正确的做法是手动改变曝光时间。至少要拍摄三张,最好是拍摄五张这种景深相同曝光量不同的同一场景的数字图像或胶片影像。当然胶片影像要变成HDRI还必须将胶片先扫描成数字图像。
五.HDRI的文件格式
HDRI(High-Dynamic Range Image)就是记录采用了HDR技术的图像数据文件。常用的HDRI文件有OpenEXR、Radiance RGBE、FloatTIFF三种格式。
OpenEXR文件格式是由工业光魔(Industrial Light & Magic)公司开发的一种HDR标准(文件扩展名为.exr)。常见的OpenEXR文件是FP16(16比特浮点,也被称为半浮点)数据图像文件,每个通道的数据类型是FP16,一共四个通道,每像素为64比特。也就是说打开这种文件时,需要把16比特浮点文件数据转换为FP32的HDR内存数据进行运算;保存为OpenEXR文件时,要将HDR的FP32内存数据转换为OpenEXR的16比特浮点字节文件数据进行保存。其动态范围从6.14×10-5到6.41×104,换算成D值是9.03。
Radiance RGBE格式是RGBE文件的正式名称,系Greg Ward [格雷格•沃德]于2001 年提出的一种新的影像格式,国内被翻译为(辉映RGBE)格式(文件扩展名为.hdr)。这种格式由RGBE 4个通道组成,其中E为指数通道。每个通道为8比特字节数据类型,4个通道一共是32比特位元。同理,打开Radiance RGBE文件,也要将8比特字节文件数据转换为FP32的HDR内存数据进行运算;保存为Radiance RGBE文件时,要将HDR的FP32内存数据转换为Radiance RGBE的8比特字节文件数据进行保存。其所包括的动态范围的大小大約是从10-38cd/m2到1038cd/m2,即D值可达76。如此巨大的动态范围完全可以将真实世界各种场景的细部色调层次包含到我们的图像中来。
FloatTiff文件格式(文件扩展名为.tif)。FloatTiff每个通道为FP32(32位浮点)类型,一共3个通道,每个像素为96比特位元。用FloatTiff文件存储HDR数据,是直接将HDR的FP32图像数据保存到FloatTIFF文件中,无需转换。其动态范围从10-20到1019,换算成D值是38。也是相当大的。
以上是关于深度解析HDR的主要内容,如果未能解决你的问题,请参考以下文章
腾讯优图&港科大提出一种基于深度学习的非光流 HDR 成像方法