Single Image Haze Removal Using Dark Channel Prior 论文阅读

2009年CVPR 这篇经典之作,现在普遍处理去雨去雾都会使用深度学习,cnn之类的算法。何凯明大佬这篇论文是完全从物理角度传统方法进行处理。

在计算机视觉和计算机图形中,下述方程所描述的雾图形成模型被广泛使用

                         

其中I(X)就是input(待去雾的图像),J(x)是clean image,即要输出的图像,A是全球大气光成分, t(x)为透射率。现在的已知条件就是I(X),要求目标值J(x),显然,这是个有无数解的方程。

作者提出了Dark Channel Prior这一理论。Dark Channel Prior:

在大多数的非天空的去雨中,有一些像素总有至少一个RGB通道极其低的值。即它的光强很小,接近于0。

根据文中所提到的,在现实生活中造成这种现象主要有三个因素:

  1. 汽车、建筑物和城市中玻璃窗户的阴影,或者是树叶、树与岩石等自然景观的投影;
  2. 色彩鲜艳的物体或表面,在RGB的三个通道中有些通道的值很低(比如绿色的草地/树/植物,红色或黄色的花朵/叶子,或者蓝色的水面)
  3. 颜色较暗的物体或者表面,例如灰暗色的树干和石头。总之,自然景物中到处都是阴影或者彩色,这些景物的图像的暗原色总是很灰暗的。

根据论文中的定义,对于任意的输入图像J,暗通道可用下式进行表达

                            

式5解释起来也很简单,将每个像素中RGB分量的最小值存入和原始图像相同的灰度图中,下图为论文中的实例,我们可以发现,雾越浓的位置其像素值越接近0.。

                                                             

大气散射模型

为了方便计算,假设一定区域内其传输值为一定值,设其为最小值。

                 

将上式稍作处理,变形为下式

             

假设在每一个窗口内透射率t(x)为常数,也就是假设在同一窗口的上的透射率是相同的,定义他为,且A值已经给定,然后对式(7)两边求两次最小值运算得到下式:

            

J是待求的无雾的图像,根据前述的暗原色先验理论有:

        

            

代入整理可得

这个模型受限于对于天空并不是最优,不过天空总是与大气光A十分相似,因此在天空区域,我们可以假定

            

即当RGB超过一定值时,我们可以近似将其一律处理为自然光。

论文中使用的是soft matting进行软处理,而在大神发表的论文guideFilter,这里便用引导滤波进行处理,调整半径,引导图与原图尽量相似。导向滤波的r值应当不小于进行最小值滤波半径r的4倍。

将图片优化。

即使是晴天白云,空气中也存在着一些颗粒,因此,看远处的物体还是能感觉到雾的影响,另外,雾的存在让人类感到景深的存在,因此,有必要在去雾的时候保留一定程度的雾,这可以通过在式(11)中引入一个在[0,1] 之间的因子,则式(11)修正为:

             

注:文中所有的测试结果依赖于:  ω=0.95

接下来,求出A自然光。

 上述推论中都是假设全球达气光A值时已知的,在实际中,我们可以借助于暗通道图来从有雾图像中获取该值。具体步骤如下:

      1) 从暗通道图中按照亮度的大小取前0.1%的像素。

          2) 在这些位置中,在原始有雾图像I中寻找对应的具有最高亮度的点的值,作为A值。

     到这一步,我们就可以进行无雾图像的恢复了。由式(1)可知:  J = ( I - A)/t + A  

     现在I,A,t都已经求得了,因此,完全可以进行J的计算。

     当投射图t 的值很小时,会导致J的值偏大,从而使得图片像素为0,因此一般可设置一阈值T0,当t值小于T0时,令t=T0,本文中所有效果图均以T0=0.1为标准计算。

              

最后,该方法也存在一定的局限性-烟雾成像模型可能是无效的,例如对天空地区的影响,以及地平线附近的蓝色色调。

以下是我根据论文的过程进行去雾的实现。

 以上的图片感觉处理的都不错。

真的是效果不太好,为了改善,我加上了这段代码,虽然能好一些,但还是效果不能令人满意。

if A > 240/255.0:
    A = 240/255.0  

最后效果如下图 

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在单个图像去雾算法中,使用暗通道先验方法(matlab single image haze removal using dark channel prior)是一种常用的方法。 该方法利用了图像中的暗像素值数据来对图像中的雾进行估计和消除。在图像中,由于雾的存在,远处的物体会有较高的亮度减弱,而靠近观察点的物体则有较高的亮度增强。由于光照强度不均匀,较暗的像素通常代表空气中的雾浓度较低,而较亮的像素通常代表雾浓度较高。 暗通道先验方法的基本思想是,通过查找图像中的暗像素值,可以估计出该区域中的最小远景透射率。透射率是雾的浓度与雾气对光的散射强度之间的比例关系。通过估计最小透射率,可以推断出雾浓度的分布,从而进行雾的去除。这个估计过程可以通过计算图像每个像素点的一个小窗口内的最小像素值来实现。 具体的暗通道先验算法包括以下步骤: 1. 对输入的雾图像进行预处理,包括图像的亮度归一化和颜色空间转换。 2. 计算每个像素点对应的暗通道,即选择一个固定大小的窗口,在窗口内找到最小像素值。 3. 估计最小透射率,最常用的方法是使用暗像素值和其相应的原始像素值计算得到。 4. 通过估计的透射率和原始图像进行重建,可以得到去雾后的图像。 暗通道先验方法是一种简单但有效的去雾算法,可以在图像中消除大部分的雾效果,提高图像的清晰度和可见度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值