准备一:暗通道先验理论:
做法:
1,首先求出每个像素RGB分量中的最小值,存入一副和原始图像大小相同的灰度图
2,然后再对这幅灰度图进行最小值滤波,滤波的半径由窗口大小决定,一般有WindowSize = 2 * Radius + 1
得到:
准备二:普遍认识的雾图形成模型:
公式:
···I(X) 是现在已经有的图像(待去雾的图像)
···J(x)是要恢复的无雾的图像
···A是全球大气光成分, t(x)为透射率。
···现在的已知条件就是I(X),求目标值J(x)
开始计算
显然,这是个有无数解的方程,想要获得我们需要的图片,就不得以加一些限制条件了
首先将(1)变形一下,得到:
上标C表示R/G/B三个通道
首先假设在每一个窗口内透射率t(x)为常数,定义为
给定A值,对(7)等式左右两边求最小值,有:
J是要求的无雾的图像,根据暗通道先验有:
根据这个暗通道先验理论,对其加上一个分母,就是:
这样就把(8)中等式右边第一项去掉了,然后平移得到
这样就求出了t(x),也就是透射率。
文章中指出,在现实生活中,是没有完全无雾的情况的,即使是晴朗的天气,空气中也漂浮着一些颗粒,因此,看远处的物体还是能感觉到雾的影响,另外,雾的存在让人类感到景深的存在,因此,有必要在去雾的时候保留一定程度的雾。所以给(11)中的减数加一个0-1之间的参数,得到:
本文中所有的测试结果依赖于: ω=0.95。
以上都是假设大气光A已知,在实际中,我们可以借助于暗通道图来从有雾图像中获取该值。具体步骤如下:
(1) 取前0.1%的暗通道图片的像素位置。
(2) 在这些位置中,在原始有雾图像I中寻找对应的具有最高亮度的点的值,作为A值。
到这一步,我们就可以进行无雾图像的恢复了。
由式(1)可知: J = ( I - A)/t + A
现在I,A,t都已经求得了,因此,完全可以进行J的计算。
当投射图t 的值很小时,会导致J的值偏大,从而使淂图像整体向白场过度,因此一般可设置一阈值T0,当t值小于T0时,令t=T0,本文中所有效果图均以T0=0.1为标准计算。
所以此时的最终公式为:
接下来看一下使用此公式的效果:
原图:
暗部图片
消光处理:
成品图:![在这里插入图片描述](https://img-blog.csdnimg.cn/20191105173541130.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5Mzc3MTM0,size_16,color_FFFFFF,t_70