一文中图像去雾算法的法则,高级图像去雾算法的急忙完结

          一些有雾的图纸                                                                              
   其暗通道

   
在现实生活中,就算是清掌握云,空气中也设有着一些微粒,由此,看远处的实体还能够感到到雾的熏陶,别的,雾的存在令人类感到景深的留存,因而,有须要在去雾的时候保留一定水平的雾,那足以因而在式(11)中引入四个在[0,1]
之间的因数,则式(11)纠正为:

  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

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

    
当直接用上述辩驳举行理并答复原时,去雾的功能其实也是很显明的,比如上面一些例证:

    
到这一步,大家就足以举行无雾图像的恢复生机了。由式(1)可见:  J = ( I –
A)/t + A  

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

                             
原图                                                
去雾效果图                                                     
透射率图

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

   图片 1 
   图片 2

   
式(5)的意思用代码表明也很简短,首先求出每一种像素昂CoraGB分量中的最小值,存入一副和原始图像大小相同的灰度图中,然后再对那幅灰度图实行小小的值滤波,滤波的半径由窗口大小决定,一般有WindowSize
= 2 * Radius + 1;          

     那里说飞鹤些,原始诗歌中的A最后是取原始像素中的某三个点的像素,小编骨子里是取的符合条件的全数点的平均值作为A的值,作者如此做是因为,假诺是取三个点,则各通道的A值很有或许全数很相近255,那样的话会造成处理后的图像偏色和产出多量色素斑点。原作小编说这些算法对天空部分不需特备处理,笔者实在发现该算法对有天空的图像的作用一般都倒霉。天空会现出分明的连接区域。作为化解方案,小编扩展了四个参数,最大全世界大气光值,当总计的值大于该值时,则就取该值。  

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

         
原图                
去雾后              +自动色阶

    图片 3

     图片 4    图片 5

      在原版的书文中,有那样一段话:

   
小编分别用VB6和C#做了个程序,多个程序都曾经通过个其余言语方式举办了优化,算法部分编码是如出一辙的,C#运维速度大致是VB6的1.8倍。

     本文首要上是对《Single Image Haze
Removal Using Dark Channel
Prior》的翻译、整理、及部分解释。如果您的英文水准好,建议看原稿或者来的更爽些。

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

 
图片 6 
图片 7 
图片 8

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

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

                               
  图片 9

   图片 10  
 图片 11

      式中Jc意味着彩色图像的每种通道 ,Ω(x)表示以像素X为主导的三个窗口。 

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

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

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

  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.

     
由上述几幅图像,可以肯定的看到暗通道先验理论的普遍性。在作者的杂谈中,总括了伍仟多副图像的风味,也都基本符合那一个先验,因而,我们得以认为实际一条定律。

  图片 12   图片 13 

  
图片 14   图片 15    

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

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

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

                                                  
图片 16

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

                                 
图片 17

     当投射图t
的值相当小时,会促成J的值偏大,从而使淂图像全部向白场过度,因而一般可安装一阈值T0,当t值小于T0时,令t=T0,本文中保有机能图均以T0=0.1为规范估测计算。

   
图片 18    
图片 19

   图片 20  
 图片 21

     图片 22   
图片 23

                                          
    图片 24

    
关于何大学生的有的资料和散文,我们可以访问那里:http://research.microsoft.com/en-us/um/people/kahe/

   图片 25   图片 26

   
在现实生活中,即使是清领悟云,空气中也设有着有个别微粒,因而,看远处的物体仍可以感到到雾的影响,别的,雾的留存令人类感到景深的存在,由此,有必不可少在去雾的时候保留一定程度的雾,那能够透过在式(11)中引入二个在[0,1]
之间的因数,则式(11)校对为:

     和日常一样,提供2个可供我们测试效果的程序: 依照暗原色先验的图像去雾演示程序

     
2)按文中所描述的算法自动得到环球大气光的值。

    三:编码的手续

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

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

      能够见见,当r比较小的时候,在透射率图中挑兖州看不到什么细节消息,因而恢复生机处的图像边缘处不鲜明。

    
关于何大学生的有个别素材和故事集,大家能够访问这里:http://research.microsoft.com/en-us/um/people/kahe/

     
大家抛开杂谈中罗列的那个例子,自身从网上找几幅没有雾的风景照,看看结果如下:

      在原来的作品中,有那般一段话:

      注意到第1幅图的原图五个字的方圆显明有一块不调和的地点,而第2图顶部水平方向仿佛有一块没有开始展览去雾处理,那些都以出于大家的透射率图过于粗糙了。

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

    
最起首接触何的那篇论文是在二零一二年,说实在的11分时候,只是随便浏览了下,看到里边的soft
matting进程相比较复杂,并且实施进程非常的慢,就没有怎么大的趣味。方今又神迹拾起,仔细研读,觉得故事集的演绎步骤特别清晰,讲解很成功。恰好适逢浏览到其此外一篇作品《Guided
Image
Filtering
》 ,个中提到了足以用导向滤波来替代soft
matting的历程,且速度火速,因而,作者对去雾的趣味算法又大大升高了。
 

     图片 27    图片 28

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

  首先,在微型计算机视觉和电脑图形中,下述方程所讲述的雾图形成模型被普遍利用:

 ④ 、别的一些去雾效果图

    互连网上有那几个算法的
matlab代码可下载的,那里贴部分代码:

                                   图片 29 

     
要取得尤其精致的透射率图,何大学生在篇章中建议领会soft
matting方法,能获得这几个细致的结果。不过他的3个致命的弱项便是速度特慢,不选取于实际行使。在二〇一三年,何大学生又除了一片散文,在那之中涉嫌了导向滤波的方法来取得较好的透射率图。该办法的显要进程集中于简单的四方模糊,而方框模糊有多重和半径无关的神速算法。由此,算法的实用性特强,关于这些导向滤波算法我们在何大学生的网站能够团结去研习下,除了在去雾方面外,还有所别样多地点的使用,那有个别本文不多述。

     意思正是说间接去雾后的图像会比原来的暗,因此在处理完后必要举办自然的暴光增强,但小编没有证实其是如何升高的,
因而,那里的图和她随想的功力有所差异时正常的。一般在去雾处理后再用自动色剂之类的算法增强下会获得相比较满足的结果,如下图:

   
 在图像去雾那些世界,大约从未人不晓得《Single Image Haze Removal Using
Dark Channel
Prior
》那篇文章,该文是二〇〇九年CVP劲客最好杂文。小编何凯明博士,二〇〇五年北大高校结业,二〇一二年香港(Hong Kong)中理高校博士毕业,可谓是功力深厚,惊叹于国内有的所谓博士的水平,何那样的大学生才能够真正称之为Doctor。

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

 

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

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

                                                 图片 30

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

   图片 31     图片 32

       上海图书馆能够很通晓的看到联合双边滤波的透射率图没有导向滤波的迷你,但比原来的粗糙的透射率图依然好过多,过渡不粗腻,由此,也能得到正确的视觉去雾效果。

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

 
 其中,I(X)便是大家今天曾经有个别图像(待去雾的图像),J(x)是咱们要过来的无雾的图像,A是环球大气光成分,
t(x)为透射率。以后的已知条件就是I(X),供给目的值J(x),鲜明,这是个有好多解的方程,由此,就需求有的先验了。

                              
 图片 33

  图片 34  
 图片 35

          一些有雾的图纸                                                                              
   其暗通道

     图片 36 
   图片 37  
 图片 38

   图片 39   
 图片 40

     
小编对双边滤波算法那也做了尝试,发现那么些的意义也还行,正是速度慢了重重,双边滤波的长足算法其实快不起来的,所以那一个的实用性不高,小编选拔了一些图像做相比较:

                                                 
  图片 41

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

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

  图片 42   
图片 43

   图片 44    图片 45

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

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

     
参数eps的取值也富有侧重,他首借使为着防患总计中除以0的荒谬以及为了使得一些计算结果未必过大,一般提出取值0.001要么更小。

      注意到第③幅图的原图多个字的方圆显明有一块不和谐的地点,而第贰图顶部水平方向就好像有一块没有进行去雾处理,这一个都以出于大家的透射率图过于粗糙了。

         
原图                
去雾后              +自动色阶

     由此,可推导出:

     
要得到进一步精细的透射率图,何硕士在小说中建议驾驭soft
matting方法,能获得这3个细致的结果。不过她的三个沉重的后天不足正是速度特慢,不利用于实际利用。在二〇一三年,何大学生又除了一片杂谈,当中涉嫌了导向滤波的章程来得到较好的透射率图。该格局的基本点进度集中于不难的正方模糊,而方框模糊有多重和半径无关的高快速总计法。因而,算法的实用性特强,关于那一个导向滤波算法我们在何硕士的网站能够友善去研习下,除了在去雾方面外,还有所其余多地点的选取,这一部分本文不多述。

 
 
 可处理摄像的言传身教:摄像去雾效果

  
图片 46   图片 47

  后记:稍微有看了几篇去雾的文章,基本上都以环绕着获得透视率图做小说,比如有的稿子讲用联合双边滤波格局赢得迷你的透射率,从本人个人浅薄的认识中,我觉得去雾已几近跳不出暗原色这几个规模了。

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

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

        4)总计导向滤波图。

 

      还有一些便是,上述总括须要在[0,1]界定内展开,也正是说导向图和预估的透射率图都必须从[0,255]先映射到[0,1]在进展测算。

                                                     
   图片 48

                      
(c)使用灰度图为导向图得到的透射率图                      
    (d)使用凯雷德GB图为导向图获得的透射率图

    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)的。

   图片 49   图片 50

  
那里能够平素用原来的图像做导向图,当然也能够用其灰度图,不过用瑞鹰GB导向图在下一步的盘算中会占用比较大的年月。

       (6)
按式(22)进行无雾图像的复原。

     
关于guidedfilter中的半径r值,因为在前边进行小小的值后暗通道的图像成一块一块的,为了使透射率图特别精细,提议那几个r的取值十分大于进行小小的值滤波的半径的4倍,如下图所示:

   
在图像去雾这么些小圈子,差不离一直不人不亮堂《Single Image Haze Removal Using
Dark Channel
Prior
》那篇小说,该文是二零零六年CVPXC90最棒诗歌。作者何凯明博士,二零零七年南开东军事和政院学毕业,二〇一三年香港(Hong Kong)中大学士结业,可谓是武术深厚,惊讶于国内一些所谓大学生的档次,何那样的大学生才得以真正称之为Doctor。

      
由地方的代码,可知,首要的工作量在均值模糊上,而均值模糊是个很红速的算法,关于均值模糊的优化可参照小编从前的篇章:彩色图像高速模糊之懒惰算法。

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

   图片 51   
图片 52  
图片 53

        4)计算导向滤波图。

    一 、散文思想的大约描述 

     本文重要上是对《Single Image Haze
Removal Using Dark Channel
Prior》的翻译、整理、及一些解释。假设你的英文水准好,提出看原稿恐怕来的更爽些。

     图片 54   
图片 55

  就算您细心的辨析了初稿的细路,加上适当的参照,编码其实并不是很狼狈。

   图片 56    
图片 57

 伍 、算法的局限性

 

     
暗原色先验是一种总括的结果,是对大量室外无雾照片(outdoor haze-free
images)的总计结果,借使指标场景内在的就和大气光类似,比如雪地、淡绿背景墙、大海等,则由于前提条件就不科学,因而一般不可能取得满足的法力,而对于一般的山山水水照片以此算法能处理的不错。

    

 

    贰零壹壹.8.23 后记补充勘误:

     在此起彼伏对该算法的钟情中,发现自个儿在眼下做出了一个荒谬的论断,就是关于式(11)中/A的操作。小编在前边说那个除法会引起局地标题,由此,去除了这一步。但是后来的实践表明就是有了这一步,对于相比度低的图像才方可取得很好的去雾高相比较度图。

    后边说的/A操作或许会导致t的值小于0,那种情状就足以把t的值直接设置为0来消除。

   
还有3个事务正是式(11)严谨的来说是要对原始图像的种种通道进行归一化后,再取每种通道福特Explorer/G/B值的细微值获得中间图,然后对这么些个中图举办点名半径的蝇头值滤波后,通过11式取得粗糙的透射率图,那么如此就必要多不少总括,笔者在骨子里中窥见只要直白用前边的暗通道图/A进行操作,两者的功力差距不驾驭,由此,可用这种便利的办法。

图片 58   图片 59

 上海教室是一副经典的测试图,固然赢得了相比好的成效,可是就如马路那一块的功用不及部分其余人公开的名堂那么好。

图片 60   图片 61

     那也是一副相比较宽泛的测试图,该图也是紧用去雾获得结果,未做别的的后甩卖,同CSDN一个的案例库:图像去雾的算法切磋中的效果相比较,在整幅图像的周旋统一和和协调性上都要好1个程度。

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

  图片 62   图片 63

     还有:

图片 64  图片 65

图片 66  图片 67

   

   总结:作者对那种去雾算法的效益依然很满足的, 效果和进程都还相比适合。

   附属类小部件的测试程序已经一起立异。

   二〇一二.10,10 后记补充:

    一直传说C的功效很高,于是用C完毕了该算法,并且编写制定了2个可供其余语言调用的dll文件,然后对小小值滤波算法又实行了卓越的优化,算法速度有了极大的增强,尤其是在用VS二〇一〇时,编写C的代码能够勾选下图中的SSE选项和高速(fp:fast),程序会调用SSE一些函数,完成指令级别的相互。而这几个C#的编写翻译器是力不从心兑现的。

图片 68

     同样的算法,相对于原有的C#次第,程序的快慢能拉长一倍左右,对于800*600的图像,在自个儿的I3的CPU上平均能能完成20fps的快慢(只占用了贰个核的CPU能源),因而得以适用于不高于该限制内的实时图像处理。

    
同样作者增添了一个里面可调的参数供大家测试。

图片 69

     相应的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和Sigma哈弗下取得透射率效果如下:

   图片 70   
 图片 71

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

 

 2015.1.12
重庆大学立异(可完成实时效应):

   
 何的算法效果以及广泛的实用性都比其余的去雾算法要好,而关键的难点正是其速度依旧不够快,有着太多的浮点总结。鉴于此,作者也一再试着对代码实行深层次的优化,包罗SSE处理、并行运转等,但由于算法自身的次第执行,不可能全程并行,偶尔多个小函数能够相互,但由于其自身执行就特意快,比如不要5ms,你去用并行算法大概源消耗时还会大学一年级些。因而,一向从未怎么大的进化,对于一副1024*768的彩图进行去雾必要90ms,这一定无法满意供给。

   
 近日,在研究,既然暗通道去雾的透射率图比此外的算法都来的迷你,假设适龄的下挫一丢丢其精度,其去雾的功能理论上应该不会有太大的分化,于是本身想开了一种艺术,即求取透射率的时候不是对原图进行求取,而是先对原图举行下采集样品,比如收缩为原图的百分之二十五,计算出小图的透射率,之后在通过插值的方法的取得原图大概的透射率,则应当也得以拿走效益。经超过实际践,这种艺术大大的升高了执行进程,而且功用和原来的方案基本一致,对于1024*768的图像差不离只需求(I3CPU)30ms了,如果越来越取百分之十一的缩放,则只需求大致20ms,完全能够满意工业实时性供给高的地方。

   
当然,要是你的紧缩全面不是特地质大学的话,比如缩短为原本的0.5轻重缓急,或者两遍缩放所用的耗费时间还抵消了总括小图的透射率图所换到的致富,因而必须合理选拔那几个下采集样品率。

   
要达成如此的速度,当然依旧供给很高的优化技术的,这个东西仍然有所保存比较好。 

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

图片 72

用暗通道的算法对一段录像展开了处理,大家能够在此处看到效果:http://video.sina.com.cn/v/b/124538950-1254492273.html



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

  图片 73    图片 74

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

   图片 75   图片 76

      上海教室中最后一副图小编连连做了三次去雾的处理。 

   
如上所述,上标C表示大切诺基/G/B八个通道的趣味。

   图片 77    
图片 78

  图片 79    图片 80

                                                           
图片 81           

    图片 82  
  图片 83

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

     今后I,A,t都已经求得了,因而,完全能够拓展J的乘除。

   图片 84  
图片 85

                                   图片 86 

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

     
去雾算法方今也保有众多其余的不二法门,但是作者所接触的,很多都以以这一个为底蕴,因而,先弄会以此为研究别的的去雾算法能奠定抓实的底子。

     未来I,A,t都已经求得了,由此,完全可以展开J的计量。

    ① 、诗歌思想的粗略描述 

   
如上所述,上标C表示GL450/G/B多少个通道的情趣。

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

                
有雾图                                           
 去雾图

     图片 87 
   图片 88  
 图片 89

                                              
图片 90

  笔者的建议是窗口大小在11-51之间,即半径在5-25里边。

    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);

     
2)按文中所讲述的算法自动获取整个世界大气光的值。

     
可处理录制的言传身教:摄像去雾效果

      还有某个正是,上述总括须求在[0,1]限定内展开,也正是说导向图和预估的透射率图都必须从[0,255]先映射到[0,1]在进展总括。

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

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

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

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

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

      暗通道先验的论争提议:

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

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

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

      能够看到,当r比较小的时候,在透射率图中着力看不到什么细节新闻,由此苏醒处的图像边缘处不理解。

       以QX56GB图为导向图的猜度中,涉及到3*3有的矩阵求逆的历程,假若用非matlab语言写,能够先借助于matlab的符号计算作用,以及中间的符号总括命令simple,把计算结果算出来,然后再再别的高档语言中贯彻。

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

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

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

                                                        
图片 93

      1)
从暗通道图中依照亮度的分寸取前0.1%的像素。

                                                   
图片 94

     
参数eps的取值也颇具侧重,他重点是为着防止总结中除以0的谬误以及为了使得一些计算结果未必过大,一般提议取值0.001可能更小。

  在式(12)中,每一个通道的数量都急需除以对应的A值,即归一化,那样做,还留存2个标题,由于A的取舍进程,并不能够担保每一个像素分量值除以A值后都自愧比不上1,从而导致t的值恐怕小于0,而那是不容许的,原来的书文我并从未交代那一点是怎么着处理的。作者在实际的编码中窥见,假诺的确这么做了,其职能也并不是很理想 ,因而,笔者最终的措施是在式(12)中,不考虑A的持筹握算。

    图片 95   图片 96  
 图片 97

                             
原图                                                
去雾效果图                                                     
透射率图

     
由上述几幅图像,能够分明的来看暗通道先验理论的普遍性。在笔者的舆论中,总括了五千多副图像的特色,也都基本吻合那些先验,由此,我们能够认为实际一条定律。

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

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

   
小编分别用VB6和C#做了个程序,五个程序都早就由此个别的语言艺术实行了优化,算法部分编码是同样的,C#运转速度大概是VB6的1.8倍。

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

   图片 98  
 图片 99  
图片 100

  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

                                              
图片 101

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

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

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

     图片 102   
图片 103

                                                
  图片 104

  后记:稍微有看了几篇去雾的稿子,基本上都是环绕着收获透视率图做文章,比如有的篇章讲用联合双边滤波情势得到迷你的透射率,从本身个人浅薄的认识中,作者以为去雾已基本上跳不出暗原色这么些层面了。

 
 图片 105    图片 106   图片 107

  图片 108    图片 109

  第1:窗口的尺寸。这一个对结果来说是个重大的参数,窗口越大,其包涵暗通道的可能率越大,暗通道也就越黑。大家不去从理论角度分析,从实施的听平素看,就如窗口越大,去雾的效果越不明显,如下图所示:

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

   图片 110   图片 111    

      式中Jc表示彩色图像的各种通道 ,Ω(x)表示以像素X为基本的二个窗口。 

   图片 112  
 图片 113   图片 114

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

   图片 115  
 图片 116   图片 117

    三:编码的步子

       以LacrosseGB图为导向图的臆度中,涉及到3*3局地矩阵求逆的长河,借使用非matlab语言写,能够先借助于matlab的符号计算功效,以及中间的符号计六柱预测令simple,把总计结果算出来,然后再再别的高档语言中实现。

     
去雾算法方今也装有广大任何的办法,但是本身所接触的,很多都是以那一个为底蕴,由此,先弄会以此为研商其余的去雾算法能奠定抓牢的根底。

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

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

  图片 118   图片 119

     首先看望暗通道先验是何许:

                
有雾图                                           
 去雾图

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

     由此,最终的死灰复燃公式如下:

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

                                                         
  图片 120           

 5、算法的局限性

 

     
暗原色先验是一种总结的结果,是对大气户外无雾照片(outdoor haze-free
images)的总计结果,假如目的场景内在的就和大气光类似,比如雪地、玉石白背景墙、大海等,则是因为前提条件就不得法,因而一般不能获得满足的功能,而对此一般的山山水水照片以此算法能处理的不利。

    

 

    二零一三.8.23 后记补充考订:

     在后续对该算法的关爱中,发现自个儿在后边做出了二个谬误的判定,就是关于式(11)中/A的操作。小编在前头说那个除法会引起部分题材,因而,去除了这一步。可是后来的实践注解就是有了这一步,对于比较度低的图像才足以博得很好的去雾高相比较度图。

    前面说的/A操作大概会导致t的值小于0,那种情状就足以把t的值直接设置为0来化解。

   
还有几个政工正是式(11)严俊的来说是要对本来图像的种种通道实行归一化后,再取各种通道CRUISER/G/B值的细微值获得中间图,然后对那些当中图举办点名半径的纤维值滤波后,通过11式到手粗糙的透射率图,那么如此就需求多不少计算,小编在其实中发觉只要直接用前边的暗通道图/A实行操作,两者的效果分歧不明显,由此,可用这种便当的办法。

图片 121  
图片 122

 上海教室是一副经典的测试图,固然获得了相比好的功能,然则如同马路那一块的功用比不上部分其余人公开的结晶那么好。

图片 123  
图片 124

    
那也是一副比较宽泛的测试图,该图也是紧用去雾获得结果,未做别的的后处理,同CSDN三个的案例库:图像去雾的算法商量中的效果相比较,在整幅图像的对照和和协调性上都要好2个程度。

    
再如下图,也比CSDN那一个案例库中的效果要好过多。

 
图片 125  
图片 126

     还有:

图片 127 
图片 128

图片 129  图片 130

   

   总计:作者对那种去雾算法的效应如故很惬意的, 效果和速度都还相比较适当。

   附属类小部件的测试程序已经联手更新。

   二〇一二.10,10 后记补充:

    平昔传闻C的频率很高,于是用C实现了该算法,并且编写制定了三个可供别的语言调用的dll文件,然后对小小值滤波算法又开始展览了新鲜的优化,算法速度有了十分大的滋长,越发是在用VS二〇〇九时,编写C的代码能够勾选下图中的SSE选项和便捷(fp:fast),程序会调用SSE一些函数,实现指令级别的互相。而那么些C#的编写翻译器是力不从心落到实处的。

图片 131

    
同样的算法,相对于原始的C#次第,程序的快慢能进步级中学一年级倍左右,对于800*600的图像,在自身的I3的CPU上平均能能落得20fps的快慢(只占用了三个核的CPU能源),因而能够适用于不高于该限量内的实时图像处理。

    
同样小编扩大了三个里头可调的参数供大家测试。

图片 132

     相应的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和SigmaHaval下取得透射率效果如下:

  
图片 133   
 图片 134

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

 

 贰零壹肆.1.12
重庆大学更新(可完结实时坚守):

   
 何的算法效果以及科学普及的实用性都比任何的去雾算法要好,而主要的难题就是其速度仍旧不够快,有着太多的浮点总结。鉴于此,小编也往往试着对代码举办深层次的优化,包蕴SSE处理、并行运营等,但出于算法自身的一一执行,不也许全程并行,偶尔3个小函数能够相互,但鉴于其本身执行就特意快,比如不要5ms,你去用并行算法大概源消耗费时间还会大片段。由此,一直尚未什么样大的迈入,对于一副1024*768的彩图举行去雾必要90ms,那肯定不能知足要求。

   
 近来,在盘算,既然暗通道去雾的透射率图比其他的算法都来的迷你,如若适龄的消沉一丢丢其精度,其去雾的效果理论上理应不会有太大的区分,于是自身想到了一种艺术,即求取透射率的时候不是对原图举行求取,而是先对原图实行下采集样品,比如减少为原图的1/4,总括出小图的透射率,之后在经过插值的章程的收获原图大致的透射率,则应该也得以得到效益。经超过实际践,那种方式大大的进步了实施进度,而且意义和原来的方案基本一致,对于1024*768的图像大致只需求(I3CPU)30ms了,假如越来越取11.11%的缩放,则只须要大概20ms,完全可以满意工业实时性必要高的场子。

   
当然,假如您的收缩周密不是专门大的话,比如减少为本来的0.5轻重缓急,只怕一遍缩放所用的耗费时间还抵消了计算小图的透射率图所换到的挣钱,由此必须合理合法选择这一个下采集样品率。

   
要达成那样的快慢,当然依然供给很高的优化技术的,那个事物依然拥有保存相比好。 

   
小编做了叁个主次,集成了本博客中6种图像去雾的算法: 图像去雾综合版本

图片 135

     

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

 
  图片 136

****************************作者:
laviewpbt   时间: 二零一二.8.23    联系QQ:  33184777
 转发请保留本行音讯********************

 

 

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

 

          2)
在那些岗位中,在原来有雾图像I中查找对应的享有最高亮度的点的值,作为A值。

     由此,可推导出:

   图片 137     图片 138

     那里说美赞臣些,原始故事集中的A最后是取原始像素中的某四个点的像素,作者实在是取的符合条件的全数点的平均值作为A的值,作者如此做是因为,固然是取三个点,则各通道的A值很有只怕全部很接近255,那样的话会促成处理后的图像偏色和现身多量色素斑点。原版的书文作者说这一个算法对天空部分不需特备处理,笔者实在发现该算法对有天空的图像的功用一般都倒霉。天空会产出显然的对接区域。作为解决方案,作者增添了二个参数,最大满世界大气光值,当总括的值大于该值时,则就取该值。
 

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

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

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

                     
一些无雾的图形                                                                               
  其暗通道

    这里须要留意的是MinFilter算法的神速完结,提供一篇故事集供有须要的情侣学习:STREAMING
MAXIMUM-MINIMUM FILTER USING NO MORE THAN THREE COMPARISONS PER
ELEMENT
 。那么些算法的年月复杂度是O(1)的。

      暗通道先验的辩护提议:

  在式(12)中,每一个通道的数量都需求除以对应的A值,即归一化,那样做,还设有3个题材,由于A的精选进程,并无法担保各类像素分量值除以A值后都低于1,从而导致t的值大概小于0,而那是不容许的,最初的小说笔者并没有交代那或多或少是怎么着处理的。作者在实质上的编码中发现,借使确实这么做了,其意义也并不是很理想 ,由此,小编最后的章程是在式(12)中,不考虑A的计量。

    
图片 140   
图片 141

    
当直接用上述辩白实行还原时,去雾的效能其实也是很精通的,比如上面一些例证:

     
假诺接纳的花花绿绿CRUISERGB图做导向图,总计时间上会增添很多,所的到的透射率图的边缘会比灰度图所拍卖的保存了更加多的底细,效果上略微比灰度图好,如下所示:

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

     实际生活中程导弹致暗原色中低通道值主要有五个要素:a)小车、建筑物和都市中玻璃窗户的黑影,只怕是树叶、树与岩石等自然景象的阴影;b)色彩鲜艳的物体或外部,在OdysseyGB的七个通道中稍加通道的值相当的低(比如白灰的草地/树/植物,天灰或牡蛎白的繁花/叶子,大概中蓝的水面);c)颜色较暗的实体大概表面,例如灰暗色的树枝和石头。由此可知,自然风景中到处都以影子可能彩色,这一个景点的图像的暗原色总是很惨淡的。

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

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

      上海体育场地中最终一副图小编一连做了五次去雾的拍卖。 

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

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

    
图片 142  
 图片 143

  图片 144  
 图片 145

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

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

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

     图片 147  
 图片 148

     
有了这几个先验,接着就需求开始展览局部数学方面包车型地铁演绎来最终化解难点。

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

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

 
 当中,I(X)正是我们今后曾经部分图像(待去雾的图像),J(x)是我们要上升的无雾的图像,A是中外大气光成分,
t(x)为透射率。现在的已知条件正是I(X),供给目的值J(x),明显,那是个有很多解的方程,因而,就必要有的先验了。

   图片 149   
图片 150

   图片 151   图片 152

  图片 153  
图片 154

     
有了那几个先验,接着就供给实香港行政局地数学方面包车型大巴推理来最后消除难点。

                              
 图片 155

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

                                                 图片 156

    图片 157

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

                     
一些无雾的图样                                                                               
  其暗通道

  假若您仔细的分析了初稿的细路,加上适量的参照,编码其实并不是很勤奋。

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

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

    
最初阶接触何的那篇诗歌是在二〇一二年,说其实的不胜时候,只是随便浏览了下,看到里面包车型地铁soft
matting进度相比复杂,并且实施进程特别慢,就从未什么大的兴趣。近日又神蹟拾起,仔细研读,觉得诗歌的演绎步骤尤其清晰,讲解很成功。恰好适逢浏览到其其余一篇文章《Guided
Image
Filtering
》 ,在那之中涉及了足以用导向滤波来顶替soft
matting的长河,且速度赶快,由此,我对去雾的趣味算法又大大进步了。
 

       (6)
按式(22)进行无雾图像的苏醒。

  
那里能够一直用原来的图像做导向图,当然也可以用其灰度图,不过用凯雷德GB导向图在下一步的推测中会占用相比较大的年华。

  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.

     意思便是说间接去雾后的图像会比原来的暗,因而在拍卖完后必要开始展览一定的暴露增强,但小编没有注明其是怎么样增强的,
因而,那里的图和他故事集的功能有所区别时平常的。一般在去雾处理后再用自动色剂之类的算法增强下会得到比较满意的结果,如下图:

   图片 158    
图片 159

     实际生活中造成暗原色中低通道值重要有三个成分:a)小车、建筑物和都市中玻璃窗户的影子,或然是树叶、树与岩石等当然风景的黑影;b)色彩鲜艳的实体或外部,在TiguanGB的多少个通道中稍微通道的值相当的低(比如青色的草地/树/植物,紫藤色或清水蓝的花朵/叶子,大概深橙的水面);c)颜色较暗的物体大概表面,例如灰暗色的树干和石块。总而言之,自然风光中随地都是影子恐怕彩色,那个风景的图像的暗原色总是很惨淡的。

  第叁:窗口的尺寸。这么些对结果来说是个首要的参数,窗口越大,其涵盖暗通道的票房价值越大,暗通道也就越黑。大家不去从理论角度解析,从推行的意义来看,就像是窗口越大,去雾的法力越不明朗,如下图所示:

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

  图片 160  
图片 161 

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

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

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

   图片 162  
图片 163

 ④ 、别的部分去雾效果图

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

     
若是选用的五彩斑斓凯雷德GB图做导向图,总括时间上会扩充很多,所的到的透射率图的边缘会比灰度图所处理的保存了越多的细节,效果上略微比灰度图好,如下所示:

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

  图片 164  图片 165  图片 166

   图片 167  
图片 168

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

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

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

   图片 169   
 图片 170

       上海教室能够很令人注指标来看联合双边滤波的透射率图没有导向滤波的精工细作,但比原来的粗糙的透射率图依然好广大,过渡非常细腻,因而,也能博得正确的视觉去雾效果。

    图片 171  
图片 172  
 图片 173

     
小编对双边滤波算法那也做了尝试,发现那一个的成效也勉强能够,正是速度慢了不少,双边滤波的飞跃算法其实快不起来的,所以这么些的实用性不高,作者选拔了有的图像做比较:

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

     
关于guidedfilter中的半径r值,因为在近日举办小小的值后暗通道的图像成一块一块的,为了使透射率图越发精致,建议那个r的取值一点都不小于实行小小的值滤波的半径的4倍,如下图所示:

   图片 174  
 图片 175  
图片 176

                                               图片 177

     图片 178    图片 179

  
  图片 180    图片 181