Single Image Haze Removal Using Dark Channel Prior

准备一:暗通道先验理论:

做法:Single Image Haze Removal Using Dark Channel Prior
1,首先求出每个像素RGB分量中的最小值,存入一副和原始图像大小相同的灰度图
2,然后再对这幅灰度图进行最小值滤波,滤波的半径由窗口大小决定,一般有WindowSize = 2 * Radius + 1
得到:
Single Image Haze Removal Using Dark Channel Prior

准备二:普遍认识的雾图形成模型:

公式:
Single Image Haze Removal Using Dark Channel Prior
···I(X) 是现在已经有的图像(待去雾的图像)
···J(x)是要恢复的无雾的图像
···A是全球大气光成分, t(x)为透射率。
···现在的已知条件就是I(X),求目标值J(x)

开始计算

显然,这是个有无数解的方程,想要获得我们需要的图片,就不得以加一些限制条件了
首先将(1)变形一下,得到:
Single Image Haze Removal Using Dark Channel Prior
上标C表示R/G/B三个通道
首先假设在每一个窗口内透射率t(x)为常数,定义为 Single Image Haze Removal Using Dark Channel Prior
给定A值,对(7)等式左右两边求最小值,有:
Single Image Haze Removal Using Dark Channel Prior
J是要求的无雾的图像,根据暗通道先验有:
Single Image Haze Removal Using Dark Channel Prior
根据这个暗通道先验理论,对其加上一个分母,就是:
Single Image Haze Removal Using Dark Channel Prior
这样就把(8)中等式右边第一项去掉了,然后平移得到
Single Image Haze Removal Using Dark Channel Prior
这样就求出了t(x),也就是透射率。
文章中指出,在现实生活中,是没有完全无雾的情况的,即使是晴朗的天气,空气中也漂浮着一些颗粒,因此,看远处的物体还是能感觉到雾的影响,另外,雾的存在让人类感到景深的存在,因此,有必要在去雾的时候保留一定程度的雾。所以给(11)中的减数加一个0-1之间的参数,得到:
Single Image Haze Removal Using Dark Channel Prior
本文中所有的测试结果依赖于: ω=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为标准计算。
所以此时的最终公式为:
Single Image Haze Removal Using Dark Channel Prior
接下来看一下使用此公式的效果:
原图:
Single Image Haze Removal Using Dark Channel Prior
暗部图片
Single Image Haze Removal Using Dark Channel Prior
消光处理:
Single Image Haze Removal Using Dark Channel Prior

成品图:![在这里插入图片描述](https://img-blog.csdnimg.cn/20191105173541130.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5Mzc3MTM0,size_16,color_FFFFFF,t_70Single Image Haze Removal Using Dark Channel Prior