HDR里会用到tone mapping,这里做一下简要了解。
Tone mapping是摄影学里的一个专用术语,因为打印照片不足以表示现实世界中的亮度域,简单的将真实场景亮度域压缩到照片的亮度域会丢失许多细节,tone mapping就是为了克服这个问题,即其目的是将高动态范围的图像映射到低动态范围成像设备,可通过光圈与曝光时间的长短来控制一个合适的亮度域,这样既保证细节不丢失,也可以不使照片失真。
最原始的tone mapping算法就是使用简单的gamma校正,先将图像归一化到区间【0,1】,令归一化后灰度值为Vin,校正后图像灰度值为Vout,则满足下面关系:
当然这样的方法很显然是有缺陷的,会导致结果图出现灰蒙蒙的感觉,一般的tone mapping方法如下所示:
基于全局的tone mapping
全局色调映射由于不涉及到周边像素信息的计算,运算速度较快。整张图像使用相同的映射函数方法,上面提到的gamma校正就是一种全局tone mapping。全局色调映射的特点有:
1.任意相同颜色的像素点,在映射后,还是相同的颜色;
2.全局算法一般较简单,速度快;
3.全局算法的性能一般劣于局部方法;
一般的全局tone mapping方法包括对数校正,直方图均衡化等。这里简要介绍一种:首先根据当前的场景推算出场景的平均亮度,再根据这个平均亮度选取一个合适的亮度域,再将整个场景映射到这个亮度域得到正确的结果。场景的平均亮度通过如下公式获得:
其中Lw(x,y)是像素点x,y的亮度,N是场景内的像素数,$\sigma$是一个很小的数用来应对像素点纯黑的情况。
上述公式用来映射亮度空间,其中a用来控制场景的亮度倾向,调节偏暗或者偏亮。最后需要将亮度映射到【0,1】范围内如下所示:
当然结果并不是总让人满意,下面介绍局部tone mapping。
基于局部的tone apping
指的是像素所在位置不同,其映射后灰度值也可能不同的方法。像素点的映射结果,受到其他因素的影响。
局部方法的特点是:
1.映射前颜色相同的像素点,映射后颜色可能不同
2.局部算法一般较全局方法更复杂,速度相对较慢;
3.局部算法的性能一般优于全局方法;
4.会出现光晕等现象
现如今,色调映射方法的研究热点主要集中在局部方法的创新上
基于分离压缩的tone mapping:
一般有以下一些步骤:
1.将HDR经过filter得到base layer,再和其相减得到detail layer。
2.将base layer压缩成LDR,对detail layer不处理。
3.最后将上述处理后的layer合成最后的LDR图。
使用此算法应注意halo辉光现象。这是由于在decompose时使用了不保边的滤波器造成的。
参考:
1.http://blog.sina.com.cn/s/blog_6a5781350102w707.html
3.https://gameinstitute.qq.com/community/detail/127293
4.https://lealzhan.github.io/lealzhan.github.io/blog/2017/12/28/tone_mapping/