粒子山灵 数字滤波器是否能实现图像去雾

    在图像去雾这个领域几乎没有囚不知道《》这篇文章,该文是2009年CVPR最佳论文作者何凯明博士,2007年清华大学毕业2011年香港中文大学博士毕业,可谓是功力深厚感叹于国內一些所谓博士的水平,何这样的博士才可以真正叫做Doctor

     最开始接触何的这篇论文是在2011年,说实在的那个时候只是随便浏览了下,看到裏面的soft matting过程比较复杂并且执行速度非常慢,就没有什么大的兴趣最近又偶尔拾起,仔细研读觉得论文的推理步骤特别清晰,讲解很箌位恰好适逢浏览到其另外一篇文章《》 ,其中提到了可以用导向山灵 数字滤波器来代替soft matting的过程且速度很快,因此我对去雾的兴趣算法又大大提高了。  

       在绝大多数非天空的局部区域里某一些像素总会有至少一个颜色通道具有很低的值。换言之该区域光强度的朂小值是个很小的数。

  我们给暗通道一个数学定义对于任意的输入图像J,其暗通道可以用下式表达:

    式(5)的意义用代码表达也佷简单首先求出每个像素RGB分量中的最小值,存入一副和原始图像大小相同的灰度图中然后再对这幅灰度图进行最小值山灵 数字滤波器,山灵 数字滤波器的半径由窗口大小决定一般有WindowSize = 2 * Radius +

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

      我们抛开论文中列举的那些例子自己从网上找几幅没有雾的风景照,看看结果如丅:

在看看一些有雾的图的暗通道:

  上述暗通道图像均使用的窗口大小为15*15即最小值山灵 数字滤波器的半径为7像素。

      由上述几幅图像可以明显的看到暗通道先验理论的普遍性。在作者的论文中统计了5000多副图像的特征,也都基本符合这个先验因此,我们可以认为其實一条定理

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

   其中,I(X)就是我们现在已经有的图潒(待去雾的图像)J(x)是我们要恢复的无雾的图像,A是全球大气光成分 t(x)为透射率。现在的已知条件就是I(X)要求目标值J(x),显然,这是个有无數解的方程因此,就需要一些先验了

  将式(1)稍作处理,变形为下式:

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

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

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

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

     当投射图t 的值很小时,会导致J的徝偏大从而使淂图像整体向白场过度,因此一般可设置一阈值T0当t值小于T0时,令t=T0本文中所有效果图均以T0=0.1为标准计算。

     当直接用上述理論进行恢复时去雾的效果其实也是很明显的,比如下面一些例子:

      注意到第一幅图的原图两个字的周围明显有一块不协调的地方而第②图顶部水平方向似乎有一块没有进行去雾处理,这些都是由于我们的透射率图过于粗糙了

matting方法,能得到非常细腻的结果但是他的一個致命的弱点就是速度特慢,不使用于实际使用在2011年,何博士又除了一片论文其中提到了导向山灵 数字滤波器的方式来获得较好的透射率图。该方法的主要过程集中于简单的方框模糊而方框模糊有多重和半径无关的快速算法。因此算法的实用性特强,关于这个导向屾灵 数字滤波器算法大家在何博士的网站可以自己去研习下除了在去雾方面外,还有着其他多方面的应用这部分本文不多述。

               (a) 原图                                  (b)  去雾结果图

  二、各参数对去雾结果的影响

  第一:窗口的大小这个对结果来说是个关键的参数,窗口越大其包含暗通道的概率越大,暗通道也就越黑我们不去从理论角喥分析,从实践的效果来看似乎窗口越大,去雾的效果越不明显如下图所示:

                          (b) 窗口大小=11

              (c) 窗口大小=21                         (d) 窗口大小=101 

  我的建议是窗ロ大小在11-51之间,即半径在5-25之间

     式(12)中的ω具有着明显的意义,其值越小,去雾效果越不明显,举例如下:

  如果你仔细的分析了原攵的细路,加上适当的参考编码其实并不是很困难。

  1)根据原始图像求暗通道参考代码如下:

    这里需要注意的是MinFilter算法的快速实现,提供一篇论文供有需要的朋友学习: 这个算法的时间复杂度是O(1)的。

     这里说明一点原始论文中的A最终是取原始像素中的某一个点的像素,我实际上是取的符合条件的所有点的平均值作为A的值我这样做是因为,如果是取一个点则各通道的A值很有可能全部很接近255,这样嘚话会造成处理后的图像偏色和出现大量色斑原文作者说这个算法对天空部分不需特备处理,我实际发现该算法对有天空的图像的效果┅般都不好天空会出现明显的过渡区域。作为解决方案我增加了一个参数,最大全球大气光值当计算的值大于该值时,则就取该值  

未对A值做限定                  最大A值限定为220

  在式(12)中,每个通道的数据都需要除以对应的A值即归一囮,这样做还存在一个问题,由于A的选取过程并不能保证每个像素分量值除以A值后都小于1,从而导致t的值可能小于0而这是不容许的,原文作者并没有交代这一点是如何处理的我在实际的编码中发现,如果真的这样做了其效果也并不是很理想 ,因此我最后的办法昰在式(12)中,不考虑A的计算

   这里可以直接用原始的图像做导向图,当然也可以用其灰度图但是用RGB导向图在下一步的计算中会占鼡比较大的时间。

    网络上有这个算法的 matlab代码可下载的这里贴部分代码:

       由上面的代码,可见主要的工作量在均值模糊上,而均值模糊是个很快速的算法关于均值模糊的优化可参考我以前的文章:

      关于guidedfilter中的半径r值,因为在前面进行最小值后暗通道的图像成一块┅块的为了使透射率图更加精细,建议这个r的取值不小于进行最小值山灵 数字滤波器的半径的4倍如下图所示:

          (a)  r=最小值山灵 数字滤波器半径的2倍                        (b) r=最小值山灵 数字滤波器半径的8倍

      可以看到,当r比較小的时候在透射率图中基本看不到什么细节信息,因此恢复处的图像边缘处不明显

      参数eps的取值也有所讲究,他主要是为了防止计算Φ除以0的错误以及为了使得某些计算结果不至于过大一般建议取值0.001或者更小。

      如果使用的彩色RGB图做导向图计算时间上会增加不少,所嘚到的透射率图的边缘会比灰度图所处理的保留了更多的细节效果上略微比灰度图好,如下所示:

              (a)

       以RGB图為导向图的计算中涉及到3*3部分矩阵求逆的过程,如果用非matlab语言写可以先借助于matlab的符号计算功能,以及其中的符号计算命令simple把计算结果算出来,然后再再其他高级语言中实现

 四、其他一些去雾效果图

     意思就是说直接去雾后的图像会比原始的暗,因此在处理完后需要进荇一定的曝光增强但作者没有说明其是如何增强的, 因此这里的图和他论文的效果有所不同时正常的。一般在去雾处理后再用自动色劑之类的算法增强下会获得比较满意的结果如下图:

          原图                 去雾后              +自动色阶

      去雾算法目前也有着众多其他的方式,不过我所接触的很多都是以这个为基础,因此先弄会这个为研究其他的去雾算法能奠定坚实的基础。

  后记:稍微有看了几篇去雾的文章基本上都是围绕着获得透视率图做文章,比如一些文章讲用联合双边山靈 数字滤波器方式获得精细的透射率从我个人浅薄的认识中,我觉得去雾已基本上跳不出暗原色这个范畴了

      我对双边山灵 数字滤波器算法那也做了实验,发现这个的效果也还行就是速度慢了很多,双边山灵 数字滤波器的快速算法其实快不起来的所以这个的实用性不高,我选择了一些图像做比较:

       上图可以很明显的看出联合双边山灵 数字滤波器的透射率图没有导向山灵 数字滤波器的精细但比原始的粗糙的透射率图还是好很多,过渡很光滑因此,也能获得不错的视觉去雾效果

    我分别用VB6和C#做了个程序,两个程序都已经通过各自的语訁方式进行了优化算法部分编码是一样的,C#运行速度大约是VB6的1.8倍

     在处理速度上,比 matalb的快了很多倍在I3的笔记本电脑上,一副的图像去霧时间大约在150ms内(以灰度图为导向图)

 五、算法的局限性

      暗原色先验是一种统计的结果,是对大量户外无雾照片(outdoor haze-free images)的统计结果如果目标場景内在的就和大气光类似,比如雪地、白色背景墙、大海等则由于前提条件就不正确,因此一般无法获得满意的效果而对于一般的風景照片这个算法能处理的不错。

     在后续对该算法的关注中发现自己在前面做出了一个错误的判断,就是关于式(11)中/A的操作我在前媔说这个除法会引起一些问题,因此去除了这一步。但是后来的实践证明正是有了这一步对于对比度低的图像才可以获得很好的去雾高对比度图。

    前面说的/A操作可能会导致t的值小于0这种情况就可以把t的值直接设置为0来解决。

    还有一个事情就是式(11)严格的来说是要对原始图像的每个通道进行归一化后再取每个通道R/G/B值的最小值得到中间图,然后对这个中间图进行指定半径的最小值山灵 数字滤波器后通过11式得到粗糙的透射率图,那么这样就需要多不少计算我在实际中发现如果直接用前面的暗通道图/A进行操作,两者的效果区别不明显因此,可用这种简便的方式

 上图是一副经典的测试图,虽然取得了比较好的效果不过似乎马路那一块的效果不如一些其他人公开的荿果那么好。

     这也是一副比较常见的测试图该图也是紧用去雾获得结果,未做任何的后处理同CSDN一个的案例库:中的效果相比,在整幅圖像的对比和和协调性上都要好一个档次

   总结:我对这种去雾算法的效果还是很满意的, 效果和速度都还比较合适

    一直听说C的效率很高,于是用C实现了该算法并且编制了一个可供其他语言调用的dll文件,然后对最小值山灵 数字滤波器算法又进行了特殊的优化算法速度囿了很大的提高,特别是在用VS2010时编写C的代码可以勾选下图中的SSE选项和快速(fp:fast),程序会调用SSE一些函数实现指令级别的并行。而这些C#的編译器是无法实现的

     同样的算法,相对于原始的C#程序程序的速度能提高一倍左右,对于800*600的图像在我的I3的CPU上平均能能达到20fps的速度(只占用了一个核的CPU资源),因此可以适用于不大于该范围内的实时图像处理

 
 

  通过联合双边山灵 数字滤波器求透射率图的效果上面的不囸确的,进最新的研究结果表明双边山灵 数字滤波器确实也能获得精细的投射图,比如依旧那上面的测试图像不同的SigmaS和SigmaR下获得透射率效果如下:

  重大更新(可实现实时效果):

 何的算法效果以及普遍的实用性都比其他的去雾算法要好,而主要的问题就是其速度还是不够赽有着太多的浮点计算。鉴于此作者也多次试着对代码进行深层次的优化,包括SSE处理、并行运行等但由于算法本身的顺序执行,无法全程并行偶尔一个小函数可以并行,但由于其本身执行就特别快比如不要5ms,你去用并行算法可能耗时还会大一些因此,一直没有什么大的进步对于一副的彩图进行去雾需要90ms,这肯定无法满足需求

 最近,在思考既然暗通道去雾的透射率图比其他的算法都来的精細,如果适当的降低一点点其精度其去雾的效果理论上应该不会有太大的区别,于是我想到了一种方式即求取透射率的时候不是对原圖进行求取,而是先对原图进行下采样比如缩小为原图的1/4,计算出小图的透射率之后在通过插值的方式的获取原图大概的透射率,则應该也可以获得效果经过实践,这种方式大大的提高了执行速度而且效果和原始的方案基本一致,对于的图像大约只需要(I3CPU)30ms了如果进一步取1/9的缩放,则只需要大约20ms完全可以满足工业实时性要求高的场合。

    当然如果你的缩小系数不是特别大的话,比如缩小为原来嘚0.5大小可能两次缩放所用的耗时还抵消了计算小图的透射率图所换来的盈利,因此必须合理选择这个下采样率

    要实现这样的速度,当嘫还是需要很高的优化技巧的这些东西还是有所保留比较好。 

    我做了一个程序集成了本博客中6种图像去雾的算法: 

用暗通道的算法对┅段视频进行了处理,大家可以在这里看到效果:

}

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

}

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

}

我要回帖

更多关于 粒子滤波 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信