视频去雾效果,即对天空部分处理的不得了

     
在经典的两种去雾算法中,包括何凯明的暗通道去雾、Tarel的基于中值滤波的去雾以及部分遵照其他边缘保留的办法中,都有一个普遍存在的题目:即对天空部分处理的不好,天空往往会冒出较大的面积的纹理及分块现象。究其重要原因,依然因为天空部位基本上是不合乎暗通道去雾先验这多少个前决条件的。目前,针对这一题材,我查找到的紧要有以下几篇小说举行了处理:

      最新的意义见
http://video.sina.com.cn/v/b/124538950-1254492273.html
 

1、 精益求精的基于暗原色先验的图像去雾算法
作者: 蒋建国\侯天峰\齐美彬  
科尔多瓦外国语大学 2011

     
可处理录像的演示:视频去雾效果

原文:http://blog.csdn.net/laviewpbt/article/details/11555877

      2、Single image dehazing Algorithms
based on sky region segmentation, 2013  王广义
 得梅因药科高校(这篇作品似乎要到高校里才能下载);

   
 在图像去雾这么些圈子,几乎从未人不明白《Single Image Haze Removal Using
Dark Channel
Prior
》这篇著作,该文是二零零六年CVPR最佳随想。作者何凯明硕士,二〇〇七年交大高校毕业,二〇一一年香江闽南语大学硕士毕业,可谓是功力深厚,惊叹于国内有的所谓硕士的水准,何这样的硕士才得以真正称之为Doctor。

 最新的效率见
http://video.sina.com.cn/v/b/124538950-1254492273.html
 

      第一篇随笔扩大了一个可控参数K,
用来调节每个像素处的透射率:

    
关于何学士的部分资料和舆论,我们可以访问这里:http://research.microsoft.com/en-us/um/people/kahe/

 
 
 可处理视频的演示:录像去雾效果

 

    
最开头接触何的这篇杂谈是在二零一一年,说实在的万分时候,只是无论浏览了下,看到里边的soft
matting过程相比较复杂,并且实施进度特别慢,就一向不怎么大的兴趣。近年来又奇迹拾起,仔细研读,觉得小说的演绎步骤特别明晰,讲解很成功。恰好适逢浏览到其另外一篇作品《Guided
Image
Filtering
》 ,其中涉及了可以用导向滤波来替代soft
matting的历程,且速度高速,因而,我对去雾的兴趣算法又大大提升了。
 

   
在图像去雾那多少个世界,几乎从未人不知底《Single Image Haze Removal Using
Dark Channel
Prior
》这篇作品,该文是二零零六年CVPR最佳散文。作者何凯明大学生,二〇〇七年武大大学毕业,二零一一年香江闽南语大学硕士毕业,可谓是功夫深厚,咋舌于国内一些所谓研究生的档次,何这样的硕士才足以真正称之为Doctor。

         
 图片 1

     本文紧要上是对《Single Image Haze
Removal Using Dark Channel
Prior》的翻译、整理、及片段解释。假设您的英文水准好,提议看原稿可能来的更爽些。

    
关于何大学生的一对素材和随笔,我们可以访问这里:http://research.microsoft.com/en-us/um/people/kahe/

 

    一、杂谈思想的粗略描述 

    
最开端接触何的那篇论文是在二〇一一年,说其实的可怜时候,只是随便浏览了下,看到里面的soft
matting过程相比复杂,并且实施进度万分慢,就不曾什么大的兴味。如今又奇迹拾起,仔细研读,觉得杂谈的推理步骤特别清晰,讲解很到位。恰好适逢浏览到其另外一篇随笔《Guided
Image
Filtering
》 ,其中涉嫌了足以用导向滤波来代替soft
matting的过程,且速度快速,因而,我对去雾的兴味算法又大大进步了。
 

     
当|I(x)-A|<k时,认为那么些区域或者是天上,重新总结透射率(扩充透射率),|I(x)-A|>k处,则觉得是吻合暗通道先验的区域,透射率不变。

     首先看望暗通道先验是什么样:

     本文紧要上是对《Single Image Haze
Removal Using Dark Channel
Prior》的翻译、整理、及部分解释。若是您的英文水准好,提议看原稿可能来的更爽些。

     
如果K取值为0,则一定于原有的透射率公式。

      
在多数非天空的片段区域里,某部分像素总会有起码一个颜色通道具有很低的值。换言之,该区域光强度的最小值是个很小的数。

    一、小说思想的简便描述 

     
上边的做法是比较合理的,因为相似处境下大气光A的取值和天上部分应该是非凡类似的,而这些符合暗通道的地方则离家天空,关于这多少个算法的机能,我在本人的《Single
Image Haze Removal Using Dark Channel
Prior》一文中图像去雾算法的法则、实现、效果(速度可实时)
一文的实例工程中早已提供了测试程序。

  大家给暗通道一个数学概念,对于随意的输入图像J,其暗通道可以用下式表明:

     首先看望暗通道先验是怎么着:

     
 第二篇著作的思路则是进展天空分割。对私分后的两有的透射率做不同的处理,那么这些的重中之重就在于天空特征的领取。作者原文是经过以下多少个步骤来实现的。

                                   图片 2 

      
在大部分非天空的一部分区域里,某部分像素总会有起码一个颜料通道具有很低的值。换言之,该区域光强度的最小值是个很小的数。

   
 图片 3

      式中Jc意味着彩色图像的各样通道 ,Ω(x)表示以像素X为骨干的一个窗口。 

  我们给暗通道一个数学概念,对于自由的输入图像J,其暗通道能够用下式表明:

   
 图片 4

   
式(5)的含义用代码表明也很粗略,首先求出每个像素RGB分量中的最小值,存入一副和原来图像大小一样的灰度图中,然后再对这幅灰度图举行小小的值滤波,滤波的半径由窗口大小决定,一般有WindowSize
= 2 * Radius + 1;          

                                   图片 5 

 

      暗通道先验的辩护指出:

      式中Jc代表彩色图像的各样通道 ,Ω(x)表示以像素X为着力的一个窗口。 

   
 图片 6

                                                           
图片 7           

   
式(5)的含义用代码表明也很简单,首先求出每个像素RGB分量中的最小值,存入一副和原有图像大小一样的灰度图中,然后再对这幅灰度图举行小小的值滤波,滤波的半径由窗口大小决定,一般有WindowSize
= 2 * Radius + 1;          

  对这多少个步骤我举办了粗糙的点评吧。

     实际生活中造成暗原色中低通道值紧要有两个要素:a)汽车、建筑物和都市中玻璃窗户的黑影,或者是树叶、树与岩石等当然山水的影子;b)色彩鲜艳的实体或外部,在RGB的五个通道中微微通道的值很低(比如红色的草地/树/植物,黑色或红色的繁花/叶子,或者棕色的水面);c)颜色较暗的物体或者表面,例如灰暗色的树枝和石块。不言而喻,自然风景中处处都是影子或者彩色,这一个景点的图像的暗原色总是很惨淡的。

      暗通道先验的答辩提议:

     
第一步我认为最有价值,直接在原有数据判断天空不是很好做,作者考察到天空部分完全来说是相比平缓的,也就是隔壁像素之间转变不大,由此用梯度来表示则更易于辨别,梯度值越小则声明图像那一块越光滑。

     
我们抛开杂文中罗列的那一个例子,自己从网上找几幅没有雾的风景照,看看结果如下:

                                                         
  图片 8           

     
第二步则设定一个阈值来初阶判断某处是否属于天空,这些阈值作者取的是0.02,量化到unsigned
char范围则基本对应5。

   图片 9    
图片 10

     实际生活中造成暗原色中低通道值紧要有多少个元素:a)汽车、建筑物和城市中玻璃窗户的阴影,或者是树叶、树与岩石等当然风景的黑影;b)色彩鲜艳的物体或外部,在RGB的六个通道中有些通道的值很低(比如肉色的草地/树/植物,肉色或粉色的繁花/叶子,或者粉红色的水面);c)颜色较暗的物体或者表面,例如灰暗色的树枝和石块。不言而喻,自然景观中处处都是影子或者彩色,这一个风景的图像的暗原色总是很惨淡的。

     
第三步对先导的疆界举行下小范围的扩大。

   图片 11    
图片 12

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

     
第四步对细分后的图的各种联通区域总括其原始图像在对应地点的像素的平分亮度,倘使超出阈值T则保留,T这里作者取0.81,对应整数205左右。

   图片 13    
图片 14

   图片 15 
   图片 16

     
第五步取符合第四步条件的最大的联通区域作为识其余苍天区域。

                     
一些无雾的图样                                                                               
  其暗通道

   图片 17     图片 18

     
第六步是为着以防部分漏检点,把在穹幕区域周边的片段像素在越来越开展分辨,符合条件的则加到天空区域中。

在探望一些有雾的图的暗通道:

   图片 19     图片 20

     
第七步是局部被完好包含在天宇中还未被认为是天幕的小区域添加到天空中。

   图片 21  
图片 22

                     
一些无雾的图片                                                                               
  其暗通道

   
 个人认为,除了第一步、第二步、第四步有必不可少外,其他的不需要这样处理。特别是第五步的拍卖会促成天空部位的漏检。比如下边的流水线示意图的原图,假使用上述办法自然会促成左上角处小一些天空完全不见掉。此外一个题目就是,联通区域的乘除如故相比耗时的。

   图片 23  
图片 24

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

     我的做法是: 

          一些有雾的图样                                                                              
   其暗通道

   图片 25   图片 26

   
 1、将图像转换为灰度:这里为保存更多的边缘音讯,可以设想使用所有相比较度保留功效或显著性保留效率的一对去色算法。

  上述暗通道图像均采纳的窗口大小为15*15,即最小值滤波的半径为7像素。

   图片 27   图片 28

   
 2、求灰度图像的梯度信息(其实就足以用常用的有的边缘检测算子实现);

     
由上述几幅图像,可以明确的来看暗通道先验理论的普遍性。在笔者的舆论中,统计了5000多副图像的特性,也都基本吻合这一个先验,因此,我们得以认为实际一条定律。

          一些有雾的图形                                                                              
   其暗通道

   
 3、对梯度新闻进行适量的去噪和滤波;

     
有了那些先验,接着就需要开展局部数学方面的演绎来最终化解问题。

  上述暗通道图像均拔取的窗口大小为15*15,即最小值滤波的半径为7像素。

   
 4、遵照设定梯度阈值和亮度阈值对梯度信息进行区分;

  首先,在电脑视觉和处理器图形中,下述方程所讲述的雾图形成模型被周边采纳:

     
由上述几幅图像,可以明确的看来暗通道先验理论的普遍性。在作者的杂谈中,总括了5000多副图像的特色,也都基本符合那个先验,因此,我们可以认为实际一条定律。

   
 5、对界别后的图进行高斯羽化处理(可选的)。

                                                  
图片 29

     
有了这些先验,接着就需要开展局部数学方面的演绎来最终化解问题。

    整个工艺流程的示意图如下所示:

 
 其中,I(X)就是大家现在一度部分图像(待去雾的图像),J(x)是我们要復苏的无雾的图像,A是全球大气光成分,
t(x)为透射率。现在的已知条件就是I(X),要求目的值J(x),显著,那是个有为数不少解的方程,由此,就需要有些先验了。

  首先,在计算机视觉和处理器图形中,下述方程所描述的雾图形成模型被周边采取:

图片 30  图片 31 图片 32

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

                                                
  图片 33

              原图                                    灰度图                                  梯度音信

                                                   
图片 34

 
 其中,I(X)就是大家前几日已经有些图像(待去雾的图像),J(x)是大家要还原的无雾的图像,A是举世大气光成分,
t(x)为透射率。现在的已知条件就是I(X),要求目的值J(x),显明,这是个有很多解的方程,由此,就需要有的先验了。

图片 35 图片 36 图片 37

   
如上所述,上标C表示R/G/B五个通道的意思。

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

            稍作去噪                                 先导天空识别                           
          举办羽化

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

                                                 
  图片 39

     
作为相比较,我们在提交几幅图的天空的辨别功效:

                                 
图片 40

   
如上所述,上标C表示R/G/B五个通道的意思。

 
 图片 41
  图片 42

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

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

 
 图片 44  图片 45

                                              
图片 46

                               
  图片 47

 对于这几个基本不存在天空的图,检测的结果如下:

     由此,可推导出:

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

 
 图片 48  图片 49

                                                        
图片 50

                                               图片 51

  一片黑,因此,完全不影响结果。

   
把式(10)带入式(8)中,得到:

     由此,可推导出:

     
得到天空区域后,原文作者将天空区域的透射率图统一的设置成了一个固定值,我以为这么糟糕,依然应该依据具体的值做适当的更正。
在自我上述的操作中,拿到的天空去区域是一副蒙版图,某个点并不一定是全然属于天空或完全不属于。由此,我就可以按照这些值来+
暗通道求得的值举办一下Alpha混合,如下所示:

                                                 图片 52

                                                     
   图片 53

  DarkChannel[Y]= (SkyPresrve *
Sky[Y] + DarkChannel[Y] * (255 – Sky[Y])) / 255 ;    

    这就是透射率图片 54的预估值。

    把式(10)带入式(8)中,得到:

  其中SkyPresrve就仿佛于杂谈的定势透射率值,是用户指定的,在上式中,若Sky[255],即完全属于天空,则改点的透射率即为固定值,若Sky[Y]=0,即完全不属于天空,总括式的值不变,不影响健康去雾。

   
在现实生活中,虽然是晴天白云,空气中也存在着部分微粒,由此,看远处的实体仍可以感觉到雾的熏陶,另外,雾的存在令人类感到景深的存在,由此,有必不可少在去雾的时候保留一定水准的雾,这可以通过在式(11)中引入一个在[0,1]
之间的因子,则式(11)修正为:

                                                 图片 55

     
其它关于大气光值A的猜测,论文指出了以得到的天幕部位的像素的平均值作为A,那也是充裕合情的,然而在骨子里处理时,针对有些完全没有天空部分的图像,可能检测到的天幕区域很小(显然属于误检,但是程序不清楚的),这个时候以此为大气光值,也是不客观的。为此,我的处理模式先总括天空部位总括的A值,然后在检测天空像素占整个图像的比例,假若比例小于5%,则依然以何凯明那种统计A的方法展开。

                                              
图片 56

    那就是透射率图片 57的预估值。

     
还有一步,杂谈也事关了,就是这一个校正的手续都不可能不在refine阶段在此之前做,简单来说,就是亟需在开展导向滤波前做。这样利用导向滤波的平滑功用,可以将天空和非天空分界部位的不平易现象肯定程度上弥补掉);

     本文中存有的测试结果依赖于: 
ω=0.95。

   
在现实生活中,即便是清通晓云,空气中也存在着部分颗粒,因而,看远处的物体还能感觉到雾的震慑,其它,雾的留存令人类感到景深的留存,因而,有必不可少在去雾的时候保留一定程度的雾,那足以因此在式(11)中引入一个在[0,1]
之间的因子,则式(11)修正为:

  为了增进速度,也可以运用我在何这篇散文的辨析的博文中的情势,举行下采样处理,然后在上采样。

    
上述推论中都是只要全球达气光A值时已知的,在实际上中,大家得以依赖暗通道图来从有雾图像中得到该值。具体步骤如下:

                                          
    图片 58

     
作为相比,我们提交直接用何的艺术贯彻的效益和用天空识别模式处理的对立统一效果:

      1)
从暗通道图中遵从亮度的尺寸取前0.1%的像素。

     本文中所有的测试结果看重于: 
ω=0.95。

  图片 59 图片 60  图片 61

          2)
在这些职务中,在本来有雾图像I中找寻对应的持有最高亮度的点的值,作为A值。

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

   
  图片 62 图片 63 图片 64

    
到这一步,大家就足以开展无雾图像的复原了。由式(1)可知:  J = ( I –
A)/t + A  

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

   
  图片 65 图片 66 图片 67

     现在I,A,t都已经求得了,因此,完全可以开展J的计量。

          2)
在这些职务中,在原来有雾图像I中查找对应的有着最高亮度的点的值,作为A值。

   
 图片 68  图片 69 图片 70

     当投射图t
的值很时辰,会招致J的值偏大,从而使淂图像全部向白场过度,由此一般可设置一阈值T0,当t值小于T0时,令t=T0,本文中拥有功用图均以T0=0.1为业内测算。

    
到这一步,大家就能够举办无雾图像的还原了。由式(1)可知:  J = ( I –
A)/t + A  

   
 图片 71  图片 72 图片 73

     因而,最终的回复公式如下:

     现在I,A,t都已经求得了,由此,完全可以拓展J的乘除。

               原图                                    何的去雾                             本文结果(SkyPresrve
=100)

                              
 图片 74

     当投射图t
的值很刻钟,会造成J的值偏大,从而使淂图像全部向白场过度,因而一般可设置一阈值T0,当t值小于T0时,令t=T0,本文中有所效用图均以T0=0.1为标准统计。

  有上述相比较可见,在保障了天空的时候,和天上交接的地点的去雾程度也适用的有所弱化。

    
当直接用上述申辩举办回复时,去雾的效应实在也是很引人注目的,比如下边一些事例:

     因而,最后的死灰复燃公式如下:

 
 在杂文的末尾,作者也关系了去雾的图像展现相比较昏暗,为此,做了弹指间拍卖:

   图片 75   
图片 76

                              
 图片 77

     
  图片 78

   图片 79  
 图片 80

    
当直接用上述辩解进行还原时,去雾的效用其实也是很肯定的,比如上面一些例证:

  即在HSV空间,对V分量举办CLAHE增强,然后在转移到RGB空间,这种办法对有些图像确实有很显明的滋长功用,不过有些图可能又会增长噪音,因而仍然基于实际意况采用性的拍卖呢。

                
有雾图                                           
 去雾图

   图片 81    图片 82

  示例程序:http://files.cnblogs.com/Imageshop/HazeRemovalWithSkyRecognition.rar

      注意到第一幅图的原图五个字的方圆显著有一块不调和的地点,而第二图顶部水平方向似乎有一块没有进展去雾处理,这几个都是由于我们的透射率图过于粗糙了。

   图片 83  
 图片 84

 
 图片 85

     
要赢得越来越精致的透射率图,何研究生在篇章中提出精通soft
matting方法,能收获特别细致的结果。不过她的一个沉重的败笔就是速度特慢,不应用于实际利用。在二零一一年,何研究生又除了一片散文,其中涉及了导向滤波的艺术来拿到较好的透射率图。该方法的显要过程集中于简单的方框模糊,而方框模糊有多重和半径无关的迅猛算法。因而,算法的实用性特强,关于那个导向滤波算法大家在何学士的网站能够友善去研习下,除了在去雾方面外,还怀有别样多地点的利用,这有的本文不多述。

                
有雾图                                           
 去雾图

 

     使用了导向滤波后的去雾效果:

      注意到第一幅图的原图五个字的方圆显著有一块不和谐的地点,而第二图顶部水平方向似乎有一块没有展开去雾处理,这么些都是由于咱们的透射率图过于粗糙了。

图片 86

  图片 87  
图片 88

     
要收获越来越精致的透射率图,何大学生在篇章中指出了解soft
matting方法,能获取特别细致的结果。然而她的一个沉重的缺陷就是速度特慢,不应用于实际利用。在二〇一一年,何大学生又除了一片小说,其中涉及了导向滤波的主意来获取较好的透射率图。该措施的重中之重过程集中于简单的方框模糊,而方框模糊有多重和半径无关的急忙算法。由此,算法的实用性特强,关于那么些导向滤波算法我们在何学士的网站可以团结去研习下,除了在去雾方面外,还装有别样多地点的使用,这部分本文不多述。

****************************笔者:
laviewpbt   时间: 2014.8.12    联系QQ:  33184777
转载请保留本行信息**********************

  图片 89  
图片 90 

     使用了导向滤波后的去雾效果:

  

         
  使用原有的预估透射率图                               
 使用导向滤波后的透射率图

  图片 91   图片 92

  图片 93   
图片 94

  图片 95   图片 96 

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

         
  使用原有的预估透射率图                               
 使用导向滤波后的透射率图

  图片 97    图片 98

  图片 99    图片 100

                (c)   
暗通道图                          (d) 导向图
(原始图像的灰度图)

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

  图片 101  
 图片 102

  图片 103    图片 104

                (e) 
 预估透射率图                       (f)   使用导向滤波后的透射率图

                (c)   
暗通道图                          (d) 导向图
(原始图像的灰度图)

  二、各参数对去雾结果的震慑

  图片 105  
 图片 106

  第一:窗口的分寸。那些对结果来说是个重大的参数,窗口越大,其富含暗通道的几率越大,暗通道也就越黑。大家不去从理论角度分析,从举办的职能来看,似乎窗口越大,去雾的效能越不明朗,如下图所示:

                (e) 
 预估透射率图                       (f)   使用导向滤波后的透射率图

   图片 107   
 图片 108

  二、各参数对去雾结果的震慑

                              (a)
原始图像                            (b)
窗口大小=11

  第一:窗口的高低。那些对结果来说是个重大的参数,窗口越大,其包含暗通道的概率越大,暗通道也就越黑。大家不去从理论角度分析,从履行的遵守来看,似乎窗口越大,去雾的效果越不强烈,如下图所示:

   图片 109  
图片 110

   图片 111   
 图片 112

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

                              (a)
原始图像                            (b)
窗口大小=11

  我的指出是窗口大小在11-51里面,即半径在5-25里面。

   图片 113   图片 114

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

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

  
图片 115   图片 116

  我的提出是窗口大小在11-51期间,即半径在5-25期间。

                                    (a)
原始图像                                  
(b)    ω=0.5         

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

  
图片 117   图片 118    

   图片 119   图片 120

                                       (c)   
ω=0.8                                                                  
    (d)    ω=1 

                                    (a)
原始图像                                  
(b)    ω=0.5         

    三:编码的步骤

   图片 121   图片 122    

  假如您仔细的解析了初稿的细路,加上适当的参照,编码其实并不是很困难。

                                       (c)   
ω=0.8                                                                  
    (d)    ω=1 

  1)依照原有图像求暗通道,参考代码如下:

    三:编码的步调

    for (Y = 0, DarkPt = DarkChannel; Y < Height; Y++)
    {
        ImgPt = Scan0 + Y * Stride;
        for (X = 0; X < Width; X++)
        {
            Min = *ImgPt;
            if (Min > *(ImgPt + 1)) Min = *(ImgPt + 1);
            if (Min > *(ImgPt + 2)) Min = *(ImgPt + 2);
            *DarkPt = Min;
            ImgPt += 3;
            DarkPt++;
        }
    }

    MinFilter(DarkChannel, Width, Height, Radius);

  倘诺您细心的解析了初稿的细路,加上适当的参阅,编码其实并不是很忙绿。

    这里需要专注的是MinFilter算法的迅猛实现,提供一篇杂谈供有需要的敌人学习:STREAMING
MAXIMUM-MINIMUM FILTER USING NO MORE THAN THREE COMPARISONS PER
ELEMENT
 。这么些算法的时刻复杂度是O(1)的。

  1)依据原有图像求暗通道,参考代码如下:

     
2)按文中所描述的算法自动获取全球大气光的值。

    for (Y = 0, DarkPt = DarkChannel; Y < Height; Y++)
    {
        ImgPt = Scan0 + Y * Stride;
        for (X = 0; X < Width; X++)
        {
            Min = *ImgPt;
            if (Min > *(ImgPt + 1)) Min = *(ImgPt + 1);
            if (Min > *(ImgPt + 2)) Min = *(ImgPt + 2);
            *DarkPt = Min;
            ImgPt += 3;
            DarkPt++;
        }
    }

    MinFilter(DarkChannel, Width, Height, Radius);

     这里表达一些,原始杂谈中的A最后是取原始像素中的某一个点的像素,我其实是取的符合条件的所有点的平均值作为A的值,我这样做是因为,若是是取一个点,则各通道的A值很有可能所有很接近255,这样的话会造成处理后的图像偏色和产出大量色斑。原文作者说这些算法对天空部分不需特备处理,我实在发现该算法对有天空的图像的效率一般都不好。天空会油然则生显明的过渡区域。作为解决方案,我扩充了一个参数,最大全球大气光值,当总计的值超过该值时,则就取该值。
 

    这里需要留意的是MinFilter算法的高速实现,提供一篇杂谈供有需要的对象学习:STREAMING
MAXIMUM-MINIMUM FILTER USING NO MORE THAN THREE COMPARISONS PER
ELEMENT
 。那一个算法的刻钟复杂度是O(1)的。

    图片 123  
图片 124  
 图片 125

     
2)按文中所讲述的算法自动获取全球大气光的值。

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

     这里表明某些,原始杂谈中的A最终是取原始像素中的某一个点的像素,我实在是取的符合条件的所有点的平均值作为A的值,我这么做是因为,如要是取一个点,则各通道的A值很有可能所有很相近255,这样的话会招致处理后的图像偏色和产出大量色斑。原文作者说这多少个算法对天空部分不需特备处理,我骨子里发现该算法对有天空的图像的效益一般都不佳。天空会冒出彰着的连通区域。作为解决方案,我增添了一个参数,最大全球大气光值,当总计的值大于该值时,则就取该值。  

       3)
按式(12)总括预估的透射率图。

    图片 126   图片 127  
 图片 128

  在式(12)中,每个通道的数目都亟待除以对应的A值,即归一化,那样做,还设有一个问题,由于A的选料过程,并无法保证每个像素分量值除以A值后都低于1,从而导致t的值可能小于0,而这是不容许的,原文作者并从未交代这一点是何等处理的。我在实际的编码中发现,假如确实如此做了,其功效也并不是很理想 ,由此,我最终的法门是在式(12)中,不考虑A的乘除。

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

        4)总括导向滤波图。

       3)
按式(12)总结预估的透射率图。

  
这里可以直接用原始的图像做导向图,当然也得以用其灰度图,可是用RGB导向图在下一步的推断中会占用比较大的日子。

  在式(12)中,每个通道的数额都亟待除以对应的A值,即归一化,这样做,还设有一个题材,由于A的挑选过程,并无法确保每个像素分量值除以A值后都低于1,从而导致t的值可能小于0,而这是不容许的,原文作者并没有交代这一点是何许处理的。我在实际的编码中窥见,假诺的确这么做了,其效果也并不是很理想 ,由此,我最后的艺术是在式(12)中,不考虑A的精打细算。

        5)按照《Guided Image
Filtering
》论文中的公式(5)、(6)、(8)编码总结拿到迷你的透射率图。

        4)总括导向滤波图。

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

  
这里可以直接用原来的图像做导向图,当然也得以用其灰度图,可是用RGB导向图在下一步的总计中会占用相比较大的光阴。

  function q = guidedfilter(I, p, r, eps)
  %   GUIDEDFILTER   O(1) time implementation of guided filter.
  %
  %   - guidance image: I (should be a gray-scale/single channel image)
  %   - filtering input image: p (should be a gray-scale/single channel image)
  %   - local window radius: r
  %   - regularization parameter: eps

  [hei, wid] = size(I);
  N = boxfilter(ones(hei, wid), r); % the size of each local patch; N=(2r+1)^2 except for boundary pixels.

  % imwrite(uint8(N), 'N.jpg');
  % figure,imshow(N,[]),title('N');
  

  mean_I = boxfilter(I, r) ./ N;
  mean_p = boxfilter(p, r) ./ N;
  mean_Ip = boxfilter(I.*p, r) ./ N;
  cov_Ip = mean_Ip - mean_I .* mean_p; % this is the covariance of (I, p) in each local patch.

  mean_II = boxfilter(I.*I, r) ./ N;
  var_I = mean_II - mean_I .* mean_I;

  a = cov_Ip ./ (var_I + eps); % Eqn. (5) in the paper;
  b = mean_p - a .* mean_I; % Eqn. (6) in the paper;

  mean_a = boxfilter(a, r) ./ N;
  mean_b = boxfilter(b, r) ./ N;

  q = mean_a .* I + mean_b; % Eqn. (8) in the paper;
  end

        5)按照《Guided Image
Filtering
》论文中的公式(5)、(6)、(8)编码总括得到迷你的透射率图。

      
由地点的代码,可见,紧要的工作量在均值模糊上,而均值模糊是个很便捷的算法,关于均值模糊的优化可参照我原先的篇章:彩色图像高速模糊之懒惰算法。

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

      还有少数就是,上述总计需要在[0,1]限定内举行,也就是说导向图和预估的透射率图都不可能不从[0,255]先映射到[0,1]在展开测算。

  function q = guidedfilter(I, p, r, eps)
  %   GUIDEDFILTER   O(1) time implementation of guided filter.
  %
  %   - guidance image: I (should be a gray-scale/single channel image)
  %   - filtering input image: p (should be a gray-scale/single channel image)
  %   - local window radius: r
  %   - regularization parameter: eps

  [hei, wid] = size(I);
  N = boxfilter(ones(hei, wid), r); % the size of each local patch; N=(2r+1)^2 except for boundary pixels.

  % imwrite(uint8(N), 'N.jpg');
  % figure,imshow(N,[]),title('N');
  

  mean_I = boxfilter(I, r) ./ N;
  mean_p = boxfilter(p, r) ./ N;
  mean_Ip = boxfilter(I.*p, r) ./ N;
  cov_Ip = mean_Ip - mean_I .* mean_p; % this is the covariance of (I, p) in each local patch.

  mean_II = boxfilter(I.*I, r) ./ N;
  var_I = mean_II - mean_I .* mean_I;

  a = cov_Ip ./ (var_I + eps); % Eqn. (5) in the paper;
  b = mean_p - a .* mean_I; % Eqn. (6) in the paper;

  mean_a = boxfilter(a, r) ./ N;
  mean_b = boxfilter(b, r) ./ N;

  q = mean_a .* I + mean_b; % Eqn. (8) in the paper;
  end

     
关于guidedfilter中的半径r值,因为在前面举办小小的值后暗通道的图像成一块一块的,为了使透射率图更加小巧,提议这么些r的取值不小于进行小小的值滤波的半径的4倍,如下图所示:

      
由地点的代码,可见,重要的工作量在均值模糊上,而均值模糊是个很便捷的算法,关于均值模糊的优化可参考我原先的稿子:彩色图像高速模糊之懒惰算法。

   
图片 129    
图片 130

      还有少数就是,上述总结需要在[0,1]范围内举行,也就是说导向图和预估的透射率图都无法不从[0,255]先映射到[0,1]在开展测算。

          (a) 
r=最小值滤波半径的2倍
                       (b) r=最小值滤波半径的8倍

     
关于guidedfilter中的半径r值,因为在后边进行小小的值后暗通道的图像成一块一块的,为了使透射率图更加精细,提出那个r的取值不低于举行小小的值滤波的半径的4倍,如下图所示:

      可以看出,当r相比较小的时候,在透射率图中着力看不到什么细节音信,由此恢复生机处的图像边缘处不明确。

    图片 131  
  图片 132

     
参数eps的取值也享有青睐,他着重是为了防备总计中除以0的不当以及为了使得一些总计结果未必过大,一般提议取值0.001要么更小。

          (a) 
r=最小值滤波半径的2倍
                       (b) r=最小值滤波半径的8倍

     
尽管利用的绚丽多彩RGB图做导向图,总结时间上会增添很多,所的到的透射率图的边缘会比灰度图所拍卖的保存了更多的细节,效果上略微比灰度图好,如下所示:

      可以见见,当r相比较小的时候,在透射率图中基本看不到什么细节音讯,因而恢复生机处的图像边缘处不明确。

    
图片 133  
 图片 134

     
参数eps的取值也拥有侧重,他第一是为着以防总括中除以0的错误以及为了使得一些总计结果未必过大,一般提议取值0.001或者更小。

              (a)
原图                                                                               
    (b)预估的透射率图

     
假诺选拔的五彩RGB图做导向图,总计时间上会增添很多,所的到的透射率图的边缘会比灰度图所拍卖的保存了更多的细节,效果上略微比灰度图好,如下所示:

    
图片 135   
图片 136

     图片 137  
 图片 138

                      
(c)使用灰度图为导向图得到的透射率图                      
    (d)使用RGB图为导向图得到的透射率图

              (a)
原图                                                                               
    (b)预估的透射率图

     图片 139   
图片 140

  
  图片 141    图片 142

           (e)灰度图为导向图对应的去雾效果    
                       
  (f)RGB图导向图对应的去雾效果

                      
(c)使用灰度图为导向图得到的透射率图                      
    (d)使用RGB图为导向图拿到的透射率图

       以RGB图为导向图的估量中,涉及到3*3部分矩阵求逆的过程,假若用非matlab语言写,可以先借助于matlab的符号总结功用,以及中间的符号计占星令simple,把总计结果算出来,然后再再其他高级语言中贯彻。

     图片 143    图片 144

       (6)
按式(22)举办无雾图像的过来。

           (e)灰度图为导向图对应的去雾效果    
                       
  (f)RGB图导向图对应的去雾效果

 四、其他一些去雾效果图

       以RGB图为导向图的乘除中,涉及到3*3有些矩阵求逆的进程,假诺用非matlab语言写,可以先借助于matlab的符号总计效率,以及中间的符号计算命令simple,把统计结果算出来,然后再再其他高档语言中落实。

 
图片 145 
图片 146 
图片 147

       (6)
按式(22)举办无雾图像的死灰复燃。

   图片 148  
 图片 149  
图片 150

 四、其他部分去雾效果图

   图片 151   
图片 152  
图片 153

  图片 154  图片 155  图片 156

   图片 157  
 图片 158  
图片 159

   图片 160  
 图片 161   图片 162

                             
原图                                                
去雾效果图                                                     
透射率图

 
 图片 163    图片 164   图片 165

      上图中最后一副图我接连做了两遍去雾的拍卖。 

   图片 166  
 图片 167   图片 168

      在原文中,有这么一段话:

                             
原图                                                
去雾效果图                                                     
透射率图

  Since the scene radiance is usually
not as bright as the atmospheric light, the image after haze removal
looks dim. So we increase the exposure of J(x) for
display.

      上图中最终一副图我接连做了三次去雾的拍卖。 

     意思就是说直接去雾后的图像会比原来的暗,因而在处理完后需要展开自然的曝光增强,但作者没有证实其是何等增强的,
由此,这里的图和她小说的功用有所不同时正常的。一般在去雾处理后再用自动色剂之类的算法增强下会得到比较满足的结果,如下图:

      在原文中,有这般一段话:

     图片 169 
   图片 170  
 图片 171

  Since the scene radiance is usually not
as bright as the atmospheric light, the image after haze removal looks
dim. So we increase the exposure of J(x) for
display.

         
原图                
去雾后              +自动色阶

     意思就是说直接去雾后的图像会比原来的暗,因而在处理完后需要展开一定的曝光增强,但作者没有申明其是怎么加强的,
因而,这里的图和她故事集的功用有所不同时正常的。一般在去雾处理后再用自动色剂之类的算法增强下会拿到比较知足的结果,如下图:

     
去雾算法近来也颇具众多其他的方法,不过我所接触的,很多都是以这么些为根基,因而,先弄会以此为探讨其他的去雾算法能奠定坚实的根基。

     图片 172 
   图片 173  
 图片 174

      网络上有一些相比较好的暗原色先验去雾的matlab代码:比如和本文基本对应的matlab资源:http://files.cnblogs.com/Imageshop/cvpr09defog%28matlab%29.rar

         
原图                
去雾后              +自动色阶

  后记:稍微有看了几篇去雾的稿子,基本上都是环绕着收获透视率图做著作,比如部分作品讲用联合双边滤波格局赢得迷你的透射率,从自家个人浅薄的认识中,我觉得去雾已大多跳不出暗原色那个范围了。

     
去雾算法最近也富有广大任何的法子,不过自己所接触的,很多都是以那个为底蕴,由此,先弄会以此为研究其他的去雾算法能奠定坚实的根底。

     
我对互相滤波算法那也做了试验,发现那多少个的效应也还行,就是速度慢了成千上万,双边滤波的长足算法其实快不起来的,所以这几个的实用性不高,我选取了部分图像做相比:

      网络上有一些相比较好的暗原色先验去雾的matlab代码:比如和本文基本对应的matlab资源:http://files.cnblogs.com/Imageshop/cvpr09defog%28matlab%29.rar

     图片 175   
图片 176

  后记:稍微有看了几篇去雾的著作,基本上都是环绕着收获透视率图做小说,比如部分篇章讲用联合双边滤波格局拿到迷你的透射率,从我个人浅薄的认识中,我觉得去雾已大多跳不出暗原色那多少个局面了。

                                    (a)
原图                                                              
(b)   联合双边滤波去雾图

     
我对两者滤波算法这也做了试验,发现这一个的功力也还行,就是速度慢了很多,双边滤波的迅猛算法其实快不起来的,所以这些的实用性不高,我采纳了一部分图像做相比较:

     图片 177   
图片 178

     图片 179    图片 180

                        (c)
导向滤波得到透射率图                                                  
(d)联合双边滤波透射率图(Sigmad=SigmaR=100)

                                   
(a) 原图                                                              
(b)   联合双边滤波去雾图

       上图可以很显明的看出联合双边滤波的透射率图没有导向滤波的精美,但比原来的粗糙的透射率图依旧好过多,过渡很细腻,因而,也能获取正确的视觉去雾效果。

     图片 181    图片 182

      
联合双边滤波器中的算法是参考了OpenCv中相关函数写的。

                        (c)
导向滤波得到透射率图                                                  
(d)联合双边滤波透射率图(Sigmad=SigmaR=100)

     和平平一样,提供一个可供我们测试效果的次第:
依据暗原色先验的图像去雾演示程序

       上图可以很肯定的观察联合双边滤波的透射率图没有导向滤波的鬼斧神工,但比原来的粗糙的透射率图如故好广大,过渡很细腻,因而,也能博得不错的视觉去雾效果。

    图片 183

      
联合双边滤波器中的算法是参考了OpenCv中相关函数写的。

   
我分别用VB6和C#做了个程序,多少个程序都已经通过个另外语言艺术开展了优化,算法部分编码是同样的,C#运转速度大约是VB6的1.8倍。

     和平凡一样,提供一个可供大家测试效果的次序: 依照暗原色先验的图像去雾演示程序

     在处理速度上,比
matalb的快了成千上万倍,在I3的台式机电脑上,一副1024*768的图像去雾时间大约在150ms内(以灰度图为导向图)。

    图片 184

 

   
我分别用VB6和C#做了个程序,六个程序都早已经过各自的言语格局开展了优化,算法部分编码是一模一样的,C#运行速度大约是VB6的1.8倍。

 五、算法的局限性

 

     
暗原色先验是一种总结的结果,是对大气露天无雾照片(outdoor haze-free
images)的总括结果,假使目标场景内在的就和大气光类似,比如雪地、白色背景墙、大海等,则是因为前提条件就不科学,因而一般无法取得知足的意义,而对此一般的山水照片以此算法能处理的不利。

    

 

    2013.8.23 后记补充修正:

     在继承对该算法的眷顾中,发现自己在眼前做出了一个不当的判定,就是关于式(11)中/A的操作。我在前面说这一个除法会引起部分题材,因而,去除了这一步。不过后来的实践注解正是有了这一步,对于相比较度低的图像才可以赢得很好的去雾高相比较度图。

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

   
还有一个工作就是式(11)严峻的来说是要对原始图像的每个通道进行归一化后,再取每个通道R/G/B值的微小值拿到中间图,然后对这些当中图举办点名半径的细微值滤波后,通过11式收获粗糙的透射率图,那么这样就需要多不少总结,我在其实中发现只要平素用前边的暗通道图/A进行操作,两者的效率区别不显著,因而,可用这种便当的法门。

图片 185  
图片 186

 上图是一副经典的测试图,即便得到了相比较好的功力,但是似乎马路那一块的效力不如部分其别人公开的结晶那么好。

图片 187  
图片 188

    
这也是一副相比较宽泛的测试图,该图也是紧用去雾得到结果,未做此外的后甩卖,同CSDN一个的案例库:图像去雾的算法探究中的效果比较,在整幅图像的相比较和和协调性上都要好一个水平。

    
再如下图,也比CSDN这个案例库中的效果要好广大。

 
图片 189  
图片 190

     还有:

图片 191 
图片 192

图片 193  图片 194

   

   总括:我对这种去雾算法的效果依旧很乐意的, 效果和速度都还相比适中。

   附件的测试程序已经联合更新。

   2013.10,10 后记补充:

    一贯听说C的频率很高,于是用C实现了该算法,并且编制了一个可供其他语言调用的dll文件,然后对小小值滤波算法又开展了卓殊的优化,算法速度有了很大的增高,特别是在用VS2010时,编写C的代码可以勾选下图中的SSE选项和高效(fp:fast),程序会调用SSE一些函数,实现指令级另外互相。而这一个C#的编译器是无法兑现的。

图片 195

    
同样的算法,相对于原来的C#程序,程序的进度能提升一倍左右,对于800*600的图像,在自己的I3的CPU上平均能能达标20fps的快慢(只占用了一个核的CPU资源),由此可以适用于不超出该限量内的实时图像处理。

    
同样我扩张了3个里面可调的参数供我们测试。

图片 196

     相应的DLL函数表明如下:

     c风格:

void HazeRemovalUseDarkChannelPrior(unsigned char * Src,unsigned char * Dest,int Width,int Height,int Stride, int Radius ,int GuideRadius, int MaxAtom, float Omega,float Epsilon,float T0 )

    c#调用:

 [DllImport("HazeRemoval.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, ExactSpelling = true)]
  private static extern void HazeRemovalUseDarkChannelPrior(byte* Src, byte* Dest, int Width, int Height, int Stride, int Radius,int GuideRadius, int MaxAtom, float Omega, float Epsilon, float T0);

    VB6调用:

Private Declare Sub HazeRemovalUseDarkChannelPrior Lib "HazeRemoval.dll" (ByVal Src As Long, ByVal dest As Long, ByVal Width As Long, ByVal Height As Long, ByVal Stride As Long, ByVal Radius As Long, ByVal GuideRadius As Long, ByVal MaxAtom As Long, ByVal Omega As Single, ByVal Epsilon As Single, ByVal T0 As Single)

     

    
调用实例源代码下载:http://files.cnblogs.com/Imageshop/HazeRemovalTest.rar

 2013.11,22修正: 

  通过共同双边滤波求透射率图的功用下边的不得法的,进最新的研商结果表明,双边滤波确实也能赢得迷你的投射图,比如还是这下边的测试图像,不同的SigmaS和SigmaR下拿到透射率效果如下:

  
图片 197   
 图片 198

          SigmaS=50,SigmaR=30                          
SigmaS=100,SigmaR=30

 

 2014.1.12
重大改进(可实现实时效劳):

   
 何的算法效果以及宽广的实用性都比其他的去雾算法要好,而重要的问题就是其速度仍旧不够快,有着太多的浮点统计。鉴于此,作者也屡次试着对代码举办深层次的优化,包括SSE处理、并行运行等,但由于算法本身的各种执行,不能全程并行,偶尔一个小函数可以相互,但出于其本身执行就特意快,比如不要5ms,你去用并行算法可能耗时还会大一些。因而,一向尚未什么样大的升华,对于一副1024*768的彩图举办去雾需要90ms,这必然不能够知足要求。

   
 如今,在构思,既然暗通道去雾的透射率图比任何的算法都来的精工细作,假设适龄的减退一点点其精度,其去雾的效能理论上应当不会有太大的区分,于是我想到了一种办法,即求取透射率的时候不是对原图进行求取,而是先对原图举行下采样,比如收缩为原图的1/4,总括出小图的透射率,之后在经过插值的主意的获取原图大概的透射率,则应该也得以拿到效益。经过实践,这种模式大大的进步了进行进度,而且效率和原来的方案基本一致,对于1024*768的图像大约只需要(I3CPU)30ms了,假设进一步取1/9的缩放,则只需要大约20ms,完全可以满足工业实时性要求高的场合。

   
当然,即使您的压缩全面不是专门大的话,比如裁减为本来的0.5分寸,可能一回缩放所用的耗时还抵消了总计小图的透射率图所换来的挣钱,因而必须合理接纳那几个下采样率。

   
要促成这样的进度,当然仍然需要很高的优化技术的,这个东西如故具备保存相比较好。 

   
我做了一个顺序,集成了本博客中6种图像去雾的算法: 图像去雾综合版本

图片 199

     

   
用暗通道的算法对一段视频展开了处理,我们可以在此地看到效果:http://video.sina.com.cn/v/b/124538950-1254492273.html

 
  图片 200

****************************作者:
laviewpbt   时间: 2013.8.23    联系QQ:  33184777
 转载请保留本行音讯********************

 

 

 写博不易,土豪请打赏,屌丝一分也是爱(非强制要求):

 

     在处理速度上,比
matalb的快了过多倍,在I3的台式机电脑上,一副1024*768的图像去雾时间大体在150ms内(以灰度图为导向图)。

 

 五、算法的局限性

 

     
暗原色先验是一种总括的结果,是对大气户外无雾照片(outdoor haze-free
images)的总计结果,假若目标场景内在的就和大气光类似,比如雪地、白色背景墙、大海等,则由于前提条件就不得法,由此一般不能获取满足的效劳,而对于一般的景象照片以此算法能处理的正确性。

    

 

    2013.8.23 后记补充修正:

     在持续对该算法的关爱中,发现自己在面前做出了一个荒谬的判定,就是关于式(11)中/A的操作。我在前面说这些除法会引起部分题材,由此,去除了这一步。可是后来的实践讲明正是有了这一步,对于比较度低的图像才足以收获很好的去雾高相比较度图。

    前面说的/A操作可能会导致t的值小于0,这种状态就足以把t的值间接设置为0来缓解。

   
还有一个业务就是式(11)严刻的来说是要对原本图像的每个通道举办归一化后,再取每个通道R/G/B值的很小值拿到中间图,然后对这些当中图举行点名半径的细小值滤波后,通过11式拿走粗糙的透射率图,那么如此就需要多不少总结,我在骨子里中发现只要直白用前边的暗通道图/A举行操作,两者的效应区别不强烈,由此,可用这种便利的法门。

图片 201   图片 202

 上图是一副经典的测试图,尽管得到了相比较好的效率,可是似乎马路那一块的效能不如部分其旁人公开的战果那么好。

图片 203   图片 204

     这也是一副相比常见的测试图,该图也是紧用去雾得到结果,未做其他的后处理,同CSDN一个的案例库:图像去雾的算法钻探中的效果比较,在整幅图像的对照和和协调性上都要好一个程度。

    
再如下图,也比CSDN那么些案例库中的效果要好广大。

  图片 205   图片 206

     还有:

图片 207  图片 208

图片 209  图片 210

   

   总计:我对这种去雾算法的功用依旧很惬意的, 效果和进度都还相比较适度。

   附件的测试程序已经联手更新。

   2013.10,10 后记补充:

    一贯听说C的频率很高,于是用C实现了该算法,并且编制了一个可供其他语言调用的dll文件,然后对小小值滤波算法又举行了特此外优化,算法速度有了很大的加强,特别是在用VS2010时,编写C的代码可以勾选下图中的SSE选项和便捷(fp:fast),程序会调用SSE一些函数,实现指令级其余互动。而这么些C#的编译器是无能为力实现的。

图片 211

     同样的算法,相对于原始的C#程序,程序的快慢能加强一倍左右,对于800*600的图像,在本人的I3的CPU上平均能能达标20fps的进度(只占用了一个核的CPU资源),由此得以适用于不超出该限量内的实时图像处理。

    
同样我扩展了3个里面可调的参数供我们测试。

图片 212

     相应的DLL函数注脚如下:

     c风格:

void HazeRemovalUseDarkChannelPrior(unsigned char * Src,unsigned char * Dest,int Width,int Height,int Stride, int Radius ,int GuideRadius, int MaxAtom, float Omega,float Epsilon,float T0 )

    c#调用:

 [DllImport("HazeRemoval.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, ExactSpelling = true)]
  private static extern void HazeRemovalUseDarkChannelPrior(byte* Src, byte* Dest, int Width, int Height, int Stride, int Radius,int GuideRadius, int MaxAtom, float Omega, float Epsilon, float T0);

    VB6调用:

Private Declare Sub HazeRemovalUseDarkChannelPrior Lib "HazeRemoval.dll" (ByVal Src As Long, ByVal dest As Long, ByVal Width As Long, ByVal Height As Long, ByVal Stride As Long, ByVal Radius As Long, ByVal GuideRadius As Long, ByVal MaxAtom As Long, ByVal Omega As Single, ByVal Epsilon As Single, ByVal T0 As Single)

     

    
调用实例源代码下载:http://files.cnblogs.com/Imageshop/HazeRemovalTest.rar

 2013.11,22修正: 

  通过联合双边滤波求透射率图的效用下边的不科学的,进最新的探讨结果注解,双边滤波确实也能收获迷你的投射图,比如依旧这方面的测试图像,不同的SigmaS和SigmaR下拿到透射率效果如下:

   图片 213   
 图片 214

          SigmaS=50,SigmaR=30                          
SigmaS=100,SigmaR=30

 

 2014.1.12
重大更新(可实现实时听从):

   
 何的算法效果以及周边的实用性都比任何的去雾算法要好,而重大的问题就是其速度仍旧不够快,有着太多的浮点总计。鉴于此,作者也反复试着对代码进行深层次的优化,包括SSE处理、并行运行等,但由于算法本身的顺序执行,不可能全程并行,偶尔一个小函数可以并行,但出于其本身执行就特意快,比如不要5ms,你去用并行算法可能耗时还会大一部分。因而,一贯从未什么样大的前进,对于一副1024*768的彩图举办去雾需要90ms,这势必无法满足要求。

   
 近来,在揣摩,既然暗通道去雾的透射率图比其它的算法都来的鬼斧神工,假诺适度的狂跌一点点其精度,其去雾的效益理论上应有不会有太大的区别,于是自己想开了一种艺术,即求取透射率的时候不是对原图举办求取,而是先对原图举办下采样,比如缩短为原图的1/4,总计出小图的透射率,之后在经过插值的方法的获取原图大概的透射率,则应该也得以得到效益。经过实践,那种方法大大的提升了举行进度,而且效用和原来的方案基本一致,对于1024*768的图像大约只需要(I3CPU)30ms了,假如越来越取1/9的缩放,则只需要大约20ms,完全可以满足工业实时性要求高的场馆。

   
当然,要是你的压缩全面不是专程大的话,比如裁减为本来的0.5大大小小,可能五次缩放所用的耗时还抵消了总计小图的透射率图所换到的挣钱,由此必须合理合法采取这多少个下采样率。

   
要兑现如此的速度,当然仍旧需要很高的优化技术的,这多少个事物仍然有着保留相比较好。 

   
我做了一个先后,集成了本博客中6种图像去雾的算法: 图像去雾综合版本

图片 215

用暗通道的算法对一段录像举办了处理,我们可以在这里看到功用:http://video.sina.com.cn/v/b/124538950-1254492273.html



相关文章