高动态范围图像原理与应用
摘要:主要阐述了高动态范围图像的概念、编码方式、合成方式、合成原理以及显示方式。
关键字:高动态范围图像、HDR
1.1数字图像成像
传统胶片成像过程是基于光化学理论。在相机拍摄时,光线通过相机镜头到达胶片的感光晶体卤化银上,引起胶片的光学密度发生变化,曝光量越大,光学密度越小,呈现非线性关系。再经过扫描、数字化等非线性处理转换成数字图像。与胶片成像不同,现在普遍使用的数码相机是利用影像传感器(一般是CCD和CMOS)把接收到的光信号通过图像传感器上的光敏单元离散成正比于曝光量的成千上万个像素点,并转换成模拟电压信号,再经过模拟/数字转换处理后变成数字信号,最后经过微处理器的非线性运算转换成图像的标准存储格式如BMP、JPEG、TIFF等存储在物理介质上(如图1-1所示)。
(1-1)
其中、、分别表示高动态的RGB分量。这种方式表示的HDR图像其动态范围往往可以达到70多个量级。存在的问题:由于它能够代表的动态范围过大,从而明亮的日光到夜晚星光下岩石的背光面之间的动态范围才12级,因此会有许多浪费;其次,此编码方式中的RGB权值仅为正值,不能有效覆盖全部的可见光范围;最后,这种编码的误差分布不均匀,表现饱和的蓝色和紫色时尤为明显。
2)OpenEXR编码
OpenEXR是专门为好莱坞电影进行特效制作的工业光魔公司内部格式。OpenEXR的文件扩展名为.exr,采用的是一种与IEEE浮点类型相似的16位半浮点类型。OpenEXR库同时也支持全32位浮点类型和24位浮点类型。
剩下的14位表示色度值(u,v)可以通过查表方式得到色彩值。这种表达方法可以在满足肉眼观察的基础上达到4.8级的动态范围。
其中i代表像素点,j代表序列图像号,表示序列图像中某幅图像的某个点的灰度值,表示照度,表示曝光时间。
此处我们假设响应曲线f是平滑且单调的,所以此函数可逆,则逆变换后取对数
2.2.2Nayar算法
Nayar用N次多项式来模拟相机响应函数。使用曝光度比的估计值(曝光时间光圈F值得倒数的平方)来计算多项式的系数,然后用计算出来的多项式重新估计曝光度比,重复上述过程,如果算法收敛,就得到了响应函数和精确的曝光度比。这种方法和上述Debevec与Malik算法最大的不同是不需要知道精确的曝光时间,这对于某些情况来说是不错的选择。
2.3HDR合成算法
一旦相机曲线通过上述方法估算出或者提前已知的情况下,一系列源图像就可以通过相应曲线来线性化了(除以曝光时间),而将线性化后的序列图像加起来就可以得到高动态范围图像:
其中p为图像数。
然而我们知道,在每次曝光中,其最终图像中肯定存在以下三种情况:(1)曝光不足的点(2)过曝光的点(3)适度曝光的点。而(1)(2)包含了不准确的信息(往往由噪声影响等),故在合成时应该加以去处。也就是说,并不是所有的点都可以可靠地参与高动态图像的合成。为了解决这个问题,我们可以对相应的点补偿一个权值加以约束,于是有,
其中.
目前有很多种设置权值的方法。Mann和Picard曾经提出了将响应函数的导数作为权值的方法,其理由是像素的可靠性是与相机对光变化的灵敏度有关的;Debevec和Malik提出了一种简单的帽形三角权值,基于灰度靠近中间的像素更加可靠这一假设;Mitsunag和Nayar在Mann和Picard提出的权值上加以了一些改进;Ward则将Mitsunag和Nayar的权值乘以一个宽的帽形函数,以此来补偿两个极端的像素值。这些经典的权值我们显示在图2-3中。
来表示,i=1…N,这是每张图像的LDR图。设每次曝光的曝光时间为,我们假设三个分量的取值范围为[0,1],[-0.5,-0.5],[-0.5,0.5]。我们的目标是获取YUV空间的HDR图像,用向量来表示。这里,我们分别将亮度分量和两个色差分量分开进行处理。首先对亮度通道进行响应曲线标定和HDR合成,然后对色差空间进行补偿处理。这个地方的处理和HSV空间的合成有些相似的地方,但是后面色差的处理不同,也是主要的差别所在。
其中要分为以下几个步骤来实现:
,YUV空间的表示为, 定义RGB空间表示到YUV空间表示的转换矩阵为A,则有。A表示为:
逆转换为:,其中,分别为z,的转置矩阵。逆转换矩阵为:
我们注意到,矩阵A的第二和第三列的和为零,这从一个角度说明了一种特殊情况,即当RGB三个分量相等时,两个色差分量为零,这是图像为灰度图时的情况。
(4-3)
f表示的就是我们要求的响应曲线。两边取自然对数得
要标定出响应曲线其中最重要的一步就是最小化下面的目标函数:
对于YUV空间的合成,我们只需要将下式中的替换成Y通道的分量即可,得:
由于我们在标定的时候往往认为输入的序列图像是理想的,也就是序列图像都是对同一静止不变的场景进行曝光所得,且图像是完全对齐的。噪声的因素也不在考虑得范围里。如果不满足这些条件,就必须对图像相应的预处理使之满足理想状况。(图像的对齐算法)
解决这个最小平方差问题就需要对原图提取样本点来拟合曲线。而对于曲线的标定,样本点的选取对标定结果影响很大。我们知道,对于一幅图像,往往存在这样三类像素点:曝光不足的点、正常曝光的点、曝光过度的点。我们分析一下几种点的一些性质。
在物体成像时,往往有一种噪声的来源被称为泊松光子照射噪声。物体成像是由光子照射CCD感光器上的晶体井形成的,而单位时间间隔内传感器接受的光子数量呈现一种泊松分布的随即过程,这就导致了当光源照射的亮度足够小时,这种泊松分布导致了和接受到的平均值相比,像素点灰度起伏较大,形成所谓的泊松光子照射噪声。也就是说,当图像某个区域的亮度太低,出现曝光不足,其含有的噪声往往很大。
而对于过度曝光的值,其值往往等于或者接近于最大灰度值,在实际场景中对应的照度往往很大,而相机在进行非线性处理时,往往将处理后仍然大于最大灰度值得像素点强行截断为最大灰度值或其附近。
从以上分析我们可以知道,相对于正常曝光的点,曝光不足和过度曝光的点对于标定响应曲线来说不可靠,需要加以限制。而这往往就需要某种权值来补偿。相对于第二章提出的三角帽形权值函数,我们提出了下面这种权值:
我们认为,相对于曝光不足的点,被截断的过度曝光的点更加不可靠,所以我们采取了一个非对称的函数来限制。
虽然用一幅图像来进行合成理论上成立的,但是其动态范围往往没有多幅涵盖的大,因此我们需要利用原序列图像。同上节一样,由于暗区和亮区包含的有效信息很少,所以在合成的时候仍然需要对它们进行限制。在这里我们采取这样的权值:
其曲线表示如下图4-2:
其中表示合成后的亮度分量。
4.4色差空间的处理
对于色差空间,是没有定义“响应曲线的”,因此需要进行特殊处理。此种处理是基于下面的一种实验现象:灰度值越靠近两极端的点,其饱和度越低,而最终的颜色往往主要由饱和度高的像素决定,因此我们可以利用饱和度S的函数权值对色差空间进行处理。因此为了限制靠近两极端的点对色差空间的影响,我们可以采取
这样的权值。
由于仅仅是加权平均,的取值范围是[-0.5,0.5],求得的的值域仍然是[-0.5,0.5]。
4.5分量的一致化控制
由前面讨论的我们可以知道,原序列图像中的亮度分量的变化范围是[0,1],经过HDR合成后的量度其动态范围往往比[0,1]大得多,而色差分量的变化分量仍然保持在[-0.5,0.5],这就导致了处理结果的不一致性。若我们直接将这几个分量映射到RGB空间,就会出现“色彩灰化”现象。所以我们需要对它们进行一致性控制。例如,某点的RGB空间向量表示为:。现在我们将它转化到YUV空间得到向量表示为。我们按照上面提出的方法得到合成后的亮度为一个很大的数值,假设为100,而色差空间的取值基本保持不变,我们假设仍然分别为1/2和1/4,则YUV空间HDR图像表示为,再转换到RGB空间得。我们发现原先LDR图像中亮度和色差之间较大的差异在合成
完成后变得极小,甚至相对可以忽略,也就是说RGB之间的差异非常小,几乎相等,从而使原图变成了一幅“灰度图”。(失饱和现象)
为了解决这个问题,我们需要对亮度色差空间进行饱和度控制。我们定义如下的标量比例因子:
其中表示合成后的HDR图像亮度值,为前面提到的关于饱和度的权值函数。我们在进行饱和度控制时只需要将色度空间的值乘以这个比例因子即可以使亮度、色度空间一致。用矩阵来表示即系数矩阵为:
由上述对角矩阵我们看出,亮度不受影响,为色差空间的两个分量分别被乘了一个系数因子。此外,色调的计算式为,可见图像的色调并没有比例因子而改变,所改变只是色彩的饱和度。
在经过饱和度的处理之后,我们可以将RGB空间的HDR图像经过Tone Mapping的处理映射到普通的LDR图像从而可以显示出来。
4.6Tone Mapping处理
为了方便存储和显示HDR图像,我们需要将HDR压缩到LDR图像。Tone Mapping方法很多,如伽玛压缩,基于直方图均衡化的算法,基于Retinex的算法,基于梯度的算法等等。
尚未解决问题:
本文主要阐述了高动态范围图像从成像到显示的整个过程,其中高动态范围合成中的动态场景的合成需进行配准尚未解决。