连云港市网站设计,上海网站建设yuue,金融公司网站方案,免费开源的cms问题定义
HDR字面意思是高动态范围High Dynamic Range#xff0c;而动态范围是高图像质量的五个要素之一#xff08;其余是1. 分辨率#xff0c;2.位深度#xff0c;3.帧速率#xff0c;4.色域#xff09;,而画质直接关系到人眼的主观感受。
如果将动态范围理解为量化的…问题定义
HDR字面意思是高动态范围High Dynamic Range而动态范围是高图像质量的五个要素之一其余是1. 分辨率2.位深度3.帧速率4.色域,而画质直接关系到人眼的主观感受。
如果将动态范围理解为量化的阶数阶数越高动态范围也越大。人眼看到的自然界内容都是人眼中虹膜 iris的调整大脑的不断解析所以可以同时看到各种亮度。而数字图像受限于CCD和ADC动态范围是有限的以8bit量化为例只有256个levels当同一幅图中同时有高亮和暗部时如此跨度无法同时表达就会导致亮度过曝暗部欠曝。至于胶卷胶卷相机也不能保证高动态范围因为暗部细节需要高曝光亮度细节需要低曝光而镜头无法保证这样。
解决思路
一般处理的思路是使用多张不同曝光 bexposure bracketing的照片提前 registered and aligned.融合得到HDR图。曝光值 exposure value (EV)也称作stops高一档表示光线light扩大为2倍。得到不同曝光的方法有改变曝光时间和改变光圈。但是光圈还会影响景深 不利于图像对齐等所以一般都是通过改变曝光时间得到不同ev的图像。
HDR图一般以浮点型float32表示对应的文件后缀是.hdr。但无耐屏幕的量化水平还是低为了在8bit机器上也能正常显示还需要将HDR图使用8bit表示这一过程称为tonemapping。胶卷时代也有tonemapping做法是在print阶段在暗室中使用 dodging and burning。
tonemapping
数字时代的tonemapping会把浮点型的数据转换为[0,1]区间要求输入输出都在这个区间这个过程会有截断。匹配场景与显示器之间只是tobemapping的一个应用tonemapping更广泛的作用是使得图像更加美观在降低整体对比度的同时保留局部对比度。根据每个像素使用的映射函数是否相同可以分为全局tonemapping和局部tonemapping。
全局的映射一旦估计得到最优的函数每个像素分别单独地被映射比如颜色反转和对比度降低。常见的全局映射有将[0,)映射到[0,1)。低亮的地方对比度被加强高亮的地方对比度被减弱。常见的还有gamma compression。人眼感受光线和彩色都是非线性的在更暗的色调下对相对亮度差异的敏感度更高。所以在亮的区域就没有必要浪费太多的比特去描述亮度的变化这也就是非线性gamma的原理。尽管伽马编码最初是为了补偿阴极射线管 (CRT) 显示器的输入输出特性而开发的但这并不是其在现代系统中的主要目的或优势。
局部映射映射算子在每个像素位置都是不同的会产生光晕halo或者振铃效应产生的图像比较sharp但是也可能会得到更好的效果。
OpenCV中的HDR算法1
Debvec和Robertson的算法都需要多张不同曝光图的同时还需要他们各自的曝光时间通过估计得到camera response function (CRF) 重建得到.hdr图 # Merge exposures to HDR image2 merge_debvec cv2.createMergeDebevec()3 hdr_debvec merge_debvec.process(img_list, timesexposure_times.copy())4 merge_robertson cv2.createMergeRobertson()5 hdr_robertson merge_robertson.process(img_list, timesexposure_times.copy()) Robertson这篇1999年的文章需要 initial calibration, where the camera response function is determined。
很多相机尤其是消费级相机的CRF不是线性的。胶卷对光照的响应就是非线性的这个曲线辐射带来的同时需要注意即便没有光照胶卷也会有较小的响应而光照太强会造成饱和。此外冲印扫描数字化都会带入非线性。对于数码相机虽然charge coupled device (CCD)本身是线性的但是从CCD的输出到写入之前又有很多的非线性比如12bit转为8bit为了显示的考虑使用非线性模拟胶卷等。无论是胶卷还是数码相机造成非线性最大问题是饱和点的存在。
总而言之就是相机处处都是非线性是多个非线性的结合composition of several nonlinear mappings所以需要先将这些非线性以一个函数描述出来。 Z表示位置i曝光时间索引j处的响应值可以理解为灰度值它是已知量。f就是要估计的非线性曲线假设它是单调递增的它的自变量是.
上面这个式子经过反函数取自然对数。可以得到优化函数的data term。第二项是平滑项是g函数的二阶导具体可以通过差分的方式实现。这就和拉普拉斯算子一样我们知道图像的拉普拉斯算子表示二阶导的过零点表示边缘信息。最终的优化求解就是线性最小二乘可以使用SVD求解。 OpenCV中的HDR算法2
当不需要得到.hdr图只需要有HDR效果的LDR图时可以使用exposure fusion (Mertens)算法该算法直接将多曝光的图进行融合不需要曝光值。融合的过程是使用不同曝光图中可用的部分这就需要一些指标来衡量图像质量这里选用的是对比度饱和度曝光质量。
对比度的计算使用拉普拉斯滤波器饱和度的计算使用三个通道的标准差曝光质量借助高斯曲线。使用乘积的方式将三者联系起来而不是使用线性的方法。得到权重之后再归一化就可以融合了。
融合的结果会出现不自然的线条这是因为权重变化太快而权重变化太快又是因为图像之间的曝光之间差异较大绝对强度值差异较大。融合使用的权重图可以使用高斯模糊也可以使用导向双边滤波但是效果都不太好。其实这是一个blending问题可以使用拉普拉斯金字塔进行融合。
referenceOpenCV: High Dynamic Range (HDR)
OpenCV3.0 HDR高动态范围示例代码以及用法 - 一度逍遥 - 博客园
High Dynamic Range Imaging — OpenCV 3.0.0-dev documentation
http://www.pauldebevec.com/Research/HDR/debevec-siggraph97.pdf
Recovering High Dynamic Range Radiance Maps from Photographs