高动态范围图像的原理与应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高动态范围图像原理与应用
摘要:主要阐述了高动态范围图像的概念、编码方式、合成方式、合成原理以及显示方式。
关键字:高动态范围图像、HDR
第一章概要
1.1数字图像成像
传统胶片成像过程是基于光化学理论。
在相机拍摄时,光线通过相机镜头到达胶片的感光晶体卤化银上,引起胶片的光学密度发生变化,曝光量越大,光学密度越小,呈现非线性关系。
再经过扫描、数字化等非线性处理转换成数字图像。
与胶片成像不同,现在普遍使用的数码相机是利用影像传感器(一般是CCD和CMOS)把接收到的光信号通过图像传感器上的光敏单元离散成正比于曝光量的成千上万个像素点,并转换成模拟电压信号,再经过模拟/数字转换处理后变成数字信号,最后经过微处理器的非线性运算转换成图像的标准存储格式如BMP、JPEG、TIFF等存储在物理介质上(如图1-1所示)。
图1-1数字图像成像流程
图1-1描述了典型的现代数码相机成像的流程。
流程图中一系列的转换过程可是
看作非线性的映射关系,最后形成了每通道8位表示的图像。
1.2数字图像中的动态范围
动态范围(Dynamic Range)在很多领域用来表示某个变量最大值与最小值的比率。
在数字图像中,动态范围也被称为对比度,表示了在图像可显示得范围内最大灰度值和最小灰度值之间的比率。
对真实世界中的自然在场景来说,动态范围代表了最亮的光照亮度和最暗光照亮度的比。
目前大部分的彩色数字图像中,R、G、B各通道分别使用一个字节8位来存储,也就是说,各通道的表示范围是0~255灰度级,这里的0~255就是图像的动态范围。
由于真实世界中同一场景中动态范围变化很大,我们称之为高动态范围(high dynamic range, HDR),相对的普通图片上的动态范围为低动态范围(low dynamic range,LDR)。
数码相机的成像过程实际上就是真实世界的高动态范围到相片的低动态范围的映射。
这往往是一个非线性的过程(图1-2)。
图1-2动态范围映射
1.3高动态范围图像获取方式及其编码方式
传统数字图像各通道256个等级灰度所表示的色差范围十分有限。
高动态范围图像(HDRI)是一种可以表示实际场景中亮度大范围变化的图像类型,因此,可以更好地表示场景中亮区和暗区的光学特性。
高动态范围图像所要表示的像素值范围通常很大,有时候需要达到数十万,甚至数百万。
高动态范围图像每个颜色通道需要比传统图像更多的数据位,这是因为它的线性编码以及需要表示从到人眼可见亮度范围甚至是更大范围的数值。
经常使用16位“half precision”或者32位浮点数表示高动态范围像素。
但是,如果使用合适的传递函数进行变换,一些应用中的高动态范围像素可以用10-12位表示亮度,用8位表示色度,
并且不会带来任何可见的量化误差。
HDR图像的获取方法主要有三类:第一类是模拟光线和基于物理光照模型的合成图像,早期HDR图像的来源主要是这一类;第二类是用多张不同曝光度的普通地动态范围图像(LDRI)来计算高动态的实际亮度,得到HDR图像(多次曝光法、多靶面曝光合成);第三类是用特殊的硬件设备来直接拍摄HDR图像。
第一类都是人工合成的图像,不能处理自然图像,第三类方法需要特殊的设备,而第二类只需要普通相机拍摄的几张不同曝光量的图像就可以合成HDR图像,因此具有较好的应用价值。
关于HDR图像的一个很重要的方面是如何表示以及存储它。
不同于传统24位的RGB 图像,高动态范围图像存储要复杂的多,其中一个需要考虑的问题是如何减少磁盘空间的占用并能表示高动态范围。
目前已经有一些存储HDR图像的文件格式被开发出来,主要有HDR 格式,TIFF格式,EXR格式。
HDR格式的图像(.hdr,.pic,.rad)也叫照度格式(radiance format),它包含了一段ASCII文件头、一个表示图像大小的字符串以及通过游程编码处理的图像数据。
对于每个像素点,一般采用RGBE编码(下图1-5所示)共32比特表示。
1)RGBE编码
RGBE使用4个字节表示一个像素,其中3个8位的字节分别表示RGB分量,1个8位字节表示指数值,此指数值用作其他3个线性色彩值的缩放比例系数。
图1-3 RGBE编码
RGBE编码表示的各分量(E、Rm、Gm、Bm)可以通过真实的高动态值按如下规则转换得来:
(1-1)
(1-2)
(1-3)
(1-4)
其中、、分别表示高动态的RGB分量。
这种方式表示的HDR图像其动态范围往往
可以达到70多个量级。
存在的问题:由于它能够代表的动态范围过大,从而明亮的日光到夜晚星光下岩石的背光面之间的动态范围才12级,因此会有许多浪费;其次,此编码方式中的RGB权值仅为正值,不能有效覆盖全部的可见光范围;最后,这种编码的误差分布不均匀,表现饱和的蓝色和紫色时尤为明显。
2)OpenEXR编码
OpenEXR是专门为好莱坞电影进行特效制作的工业光魔公司内部格式。
OpenEXR的文件扩展名为.exr,采用的是一种与IEEE浮点类型相似的16位半浮点类型。
OpenEXR库同时也
支持全32位浮点类型和24位浮点类型。
图1-4 OpenEXR的半浮点类型编码
下式式从编码的半浮点数进行转换的公式,其中:S代表符号位,E代表指数(0~31),M位小数部分:
由于OpenEXR中可以表示正负值,因此他涵盖了全部的可见光范围,并具有10.7的动态范围值,相对精度达0.1%。
虽然动态范围不是很高,但对于大多数的运用已经足够了,OpenEXR格式被目前许多高端的图形卡所支持。
3)TIFF编码
TIFF编码的初衷是基于对RGBE编码进行改进,以获得一种工业标准的HDR标准。
该编码的思想基础是基于人类视觉的生理基础,吧图像数据量化步长值控制在人类视觉的生理基础,把图像数据量化步长控制在人眼辨别色彩和亮度变化的域限以下,使人眼能够得到连续光滑过度的图像质量。
TIFF编码将亮度通道(L)和色度通道(u,v)分开,对亮度采用对数编码,从而达到理想结果。
这里的u,v是指国际发光照明委员会推出的CIE国际标准颜色系统的坐标值,可以通过一个3*3的矩阵进行CIEXYZ和RGB互算。
TIFF编码有两种版本:24位和32位。
24位编码用24位色彩表示分为连个部分:一个10位的对数亮度值和一个14位的CIEuv查表值,亮度值可以用下式计算:
式中,为物理亮度级别,范围0.00015~15.9。
剩下的14位表示色度值(u,v)可以通过查表方式得到色彩值。
这种表达方法可以在满足肉眼观察的基础上达到4.8级的动态范围。
图1-5 24位和32位TIFF编码
32位编码的基本思想与24位一样,只是位数分配不同,可以记录更大的范围和更高的精度。
其使用16位来记录亮度信息,两个8位来记录CIE的u,v值,亮度转换计算如下:
TIFF编码是目前最合适记录HDR图像的编码方法,由于TIFF中的色彩信息需要一个3*3的矩阵进行转化,因此习惯使用常用的RGB色彩空间。
第二章高动态灰度图像合成
2.1基于多曝光的HDR合成原理
由于单幅曝光的图像其包含的场景动态范围非常有限,因而通过多次曝光来恢复出实际场景原有的照度,从而得到HDR图像就是一种非常不错的方式。
下图中显示了相机捕获场景的示意图,由图1-5可知:已知条件是最终各通道8bits表示的源图像,我们的目的是恢复实际场景的曝光量X。
而在原图像和实际场景之间往往存在一种非线性的关系,它涵盖了相机内部处理的一系列非线性处理过程(红框所示),一般我们把它称为相机的响应曲线(Camera Response Curve)。
通过多幅原图像来标定出响应曲线,就可以恢复出实际场景的照度,最终得到HDR图像。
图2-1 HDR相机响应函数
在经典的基于多曝光的高动态范围图像合成中,一般包括三个基本流程,即响应曲线标
定、HDR合成、HDR显示。
实际应用中,有些情况下响应曲线是已知的,如果未给定则可以根据曝光时间加以标定。
由于HDR图像覆盖的动态范围很大,而传统的显示设备很难胜任,如何显示HDR图像也是研究的一个热点。
如图2-2所示,可以通过硬件直接显示HDR 图像,或者通过一种称为Tone-mapping的压缩方式将HDR图像压缩成传统的低动态范围图像(LDRI)再显示。
图2-2HDR图像合成流程图
2.2相机响应曲线的标定算法
由LDR图合成HDR图需要知道相机响应曲线,如果其未给定,就需要某种算法来加以标定。
目前比较经典的主要有两种方法:(1)Debevec与Malik算法(2)Nayar算法。
这两种方法各有特点。
2.2.1 Debevec与Malik算法
Debevec和Malik使用一组知道精确曝光度的图像,可以得到更精确地结果。
这个算法对响应函数没有严格的限制,只要求是连续的。
由相机的非线性的响应曲线,可知:
(2-1)
其中i代表像素点,j代表序列图像号,表示序列图像中某幅图像的某个点的灰度值,表示照度,表示曝光时间。
此处我们假设响应曲线f是平滑且单调的,所以此函数可逆,则逆变换后取对数
2.2.2 Nayar算法
Nayar用N次多项式来模拟相机响应函数。
使用曝光度比的估计值(曝光时间光圈F值得倒数的平方)来计算多项式的系数,然后用计算出来的多项式重新估计曝光度比,重复上述过程,如果算法收敛,就得到了响应函数和精确的曝光度比。
这种方法和上述Debevec与Malik算法最大的不同是不需要知道精确的曝光时间,这对于某些情况来说是不错的选择。
2.3 HDR合成算法
一旦相机曲线通过上述方法估算出或者提前已知的情况下,一系列源图像就可以通过相应曲线来线性化了(除以曝光时间),而将线性化后的序列图像加起来就可以得到高动态范围图像:
(2-15)
其中p为图像数。
然而我们知道,在每次曝光中,其最终图像中肯定存在以下三种情况:(1)曝光不足的点(2)过曝光的点(3)适度曝光的点。
而(1)(2)包含了不准确的信息(往往由噪声影响等),故在合成时应该加以去处。
也就是说,并不是所有的点都可以可靠地参与高动态图像的合成。
为了解决这个问题,我们可以对相应的点补偿一个权值加以约束,于是有,
(2-16)
其中.
目前有很多种设置权值的方法。
Mann和Picard曾经提出了将响应函数的导数作为权值的方法,其理由是像素的可靠性是与相机对光变化的灵敏度有关的;Debevec和Malik提出了一种简单的帽形三角权值,基于灰度靠近中间的像素更加可靠这一假设;Mitsunag和Nayar 在Mann和Picard提出的权值上加以了一些改进;Ward则将Mitsunag和Nayar的权值乘以一个宽的帽形函数,以此来补偿两个极端的像素值。
这些经典的权值我们显示在图2-3中。
图2-3 HDR图像合成权值
第三章高动态范围彩色图像合成
3.1色彩空间
一般说来,在人类的视觉系统中,视网膜上含有三种类型的锥体细胞,它们对自然界的照度拥有不同的光谱反应,也就是对不同的颜色有不同的敏感度。
因而人们往往使用一个含有三个分量的向量来表示自然界的颜色,而通过对三个分量的不同定义,可以得到不同的颜色空间,或称为颜色模型。
目前色彩空间主要分为:CIE XYZ颜色空间、RGB色彩空间、HSV 色彩空间和YUV空间表示(其主要为一种颜色编码方式)。
3.2 RGB空间合成
3.2.1问题的提出
目前关于彩色图像的合成主要是在RGB空间进行操作,分别对RGB三个通道分别进行合成,也就是认为RGB三通道是互相分离的三个分量。
主要的步骤有:(1)首先分别合成三个RGB通道的相机响应曲线。
(相机响应曲线是相机固有的性质,因此每个相机只需要标定一次)(2)根据响应曲线和曝光时间,可以对每次曝光的量进行线性化,最后实际场景的照
度可以对这些线性化后的曝光进行加权求和求得。
(3)得到的HDR图像可以通过某种HDR格式存储起来。
(4)最后,为了在普通的显示设备上显示HDR图像,必须要对HDR图像进行压缩,也就是Tone Mapping的过程。
在涉及到彩色图像的合成中其中最简单的就是分别对R G B三通道分别进行合成,R G B 三通道分别标定曲线、合成、最后经过Tone-mapping压缩最终显示出来。
事实上,这种并行处理的方法是基于一个假设,即三通道之间没有联系,然而问题可能恰恰出在此处。
往往发生的一种情况是合成图的颜色失真。
可能的原因之一是,各颜色之间的差异在高动态图像中得到保持,然而经过Tone-mapping压缩以后,R G B通道的颜色差异也被压缩,灰度值趋于一致,从而导致了结果图中的失真。
3.2.2白平衡解决方案
为了消除色彩失真,我们尝试采取的方法是在合成之后对各通道进行白平衡处理。
这里首先说明一下白平衡的原理。
白平衡是数码相机的一个极重要概念。
所谓白平衡(英文名称为White Balance),就是数码相机对白色物体的还原。
当我们用肉眼观看这大千世界时,在不同的光线下,对相同的颜色的感觉基本是相同的,比如在早晨旭日初升时,我们看一个白色的物体,感到它是白的;而我们在夜晚昏暗的灯光下,看到的白色物体,感到它仍然是白的。
这是由于人类从出生以后的成长过程中,人的大脑已经对不同光线下的物体的彩色还原有了适应性。
但是,作为数码相机,可没有人眼的适应性,在不同的光线下,由于CCD输出的不平衡性,造成数码相机彩色还原失真。
一般情况下,我们习惯性地认为太阳光是白色的,已知直射日光的色温是5200K左右,白炽灯的色温是3000K左右。
用传统相机的日光片拍摄时,白炽灯光由于色温太低,所以偏黄偏红。
所以通常现场光线的色温低于相机设定的色温时,往往偏黄偏红,现场光线的色温高于相机设定时,就会偏蓝。
传统胶片相机拍摄时,色温问题不容易掌握,通常用不同类型的胶片来解决。
例如有日光型、灯光型胶片之分,或者用转换多种色温滤镜的方法来调整,操作起来较麻烦。
数码相机的白平衡装置就是根据色温的不同,调节感光材料(CCD)的各个色彩应强度,使色彩平衡。
由于白色的物体在不同的光照下人眼也能把它确认为白色,所以,白色就作为确认其他色彩是否平衡的标准,或者是说当白色正确地反映成白色时,其他的色彩也就正确了,平衡了。
这就是白平衡的含义。
数码相机就是预设了几种光源的色温,来适应不同的光源要求。
一般家用数码相机有白炽灯(约3000K色温)、荧光灯(4200K色温)、直射日光(约5200K 色温)、闪光灯(约5400K色温)、多云(约6000K色温)、阴影(约8000K色温)几种模式。
当我们在拍摄的时候,只要设定在相应的白平衡位置,就可以得到自然色彩的准确还原。
而且一般数码相机还有自动白平衡设置,可以适应大部分光源色温。
但是遇到现场光源复杂时,相机自动白平衡判断也容易失误,我们可以通过CCD观看结果,用手动来调节。
当你用手动白平衡设定时,最准确的方法就是用一张白纸,让相机取景完全充满白纸,设定在手动白平衡功能上,按相机说明书操作做一遍就可以设定完成,在现场特定的光源下就可以把白色还原正确了。
关于白平衡的实现算法有很多,在这里简要介绍其中的一种。
当我们在研究白平衡实现算法时,往往需要对自然场景中颜色分量的特性做出某种假设,其中比较常见的一种假设就是“灰度世界假设”,即对于给定的一幅图像,RGB三通道的均值应该趋向于一致,也就是说三个均分量的均值就是我们所说的“灰度”。
对于真实世界来说,这个假设一般是成立的,因为我们认为场景中的颜色是多种多样且变化繁多。
由于颜色变化的随机性和独立性,所有颜色分量的均值应该趋向于没有颜色,就是“灰度图”。
我们的白平衡算法就是基于这样一种假设。
首先,我们根据所有颜色的均值找出这里所需要的参考值:灰度值。
然后根据这个灰度值分别对RGB三个分量进行处理,使之趋于一致,最终的结果可以消除由于光源的色
温不同引起的颜色偏差,实现白平衡效果。
虽然经白平衡处理后色彩有所改善,但与原图的一致性仍然存在问题。
此外,白平衡算法在有些情况下效果并不好,因此这种解决方法还不是最优的,可以进一步研究更好的方法。
3.3 HSV空间合成
3.3.1基本步骤
在HSV空间的表示模型中,V表示亮度值,H代表色调,S表示颜色的饱和度。
HSV空间合成算法主要是考虑到效率问题和颜色控制,其主要步骤是:(1)将RGB空间转换成HSV 空间计算(2)对V通道进行响应曲线标定(3)根据响应曲线和曝光时间合成V通道HDR图像。
由于此处V通道标识亮度值,因此可以当作普通的灰度图来进行处理。
(4)对H和S通道进行特定处理,如平均或加权平均等。
(5)Tone Mapping的结果是V通道的HDR经过压缩后与H、S通道组成。
相比较于RGB空间的合成,由于只需要对一个通道进行响应曲线标定和合成,往往速度更快,效率较高;由于亮度空间和颜色是分离的,所以相对来说更加科学。
3.3.2问题的提出
相比较而言,HSV空间的合成只需对亮度V空间进行合成,效率更高。
然而在对色调H 空间进行平均时我们发现一个本质性的问题即颜色偏离。
例如,红色调在用角度表示时在圆的0度左右。
当某两幅虚列图像中某个红像素点的色调表示为5度和355度时,加权平均的结果并非我们预期的在0度,而是180度,从而导致色调的本质变化。
在实际中采用此方法时,可以为这种情况加以特殊处理,但是由于图像噪声的存在,设定的阀值往往难以确定,合成的效果并不好。
第四章亮度-色差空间的彩色图像合成
RGB空间合成所采取的各通道分别处理的策略忽略了各通道之间存在的联系,不仅计算量很大,而且合成的颜色往往不能忠于原图。
而对于HSV空间的合成,我们认为关于色调的处理目前还不成熟,需要进一步的研究。
本章提出了一种新颖的颜色空间处理法,即亮度-色差空间(也就是YUV空间)合成。
4.1基本原理
对于一个序列图像,我们用YUV颜色模型的向量来表示,i=1…N,这是每张图像的LDR图。
设每次曝光的曝光时间为,我们假设三个分量的取值范围为[0,1],[-0.5,-0.5],[-0.5,0.5]。
我们的目标是获取YUV空间的HDR图像,用向量来
表示。
这里,我们分别将亮度分量和两个色差分量分开进行处理。
首先对亮度通道进行响应曲线标定和HDR合成,然后对色差空间进行补偿处理。
这个地方的处理和HSV空间的合成有些相似的地方,但是后面色差的处理不同,也是主要的差别所在。
其中要分为以下几个步骤来实现:
图像RGB空间表示转化成亮度-色差空间表示。
虽然RGB色彩空间在人们的日常生活中最为常见,然而它并不是最准确的颜色模型。
RGB空间往往从相机的传感器中获取初始数据(Raw Data),然后使用含有误差的插值算法来插值出RGB三通道的灰度值。
因此一般比较专业的计算机图形图像学研究中,我们应该寻求更为专业合理的颜色模型。
量度-色差色彩模型就是其中一种。
在人类视觉系统中,人们往往依据一些物体的视觉特征来形成色彩。
所谓视觉特征,一般包括亮度(luminance),色调(hue)和饱和度(saturation),量度-色差色彩模型很好的表现了这些特征。
学术上一般把亮度分量和两个色差分量分别表示为Y、U、V。
我们定义RGB空间的向量表示为,YUV空间的表示为, 定义
RGB空间表示到YUV空间表示的转换矩阵为A,则有。
A表示为:
(4-1)
逆转换为:,其中,分别为z,的转置矩阵。
逆转换矩阵为:
(4-2)
我们注意到,矩阵A的第二和第三列的和为零,这从一个角度说明了一种特殊情况,即当RGB三个分量相等时,两个色差分量为零,这是图像为灰度图时的情况。
●亮度空间的HDR合成。
我们知道,亮度分量是图像的高频部分,它包含了图像中一些重要的信息,如边缘,阴影,纹理特征等。
合成亮度空间类似于灰度图合成。
相比较于RGB空间,YUV合成拥有以下优点:1)合成效率高。
RGB三个通道需要分别合成,计算量巨大。
而这里我们只需要合成亮度空间。
2)单通道的合成其信噪比要高的多。
由于颜色信息被剥离,图像的一些颜色噪声不会影响到合成结果,而且比RGB合成中的噪声叠加要好。
●色差空间的合成。
在色差空间不存在动态范围这一说法,而多次曝光时候的同一像素位置的色差我们如何决定呢?这里为了利用所有的曝光,我们对所有的色差进行加权平均求得最终的色差。
由于是简单的加权平均,其变化不大,取值范围仍然为[-0.5 0.5]。
●HDR图像的显示。
主要有两种方法。
其一是将HDR图像Tone Mapping到LDR图像,再进行显示。
在YUV 空间合成的时候,我们可以先把高动态的亮度压缩到低动态范围,再与合成的色差空间组成低动态范围图像,最后映射到RGB空间进行显示。
对于高动态的RGB三通道分量值,我们采取对数归一化Tone Mapping算法来压缩。
第二种方法是我们将高动态范围图像存储起来。
将高动态的YUV转换成高动态的RGB格式,然后采用RGBE的存储格式存储HDR图像。
4.2亮度响应曲线的标定
这里采用Debevec的算法来合成响应曲线。
我们知道
(4-3)
f表示的就是我们要求的响应曲线。
两边取自然对数得
(4-4)
要标定出响应曲线其中最重要的一步就是最小化下面的目标函数:
(4-5)
对于YUV空间的合成,我们只需要将下式中的替换成Y通道的分量即可,得:
(4-6)
由于我们在标定的时候往往认为输入的序列图像是理想的,也就是序列图像都是对同一静止不变的场景进行曝光所得,且图像是完全对齐的。
噪声的因素也不在考虑得范围里。
如果不满足这些条件,就必须对图像相应的预处理使之满足理想状况。
(图像的对齐算法) 解决这个最小平方差问题就需要对原图提取样本点来拟合曲线。
而对于曲线的标定,样本点的选取对标定结果影响很大。
我们知道,对于一幅图像,往往存在这样三类像素点:曝光不足的点、正常曝光的点、曝光过度的点。
我们分析一下几种点的一些性质。
在物体成像时,往往有一种噪声的来源被称为泊松光子照射噪声。
物体成像是由光子照射CCD感光器上的晶体井形成的,而单位时间间隔内传感器接受的光子数量呈现一种泊松分布的随即过程,这就导致了当光源照射的亮度足够小时,这种泊松分布导致了和接受到的平均值相比,像素点灰度起伏较大,形成所谓的泊松光子照射噪声。
也就是说,当图像某个区域的亮度太低,出现曝光不足,其含有的噪声往往很大。
而对于过度曝光的值,其值往往等于或者接近于最大灰度值,在实际场景中对应的照度往往很大,而相机在进行非线性处理时,往往将处理后仍然大于最大灰度值得像素点强行截断为最大灰度值或其附近。
从以上分析我们可以知道,相对于正常曝光的点,曝光不足和过度曝光的点对于标定响应曲线来说不可靠,需要加以限制。
而这往往就需要某种权值来补偿。
相对于第二章提出的三角帽形权值函数,我们提出了下面这种权值:
(4-7)
(4-8)
我们认为,相对于曝光不足的点,被截断的过度曝光的点更加不可靠,所以我们采取了一个非对称的函数来限制。
图4-1权值曲线图
4.3亮度空间HDR合成
既然响应函数已经标定,我们可以根据精确的曝光时间求得每次曝光的量:。