而依据双方滤波的方案,录像去雾效果公海赌船网址

一、前言  

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

  实际上很久以前,当本人初次接触图像去雾技术时,初叶完毕的是根据中值滤波的图像去雾,并且也有必然的效率,在笔者的Imageshop的合一软件中的去雾方案便是那几个的完成,可是那些效果没有本文好。

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

     
可处理录制的示范:摄像去雾效果

   
 而基于双方滤波的方案,也是很已经耳闻过,前不久有意中人传给作者一篇国内的双面滤波去雾的舆论,总体思路和依照中值的近乎,想想干脆把那四个位于一块儿做个相比较呢。

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

   
 在图像去雾那些圈子,大概从不人不领会《Single Image Haze Removal Using
Dark Channel
Prior
》那篇小说,该文是2008年CVP凯雷德最佳随想。小编何凯明大学生,二零零七年浙大东军政大学学毕业,2011年Hong Kong中大硕士结业,可谓是功力深厚,惊讶于国内有的所谓博士的水平,何那样的大学生才得以真正称之为Doctor。

二 、算法的流程

 
 
 可处理录制的演示:摄像去雾效果

    
关于何大学生的一些资料和随想,我们能够访问那里:http://research.microsoft.com/en-us/um/people/kahe/

     算法的最基础的法则照旧依据大气散射模型的,即:

   
在图像去雾这么些世界,大致平昔不人不精通《Single Image Haze Removal Using
Dark Channel
Prior
》这篇文章,该文是二〇〇八年CVPLAND最佳故事集。小编何凯明大学生,二零零七年南开东军事和政治学院学毕业,二〇一一年香江中大大学生毕业,可谓是功力深厚,惊讶于国内部分所谓大学生的水准,何那样的大学生才方可真正称之为Doctor。

    
最开端接触何的那篇故事集是在2013年,说其实的要命时候,只是随便浏览了下,看到当中的soft
matting进度相比复杂,并且实施进度不快,就向来不什么样大的兴味。近日又神蹟拾起,仔细研读,觉得杂谈的演绎步骤尤其明晰,讲解很到位。恰好适逢浏览到其其它一篇文章《Guided
Image
Filtering
》 ,个中涉嫌了足以用导向滤波来代表soft
matting的进度,且速度快捷,因而,小编对去雾的趣味算法又大大提升了。
 

                   
 公海赌船网址 1

    
关于何学士的一些材质和舆论,我们能够访问那里:http://research.microsoft.com/en-us/um/people/kahe/

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

  已知条件就是输入图像I(X),求J(x);

    
最起头接触何的这篇诗歌是在2013年,说其实的13分时候,只是随便浏览了下,看到里面包车型地铁soft
matting进度相比较复杂,并且实施进程特别慢,就从未怎么大的兴趣。近来又神蹟拾起,仔细研读,觉得杂谈的演绎步骤越发清楚,讲解很成功。恰好适逢浏览到其其余一篇小说《Guided
Image
Filtering
》 ,当中涉及了能够用导向滤波来代表soft
matting的进度,且速度高速,因而,笔者对去雾的志趣算法又大大升高了。
 

    一 、杂文思想的粗略描述 

   
 在参考诗歌一种单幅图像去雾方法中是通过中值滤波的艺术来去雾的,而舆论据悉双方滤波的实时图像去雾技术研究选取了双面滤波,假如您要促成代码,大概须求两篇论文结合起来看,因为在舆论第11中学的描述没有讲精通怎样通过得到的雾浓度数据来获得无雾的图像。

     本文首要上是对《Single Image Haze
Removal Using Dark Channel
Prior》的翻译、整理、及一些解释。假设您的英文水准好,建议看原稿大概来的更爽些。

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

   
 不难的来说,算法的流水生产线可讲述如下:

    壹 、散文思想的简练描述 

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

  壹 、定义F(X)=A(1-t(x)),称之为大气光幕或许为雾浓度。

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

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

   
 2、计算公海赌船网址 2,并选拔和何大学生杂谈中好像的方法计算全局大气光值A。

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

                                   公海赌船网址 3 

   
 3、计算公海赌船网址 4,即对M(x)实行中值滤波。

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

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

   
 4、计算公海赌船网址 5,注意式子中的相对值。

                                   公海赌船网址 6 

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

   
 5、计算公海赌船网址 7,式中P为控制去雾程度的因子,取值范围[0,1]。

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

      暗通道先验的说理提议:

   
 陆 、通过式子公海赌船网址 8取得去雾后的图像。

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

                                                           
公海赌船网址 9           

   
 上边的不胜枚举算式是从不一样杂谈里截图的,因而表明上有点前后不一样,但不影响高手精通其意义。

      暗通道先验的理论提出:

     实际生活中程导弹致暗原色中低通道值首要有多少个因素:a)小车、建筑物和都市中玻璃窗户的阴影,大概是树叶、树与岩石等自然风光的黑影;b)色彩鲜艳的物体或外部,在CR-VGB的多个通道中约略通道的值很低(比如威尼斯绿的草地/树/植物,浅灰褐或紫石绿的花朵/叶子,或许清水蓝的水面);c)颜色较暗的物体大概表面,例如灰暗色的树枝和石块。同理可得,自然山水中到处都以影子大概彩色,这么些风景的图像的暗原色总是很惨淡的。

   
 假使是利用双边滤波算子,则步骤3和4中的median运算符需修改为bilaterfilter,其余的手续一样。

                                                         
  公海赌船网址 10           

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

  算法的原理笔者讲不清,反正看的更加多越迷糊了。

     实际生活中造成暗原色中低通道值首要有八个成分:a)汽车、建筑物和都市中玻璃窗户的影子,只怕是树叶、树与岩石等当然景色的黑影;b)色彩鲜艳的实体或外部,在揽胜GB的四个通道中稍微通道的值很低(比如木色的草地/树/植物,深黑或黄褐的花朵/叶子,或者紫灰的水面);c)颜色较暗的实体或许表面,例如灰暗色的树干和石头。同理可得,自然风光中随处都以影子或许彩色,这几个风景的图像的暗原色总是很惨淡的。

   公海赌船网址 11    
公海赌船网址 12

三 、算法的意义

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

   公海赌船网址 13    
公海赌船网址 14

     
算法的效用照旧有个别奇怪,有个别图获得了一对一不错的效用。

   公海赌船网址 15 
   公海赌船网址 16

   公海赌船网址 17    
公海赌船网址 18

 公海赌船网址 19  公海赌船网址 20  公海赌船网址 21

   公海赌船网址 22     公海赌船网址 23

                     
一些无雾的图片                                                                               
  其暗通道

 公海赌船网址 24  公海赌船网址 25  公海赌船网址 26

   公海赌船网址 27     公海赌船网址 28

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

 公海赌船网址 29  公海赌船网址 30  公海赌船网址 31

                     
一些无雾的图纸                                                                               
  其暗通道

   公海赌船网址 32  
公海赌船网址 33

 公海赌船网址 34  公海赌船网址 35  公海赌船网址 36

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

   公海赌船网址 37  
公海赌船网址 38

 公海赌船网址 39  公海赌船网址 40  公海赌船网址 41

   公海赌船网址 42   公海赌船网址 43

          一些有雾的图纸                                                                              
   其暗通道

 公海赌船网址 44  公海赌船网址 45  公海赌船网址 46

   公海赌船网址 47   公海赌船网址 48

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

           原图                          
   去雾图                          
 对应的大批量光幕

          一些有雾的图纸                                                                              
   其暗通道

     
由上述几幅图像,能够显然的看看暗通道先验理论的普遍性。在作者的舆论中,总括了四千多副图像的性状,也都基本符合那么些先验,因而,大家得以认为实际一条定律。

 
 这里的大量光幕和何凯明的舆论中的透射率图不是同三个定义,由此不富有可比性。

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

     
有了这一个先验,接着就必要实香港行政局部数学方面包车型客车推理来最终化解难题。

 
 在大气光幕的公式中,大家看出有大局大气光A的影响,但是上述计算F(X)的进程确没有涉及到A,极度无语啊。

     
由上述几幅图像,能够明显的观察暗通道先验理论的普遍性。在小编的随想中,总结了四千多副图像的特征,也都基本符合那个先验,因而,大家能够认为实际一条定律。

  首先,在电脑视觉和处理器图形中,下述方程所讲述的雾图形成模型被广泛使用:

 
 从作用上看,笔者所列举的那些事例都依旧不错的,尤其是第壹幅图,用何凯明的暗通道小编直接没有调出那种成效。

     
有了那些先验,接着就要求开始展览一些数学方面包车型大巴演绎来最终解决难题。

                                                  
公海赌船网址 49

 
 上述都是用中值滤波做的效应,在部分图像对应大气光幕图上能够看来,图像的边缘处有一对小圆弧,那一个都是矩形半径中值滤波的明朗划痕,而据悉双方滤波的自身也实行过,并不曾像参考杂文2说的那么有微微革新,感觉相互互相,而且某些图还会并发突变,由此作者觉着写那些杂谈纯粹是为了发故事集。 

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

 
 个中,I(X)正是我们现在早已部分图像(待去雾的图像),J(x)是大家要过来的无雾的图像,A是环球大气光成分,
t(x)为透射率。今后的已知条件便是I(X),必要目的值J(x),鲜明,那是个有很多解的方程,由此,就供给有个别先验了。

肆 、代码达成细节

                                                
  公海赌船网址 50

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

   
 在代码完成上,个人感觉没有何样困难,先求暗通道,然后正是几个中值滤波恐怕是两岸滤波,求全局大气光的长河还论及到细微值滤波,主要的代码如下:

 
 在那之中,I(X)就是大家未来曾经有个别图像(待去雾的图像),J(x)是大家要过来的无雾的图像,A是海内外大气光成分,
t(x)为透射率。以往的已知条件就是I(X),必要指标值J(x),显明,那是个有更仆难数解的方程,由此,就须求有的先验了。

                                                   
公海赌船网址 51

void _stdcall HazeRemovalBasedOnMedianBlur(unsigned char * Scan0, int Width,int Height,int Stride,int DarkRadius,int MedianRadius,int P)
{
    int  X, Y, Diff,Min,F;
    unsigned char* Pointer, *DarkP, *FilterP,* FilterPC;
    unsigned char * DarkChannel = (unsigned char*)malloc(Width * Height);
    unsigned char * Filter = (unsigned char*)malloc(Width * Height);
    unsigned char * FilterClone = (unsigned char*)malloc(Width * Height);

    for (Y = 0; Y < Height; Y++)
    {
        Pointer = Scan0 + Y * Stride;
        DarkP = DarkChannel + Y * Width;             // 由实际图像计算得到的图像暗通道     
        for (X = 0; X < Width; X++)
        {
            Min = *Pointer;
            if (Min > *(Pointer + 1)) Min = *(Pointer + 1);
            if (Min > *(Pointer + 2)) Min = *(Pointer + 2);
            *DarkP = (unsigned char)Min;
            DarkP++;
            Pointer += 3;
        }
    }
    memcpy(Filter, DarkChannel, Width * Height);                        // 求全局大气光A时会破坏DarkChannel中的数据

    MinValue(DarkChannel, Width, Height,Width,DarkRadius);                // 求取暗通道值

    // 利用暗通道来估算全局大气光值A
    int Sum, Value,Threshold = 0;
    int SumR = 0, SumG = 0, SumB = 0, AtomR, AtomB, AtomG, Amount = 0;
    int* Histgram = (int*)calloc(256 , sizeof(int));    
    for (Y = 0; Y < Width * Height; Y++) Histgram[DarkChannel[Y]]++;
    for (Y = 255, Sum = 0; Y >= 0; Y--)
    {
        Sum += Histgram[Y];
        if (Sum > Height * Width * 0.01)
        {
            Threshold = Y;                                        // 选取暗通道值中前1%最亮的像素区域为候选点
            break;
        }
    }
    AtomB = 0; AtomG = 0; AtomR = 0;
    for (Y = 0, DarkP = DarkChannel; Y < Height; Y++)
    {
        Pointer = Scan0 + Y * Stride;
        for (X = 0; X < Width; X++)
        {
            if (*DarkP >= Threshold)                            //    在原图中选择满足候选点的位置的像素作为计算全局大气光A的信息                        
            {
                SumB += *Pointer;
                SumG += *(Pointer + 1);
                SumR += *(Pointer + 2);
                Amount++;
            }
            Pointer += 3;
            DarkP++;
        }
    }
    AtomB = SumB / Amount;
    AtomG = SumG / Amount;
    AtomR = SumR / Amount;

    memcpy(DarkChannel,Filter, Width * Height);                        // 恢复DarkChannel中的数据
    MedianBlur(Filter,Width,Height,Width,MedianRadius,50);          // 步骤1:使用中值滤波平滑,这样处理的重要性是在平滑的同时保留了图像中的边界部分,但是实际这里用中值滤波和用高斯滤波效果感觉差不多
    memcpy(FilterClone, Filter, Width * Height);

    DarkP = DarkChannel;
    FilterP = Filter;
    for (Y = 0; Y < Height * Width; Y++)              //利用一重循环来计算提高速度
    {
        Diff = *DarkP - *FilterP;                    //通过对|DarkP -FilterP |执行中值滤波来估计的局部标准差,这样可以保证标准差估计的鲁棒性
        if (Diff < 0) Diff = -Diff;
        *FilterP = (unsigned char)Diff;
        DarkP++;
        FilterP++;
    }
    MedianBlur(Filter,Width,Height,Width,MedianRadius,50);

    FilterPC = FilterClone;
    FilterP = Filter;
    for (Y = 0; Y < Height * Width; Y++)
    {
        Diff = *FilterPC - *FilterP;                    // 步骤2:然后考虑到有较好对比度的纹理区域可能没有雾, 这部分区域就不需要做去雾处理
        if (Diff < 0) Diff = 0;                            // 这里可以这样做是因为在最后有个max(....,0)的过程,
        *FilterP = (unsigned char)Diff;
        FilterPC++;
        FilterP++;
    }

    DarkP = DarkChannel;
    FilterP = Filter;

    for (Y = 0; Y < Height * Width; Y++)
    {
        Min = *FilterP * P / 100;
        if (*DarkP > Min) 
            *FilterP = Min;                                // 获得满足约束条件的大气光幕
        else
            *FilterP = *DarkP;
        DarkP++;
        FilterP++;
    }

    FilterP = Filter;
    for (Y = 0;Y < Height; Y++)
    {
        Pointer = Scan0 + Y * Stride;
        for (X = 0; X < Width; X++)
        {
            F = *FilterP++;
            if (AtomB != F) 
                Value = AtomB *(*Pointer - F) /( AtomB - F);
            else
                Value=*Pointer;
            *Pointer++ = Clamp(Value);
            if (AtomG != F) 
                Value =  AtomG * (*Pointer - F) /( AtomG-F);
            else
                Value =  *Pointer;
            *Pointer++ = Clamp(Value);
            if (AtomR != F) 
                Value =  AtomR *(*Pointer - F) /( AtomR-F);
            else
                Value =  *Pointer;
            *Pointer++ = Clamp(Value);
        }
    }
    free(Histgram);
    free(Filter);
    free(DarkChannel);
    free(FilterClone);
}

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

   
如上所述,上标C表示Murano/G/B多个通道的意味。

   关于中值滤波或然两者滤波的立时算法,可以在自个儿博客中找到多量的连锁音讯。

                                                 
  公海赌船网址 52

   
首先倘使在每一个窗口内透射率t(x)为常数,定义他为公海赌船网址 53,并且A值已经给定,然后对式(7)两边求一回最小值运算,获得下式:

   
 在先后的耗时上,主要照旧三遍中值处理上,借助于C++的一对优化(比如内嵌SSE代码,C#做不到)中值的进程也一定快了,笔者用1024*768的灰度图测试耗费时间约为60ms(未考虑用三十二线程,因为11分程序用多线程编码上会复杂不少),对彩色图用那种方法去雾,I3CPU上1024*768的总耗费时间约为140ms,想要实时,换换I7的CPU试试啊(传说中自笔者的那篇实时去雾的篇章的算法在I3上20ms,I7上有测试注明只要3到4ms)。

   
如上所述,上标C表示奥迪Q5/G/B四个通道的情致。

                                 
公海赌船网址 54

   
 由于算法的末梢一步的公式难点,在一些参数情形下图像会现出黑快大概白块,近期该难点从未化解。
有趣味对改算法进行更为测试的校友可协调查研商究下。

   
首先借使在每二个窗口内透射率t(x)为常数,定义他为公海赌船网址 55,并且A值已经给定,然后对式(7)两边求五遍最小值运算,获得下式:

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

     相关测试代码下载:

                               
  公海赌船网址 56

                                              
公海赌船网址 57

   
  http://files.cnblogs.com/Imageshop/HazeRemovalBasedOnMedianBlur.rar

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

     因而,可推导出:

     公海赌船网址 58

                                               公海赌船网址 59

                                                        
公海赌船网址 60

 公海赌船网址 61

     因而,可推导出:

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

*********************************笔者:
laviewpbt   时间: 二零一三.12.5   联系QQ:  33184777
 转发请保留本行消息*************************

                                                     
   公海赌船网址 62

                                                 公海赌船网址 63

 

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

    那就是透射率公海赌船网址 64的预估值。

                                                 公海赌船网址 65

   
在现实生活中,就算是晴朗白云,空气中也存在着部分微粒,因而,看远处的实体还是可以感觉到雾的震慑,其余,雾的留存令人类感到景深的留存,由此,有要求在去雾的时候保留一定程度的雾,那足以通过在式(11)中引入一个在[0,1]
之间的因子,则式(11)更正为:

    那就是透射率公海赌船网址 66的预估值。

                                              
公海赌船网址 67

   
在现实生活中,固然是晴天白云,空气中也设有着部分颗粒,由此,看远处的物体仍可以够感觉到雾的熏陶,别的,雾的留存让人类感到景深的存在,由此,有需求在去雾的时候保留一定水准的雾,那足以由此在式(11)中引入三个在[0,1]
之间的因数,则式(11)改良为:

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

                                          
    公海赌船网址 68

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

     本文中享有的测试结果正视于: 
ω=0.95。

      1)
从暗通道图中依照亮度的轻重缓急取前0.1%的像素。

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

          2)
在那个任务中,在原始有雾图像I中寻找对应的具备最高亮度的点的值,作为A值。

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

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

          2)
在那些职务中,在原始有雾图像I中搜索对应的有着最高亮度的点的值,作为A值。

     以往I,A,t都已经求得了,因而,完全能够展开J的一个钱打二十五个结。

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

     当投射图t
的值十分小时,会导致J的值偏大,从而使淂图像全部向白场过度,因而一般可安装一阈值T0,当t值小于T0时,令t=T0,本文中颇具机能图均以T0=0.1为专业计量。

     将来I,A,t都已经求得了,因而,完全可以开始展览J的计量。

     由此,最终的回复公式如下:

     当投射图t
的值十分的小时,会导致J的值偏大,从而使淂图像全体向白场过度,因而一般可设置一阈值T0,当t值小于T0时,令t=T0,本文中兼有机能图均以T0=0.1为正式测算。

                              
 公海赌船网址 69

     由此,最终的东山再起公式如下:

    
当间接用上述辩驳进行回复时,去雾的效应其实也是很领会的,比如上边一些例证:

                              
 公海赌船网址 70

   公海赌船网址 71   
公海赌船网址 72

    
当直接用上述申辩举办苏醒时,去雾的效率实在也是很肯定的,比如上面一些例子:

   公海赌船网址 73  
 公海赌船网址 74

   公海赌船网址 75    公海赌船网址 76

                
有雾图                                           
 去雾图

   公海赌船网址 77  
 公海赌船网址 78

      注意到第3幅图的原图八个字的周围显明有一块不调和的地方,而第2图顶部水平方向就好像有一块没有开始展览去雾处理,这么些都以由于大家的透射率图过于粗糙了。

                
有雾图                                           
 去雾图

     
要得到越来越精致的透射率图,何博士在篇章中提议精通soft
matting方法,能获取那3个细致的结果。不过她的二个沉重的通病就是速度特慢,不利用于实际利用。在二零一三年,何大学生又除了一片故事集,个中涉嫌了导向滤波的方法来获取较好的透射率图。该格局的要紧进程集中于不难的正方模糊,而方框模糊有多重和半径无关的快捷算法。因而,算法的实用性特强,关于这么些导向滤波算法大家在何大学生的网站能够自个儿去研习下,除了在去雾方面外,还享有其余多地点的应用,那某些本文不多述。

      注意到第壹幅图的原图多个字的四周明显有一块不和谐的地点,而第①图顶部水平方向如同有一块没有展开去雾处理,那一个都以由于大家的透射率图过于粗糙了。

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

     
要获得越来越精致的透射率图,何大学生在篇章中建议精通soft
matting方法,能得到特别细致的结果。可是他的三个沉重的瑕疵便是速度特慢,不利用于实际采纳。在2012年,何大学生又除了一片散文,当中涉嫌了导向滤波的主意来博取较好的透射率图。该方法的主要进程集中于不难的四方模糊,而方框模糊有多重和半径无关的全快速计算法。由此,算法的实用性特强,关于这么些导向滤波算法大家在何大学生的网站能够协调去研习下,除了在去雾方面外,还拥有其余多地点的行使,那有的本文不多述。

  公海赌船网址 79  
公海赌船网址 80

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

  公海赌船网址 81  
公海赌船网址 82 

  公海赌船网址 83   公海赌船网址 84

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

  公海赌船网址 85   公海赌船网址 86 

  公海赌船网址 87   
公海赌船网址 88

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

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

  公海赌船网址 89    公海赌船网址 90

  公海赌船网址 91    公海赌船网址 92

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

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

  公海赌船网址 93    公海赌船网址 94

  公海赌船网址 95  
 公海赌船网址 96

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

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

  公海赌船网址 97  
 公海赌船网址 98

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

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

  第1:窗口的尺寸。这些对结果来说是个重点的参数,窗口越大,其涵盖暗通道的票房价值越大,暗通道也就越黑。我们不去从理论角度解析,从推行的意义来看,如同窗口越大,去雾的法力越不通晓,如下图所示:

  ② 、各参数对去雾结果的熏陶

   公海赌船网址 99   
 公海赌船网址 100

  第三:窗口的大大小小。这么些对结果来说是个至关心体贴要的参数,窗口越大,其含有暗通道的可能率越大,暗通道也就越黑。大家不去从理论角度解析,从执行的效应来看,仿佛窗口越大,去雾的效益越不明了,如下图所示:

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

   公海赌船网址 101   
 公海赌船网址 102

   公海赌船网址 103  
公海赌船网址 104

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

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

   公海赌船网址 105   公海赌船网址 106

  笔者的建议是窗口大小在11-51时期,即半径在5-25时期。

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

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

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

  
公海赌船网址 107   公海赌船网址 108

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

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

   公海赌船网址 109   公海赌船网址 110

  
公海赌船网址 111   公海赌船网址 112    

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

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

   公海赌船网址 113   公海赌船网址 114    

    三:编码的手续

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

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

    那里供给专注的是MinFilter算法的高效完毕,提供一篇散文供有须要的朋友学习:STREAMING
MAXIMUM-MINIMUM FILTER USING NO MORE THAN THREE COMPARISONS PER
ELEMENT
 。这些算法的时日复杂度是O(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);

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

    那里需求小心的是MinFilter算法的急迅完结,提供一篇随想供有须求的爱人学习:STREAMING
MAXIMUM-MINIMUM FILTER USING NO MORE THAN THREE COMPARISONS PER
ELEMENT
 。那一个算法的时日复杂度是O(1)的。

     那里表达有个别,原始散文中的A最终是取原始像素中的某二个点的像素,作者骨子里是取的符合条件的全数点的平均值作为A的值,笔者这么做是因为,假若是取三个点,则各通道的A值很有或然全数很相近255,这样的话会促成处理后的图像偏色和产出大批量色素斑点。原文小编说那些算法对天空部分不需特备处理,小编实在发现该算法对有天上的图像的效率一般都不佳。天空会并发鲜明的过渡区域。作为消除方案,作者增添了叁个参数,最大全球大气光值,当计算的值超出该值时,则就取该值。
 

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

    公海赌船网址 115  
公海赌船网址 116  
 公海赌船网址 117

     那里表达有些,原始故事集中的A最后是取原始像素中的某三个点的像素,小编实际是取的符合条件的全数点的平均值作为A的值,笔者这么做是因为,假若是取3个点,则各通道的A值很有恐怕整个很相近255,那样的话会招致处理后的图像偏色和出现大批量色素斑点。原文小编说那些算法对天空部分不需特备处理,作者其实发现该算法对有天上的图像的意义一般都倒霉。天空会冒出显明的连通区域。作为消除方案,我扩充了三个参数,最大全球大气光值,当总括的值大于该值时,则就取该值。  

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

    公海赌船网址 118   公海赌船网址 119  
 公海赌船网址 120

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

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

  在式(12)中,各个通道的数量都亟待除以对应的A值,即归一化,那样做,还存在2个标题,由于A的选项过程,并不可能担保每一种像素分量值除以A值后都低于1,从而导致t的值大概小于0,而那是不容许的,原文笔者并不曾交代那或多或少是怎样处理的。小编在事实上的编码中发觉,倘诺的确这么做了,其意义也并不是很理想 ,因而,小编最终的方法是在式(12)中,不考虑A的计量。

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

        4)计算导向滤波图。

  在式(12)中,各种通道的多少都需求除以对应的A值,即归一化,那样做,还留存七个标题,由于A的取舍进程,并不能够担保每一个像素分量值除以A值后都自愧不如1,从而导致t的值恐怕小于0,而那是不容许的,原文小编并从未交代这或多或少是什么样处理的。作者在其实的编码中发觉,要是真的如此做了,其意义也并不是很理想 ,由此,小编最后的点子是在式(12)中,不考虑A的测算。

  
那里能够一贯用原始的图像做导向图,当然也得以用其灰度图,不过用奥德赛GB导向图在下一步的总结中会占用比较大的时刻。

        4)计算导向滤波图。

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

  
那里能够一向用原始的图像做导向图,当然也能够用其灰度图,但是用牧马人GB导向图在下一步的计算中会占用比较大的日子。

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

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

  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

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

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

  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

      还有少数正是,上述计算要求在[0,1]限定内进行,也正是说导向图和预估的透射率图都必须从[0,255]先映射到[0,1]在进展测算。

      
由地点的代码,可知,首要的工作量在均值模糊上,而均值模糊是个很便捷的算法,关于均值模糊的优化可参照笔者从前的稿子:彩色图像高速模糊之懒惰算法。

     
关于guidedfilter中的半径r值,因为在前方举行小小的值后暗通道的图像成一块一块的,为了使透射率图尤其精细,提议这几个r的取值不低于举行小小的值滤波的半径的4倍,如下图所示:

      还有有个别正是,上述计算必要在[0,1]限定内展开,也正是说导向图和预估的透射率图都必须从[0,255]先映射到[0,1]在举办计算。

   
公海赌船网址 121    
公海赌船网址 122

     
关于guidedfilter中的半径r值,因为在前面进行小小的值后暗通道的图像成一块一块的,为了使透射率图特别小巧,建议那一个r的取值相当的大于实行小小的值滤波的半径的4倍,如下图所示:

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

    公海赌船网址 123  
  公海赌船网址 124

      能够阅览,当r比较小的时候,在透射率图中挑凉州看不到什么细节消息,由此苏醒处的图像边缘处不精通。

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

     
参数eps的取值也拥有青眼,他重即使为着幸免总计中除以0的一无可取以及为了使得一些总结结果未必过大,一般建议取值0.001可能更小。

      能够看看,当r比较小的时候,在透射率图中着力看不到什么细节消息,由此苏醒处的图像边缘处不引人侧目。

     
若是利用的印花途胜GB图做导向图,总括时间上会扩展很多,所的到的透射率图的边缘会比灰度图所拍卖的保存了越来越多的底细,效果上略微比灰度图好,如下所示:

     
参数eps的取值也持有青眼,他根本是为了以免万一计算中除以0的失实以及为了使得一些总结结果未必过大,一般提议取值0.001要么更小。

    
公海赌船网址 125  
 公海赌船网址 126

     
要是应用的多姿多彩奇骏GB图做导向图,总结时间上会增添很多,所的到的透射率图的边缘会比灰度图所处理的保留了更加多的细节,效果上略微比灰度图好,如下所示:

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

     公海赌船网址 127  
 公海赌船网址 128

    
公海赌船网址 129   
公海赌船网址 130

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

                      
(c)使用灰度图为导向图获得的透射率图                      
    (d)使用汉兰达GB图为导向图获得的透射率图

  
  公海赌船网址 131    公海赌船网址 132

     公海赌船网址 133   
公海赌船网址 134

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

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

     公海赌船网址 135    公海赌船网址 136

       以昂CoraGB图为导向图的估测计算中,涉及到3*3片段矩阵求逆的进度,即便用非matlab语言写,可以先借助于matlab的符号计算成效,以及在那之中的符号计占卜令simple,把总结结果算出来,然后再再其余高级语言中达成。

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

       (6)
按式(22)进行无雾图像的东山再起。

       以福特ExplorerGB图为导向图的乘除中,涉及到3*3局地矩阵求逆的长河,要是用非matlab语言写,能够先借助于matlab的符号总计作用,以及中间的符号总结命令simple,把总括结果算出来,然后再再其余高级语言中贯彻。

 ④ 、其余部分去雾效果图

       (6)
按式(22)举行无雾图像的东山再起。

 
公海赌船网址 137 
公海赌船网址 138 
公海赌船网址 139

 肆 、其余部分去雾效果图

   公海赌船网址 140  
 公海赌船网址 141  
公海赌船网址 142

  公海赌船网址 143  公海赌船网址 144  公海赌船网址 145

   公海赌船网址 146   
公海赌船网址 147  
公海赌船网址 148

   公海赌船网址 149  
 公海赌船网址 150   公海赌船网址 151

   公海赌船网址 152  
 公海赌船网址 153  
公海赌船网址 154

 
 公海赌船网址 155    公海赌船网址 156   公海赌船网址 157

                             
原图                                                
去雾效果图                                                     
透射率图

   公海赌船网址 158  
 公海赌船网址 159   公海赌船网址 160

      上海教室中最后一副图我接二连三做了五次去雾的拍卖。 

                             
原图                                                
去雾效果图                                                     
透射率图

      在原文中,有诸如此类一段话:

      上海体育场面中最后一副图作者老是做了一遍去雾的拍卖。 

  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.

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

     意思正是说直接去雾后的图像会比原来的暗,因而在拍卖完后须要进行一定的暴露增强,但作者没有表明其是什么进步的,
因而,这里的图和她杂谈的成效有所不相同时符合规律的。一般在去雾处理后再用自动色剂之类的算法增强下会得到对比满意的结果,如下图:

  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.

     公海赌船网址 161 
   公海赌船网址 162  
 公海赌船网址 163

     意思便是说直接去雾后的图像会比原来的暗,因而在拍卖完后需求开始展览自然的暴露增强,但我没有认证其是怎么着增强的,
因而,那里的图和他杂文的意义有所区别时符合规律的。一般在去雾处理后再用自动色剂之类的算法增强下会获得比较知足的结果,如下图:

         
原图                
去雾后              +自动色阶

     公海赌船网址 164 
   公海赌船网址 165  
 公海赌船网址 166

     
去雾算法近年来也享有许多其他的措施,但是小编所接触的,很多都是以这一个为根基,因而,先弄会以此为商量其他的去雾算法能奠定加强的根底。

         
原图                
去雾后              +自动色阶

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

     
去雾算法近来也负有众多别的的办法,不过自个儿所接触的,很多都以以那么些为底蕴,由此,先弄会以此为钻探其余的去雾算法能奠定坚实的基本功。

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

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

     
小编对两者滤波算法那也做了试验,发现这一个的成效也还可以,正是速度慢了累累,双边滤波的赶快速总括法其实快不起来的,所以那么些的实用性不高,作者选取了一些图像做相比:

  后记:稍微有看了几篇去雾的篇章,基本上都以围绕着收获透视率图做小说,比如某个稿子讲用联合双边滤波情势得到迷你的透射率,从自家个人浅薄的认识中,笔者认为去雾已几近跳不出暗原色那个范围了。

     公海赌船网址 167   
公海赌船网址 168

     
作者对互相滤波算法那也做了试验,发现这么些的功力也可以接受,就是速度慢了许多,双边滤波的快捷算法其实快不起来的,所以那么些的实用性不高,笔者选用了部分图像做相比:

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

     公海赌船网址 169    公海赌船网址 170

     公海赌船网址 171   
公海赌船网址 172

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

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

     公海赌船网址 173    公海赌船网址 174

       上海体育场所能够很精通的观察联合双边滤波的透射率图没有导向滤波的精美,但比原来的粗疏的透射率图照旧好广大,过渡相当细腻,因此,也能博得不错的视觉去雾效果。

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

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

       上海图书馆能够很分明的见到联合双边滤波的透射率图没有导向滤波的神工鬼斧,但比原来的粗疏的透射率图依旧好过多,过渡不粗腻,因而,也能取得正确的视觉去雾效果。

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

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

    公海赌船网址 175

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

   
我分别用VB6和C#做了个程序,三个程序都已经通过个其余语言方式开始展览了优化,算法部分编码是同一的,C#运转速度大约是VB6的1.8倍。

    公海赌船网址 176

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

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

 

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

 ⑤ 、算法的局限性

 

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

    

 

    二零一三.8.23 后记补充勘误:

     在继续对该算法的关注中,发现自己在前面做出了二个荒唐的论断,正是关于式(11)中/A的操作。小编在前方说那么些除法会引起局地标题,由此,去除了这一步。可是后来的实践表明正是有了这一步,对于相比较度低的图像才能够赢得很好的去雾高对比度图。

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

   
还有一个作业便是式(11)严厉的来说是要对原来图像的每一个通道进行归一化后,再取各种通道Odyssey/G/B值的小小值获得中间图,然后对那个个中图实行点名半径的非常小值滤波后,通过11式到手粗糙的透射率图,那么这样就必要多不少计算,我在实际中窥见只要直白用前边的暗通道图/A实行操作,两者的效果分歧不领悟,因而,可用那种便利的办法。

公海赌船网址 177  
公海赌船网址 178

 上海体育地方是一副经典的测试图,尽管取得了相比好的功能,不过仿佛马路那一块的效能不如部分其余人公开的成果那么好。

公海赌船网址 179  
公海赌船网址 180

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

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

 
公海赌船网址 181  
公海赌船网址 182

     还有:

公海赌船网址 183 
公海赌船网址 184

公海赌船网址 185  公海赌船网址 186

   

   总计:作者对那种去雾算法的意义仍然很好听的, 效果和进程都还相比较合适。

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

   二零一三.10,10 后记补充:

    一直听大人讲C的作用很高,于是用C完毕了该算法,并且编制了一个可供其余语言调用的dll文件,然后对小小值滤波算法又开始展览了出格的优化,算法速度有了十分的大的坚实,特别是在用VS2010时,编写C的代码能够勾选下图中的SSE选项和飞跃(fp:fast),程序会调用SSE一些函数,完结指令级其他互相。而这一个C#的编写翻译器是无能为力兑现的。

公海赌船网址 187

    
同样的算法,相对于原来的C#先后,程序的进程能增强一倍左右,对于800*600的图像,在本身的I3的CPU上平均能能完结20fps的进程(只占用了一个核的CPU财富),因而能够适用于不高于该限量内的实时图像处理。

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

公海赌船网址 188

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

  
公海赌船网址 189   
 公海赌船网址 190

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

 

 二〇一六.1.12
重大立异(可完毕实时效劳):

   
 何的算法效果以及常见的实用性都比其他的去雾算法要好,而根本的难点就是其速度依旧不够快,有着太多的浮点总计。鉴于此,笔者也往往试着对代码进行深层次的优化,包含SSE处理、并行运转等,但由于算法自身的相继执行,不或许全程并行,偶尔二个小函数能够互相,但出于其自身执行就专门快,比如不要5ms,你去用并行算法恐怕源消耗费时间还会大学一年级部分。因而,一向尚未什么样大的腾飞,对于一副1024*768的彩图实行去雾供给90ms,那早晚不可能满意急需。

   
 近来,在盘算,既然暗通道去雾的透射率图比其他的算法都来的神工鬼斧,假若方便的回落一点点其精度,其去雾的效能理论上相应不会有太大的分歧,于是小编想到了一种艺术,即求取透射率的时候不是对原图实行求取,而是先对原图实行下采集样品,比如裁减为原图的肆分之一,计算出小图的透射率,之后在通过插值的不二法门的拿走原图大约的透射率,则应当也能够收获效果。经超过实际践,那种方法大大的进步了推行进程,而且效果和原始的方案基本一致,对于1024*768的图像大概只需求(I3CPU)30ms了,即使进一步取11.11%的缩放,则只要求大概20ms,完全能够满意工业实时性须求高的场馆。

   
当然,若是你的压缩全面不是特地质大学的话,比如收缩为原本的0.5大小,可能两回缩放所用的耗费时间还抵消了总括小图的透射率图所换成的毛利,由此必须合理选取这几个下采集样品率。

   
要落到实处如此的快慢,当然如故须求很高的优化技术的,这几个事物如故拥有保留相比较好。 

   
笔者做了3个程序,集成了本博客中6种图像去雾的算法: 图像去雾综合版本

公海赌船网址 191

     

   
用暗通道的算法对一段摄像展开了拍卖,大家可以在那里看看成效:http://video.sina.com.cn/v/b/124538950-1254492273.html

 
  公海赌船网址 192

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

 

 

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

 

 

 伍 、算法的局限性

 

     
暗原色先验是一种总计的结果,是对大量窗外无雾照片(outdoor haze-free
images)的计算结果,假若指标场景内在的就和大气光类似,比如雪地、棕色背景墙、大海等,则是因为前提条件就不得法,因而一般无法取得满意的机能,而对此一般的景点照片以此算法能处理的科学。

    

 

    2012.8.23 后记补充改良:

     在此起彼伏对该算法的酷爱中,发现本身在日前做出了四个荒唐的论断,正是关于式(11)中/A的操作。小编在面前说那些除法会引起局地标题,因而,去除了这一步。不过后来的实践注脚正是有了这一步,对于相比较度低的图像才方可拿走很好的去雾高相比较度图。

    前边说的/A操作恐怕会导致t的值小于0,这种场合就足以把t的值直接设置为0来缓解。

   
还有一个作业正是式(11)严厉的来说是要对本来图像的各种通道举办归一化后,再取每一个通道酷威/G/B值的细小值获得中间图,然后对那些当中图进行点名半径的纤维值滤波后,通过11式拿走粗糙的透射率图,那么那样就要求多不少计算,小编在实际中发现只要一贯用后边的暗通道图/A实行操作,两者的效用区别不领会,因而,可用那种便当的主意。

公海赌船网址 193   公海赌船网址 194

 上航海用图书馆是一副经典的测试图,尽管获得了比较好的作用,不过如同马路那一块的效应不如部分其余人公开的硕果那么好。

公海赌船网址 195   公海赌船网址 196

     那也是一副比较广泛的测试图,该图也是紧用去雾获得结果,未做任何的后处理,同CSDN二个的案例库:图像去雾的算法钻探中的效果相比较,在整幅图像的周旋统一和和协调性上都要好多少个档次。

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

  公海赌船网址 197   公海赌船网址 198

     还有:

公海赌船网址 199  公海赌船网址 200

公海赌船网址 201  公海赌船网址 202

   

   总结:作者对那种去雾算法的机能依旧很惬意的, 效果和速度都还相比方便。

   附属类小部件的测试程序已经联合署名革新。

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

    平昔听旁人说C的功效很高,于是用C完结了该算法,并且编写制定了二个可供其余语言调用的dll文件,然后对小小值滤波算法又展开了出格的优化,算法速度有了相当的大的增加,越发是在用VS二零零六时,编写C的代码能够勾选下图中的SSE选项和高效(fp:fast),程序会调用SSE一些函数,完结指令级别的互相。而这几个C#的编写翻译器是无力回天兑现的。

公海赌船网址 203

     同样的算法,相对于原有的C#次第,程序的速度能坚实一倍左右,对于800*600的图像,在自己的I3的CPU上平均能能实现20fps的进程(只占用了三个核的CPU能源),因而得以适用于不高于该限量内的实时图像处理。

    
同样作者扩充了二个里面可调的参数供大家测试。

公海赌船网址 204

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

   公海赌船网址 205   
 公海赌船网址 206

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

 

 二零一五.1.12
重庆大学更新(可完毕实时效应):

   
 何的算法效果以及周边的实用性都比其他的去雾算法要好,而首要的标题便是其速度依旧不够快,有着太多的浮点计算。鉴于此,我也频仍试着对代码举办深层次的优化,包蕴SSE处理、并行运营等,但出于算法本人的顺序执行,无法全程并行,偶尔一个小函数能够并行,但鉴于其本身执行就特别快,比如不要5ms,你去用并行算法只怕源消耗费时间还会大学一年级些。因而,一向从未怎么大的提升,对于一副1024*768的彩图进行去雾须求90ms,那肯定不能满意供给。

   
 近期,在思考,既然暗通道去雾的透射率图比其余的算法都来的小巧,假如正好的下挫一点点其精度,其去雾的效率理论上相应不会有太大的界别,于是小编想开了一种方法,即求取透射率的时候不是对原图举办求取,而是先对原图实行下采集样品,比如减弱为原图的四分一,总计出小图的透射率,之后在经过插值的点子的获取原图差不离的透射率,则应该也得以赢得效果。经超过实际践,那种格局大大的提升了实践进程,而且作用和原来的方案基本一致,对于1024*768的图像大致只须求(I3CPU)30ms了,就算越来越取11.11%的缩放,则只要求大致20ms,完全能够满意工业实时性须要高的地方。

   
当然,即使您的紧缩全面不是尤其大的话,比如收缩为本来的0.5高低,恐怕五回缩放所用的耗费时间还抵消了计算小图的透射率图所换成的盈余,由此必须合理选拔这么些下采集样品率。

   
要达成如此的快慢,当然还是需求很高的优化技术的,这么些事物依然具备保留相比好。 

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

公海赌船网址 207

用暗通道的算法对一段录制展开了拍卖,大家能够在那边看到效率:http://video.sina.com.cn/v/b/124538950-1254492273.html



相关文章