去雾算法总结(传统+深度学习)

光在雾、霾等介质中传播时,由于粒子的散射作用导致成像传感器采集的图像信息严重降质,在很大程度上限制了图像的应用价值。图像去雾的目的是消除雾霾环境对图像质量的影响,增加图像的可视度,是图像处理和计算机视觉领域共同关切的前沿课题,吸引了国内外研究人员的广泛关注。

本文主要对近期的一些去雾方法进行简要介绍总结。

传统的去雾方法

传统的去雾方法主要是基于先验知识的,主要有何凯明等人暗通道先验(Dark Channel Prior,DCP)方法,Tan等人最大对比度(Maximum Contrast,MC)方法,Zhu等人的颜色衰减先验(Color Attenuation Prior,CAP)方法, Ancuti等人的色度不一致方法。

在这些方法中,最著名的是09年CVPR的best paper,何凯明的暗通道先验方法,本部分将对暗通道先验方法以及颜色衰减先验方法进行介绍。

1.Single Image Haze Removal Using Dark Channel Prior  何凯明  2009 CVPR

本文是所有的去雾方法里面最经典的一篇,本文是09年CVPR的best paper。作者何凯明提出了一种暗通道先验的方法来进行去雾操作。基于暗通道先验的去雾算法实际上是一种统计意义上的算法,作者总结了大量的室外无雾的图像,发现了在无雾图像中局部区域存在一些像素,这些像素中至少有一个颜色通道的亮度值非常非常低(低亮度值区域不包括天空区域)。关于此文的介绍网上非常多,这里就不做介绍了。

参考链接

1. https://zhuanlan.zhihu.com/p/28875405

2.  https://zhuanlan.zhihu.com/p/36785699

3. http://blkstone.github.io/2015/08/20/single-image-haze-removal-using-dark-channel/

4.  http://www.cnblogs.com/Imageshop/p/3515871.html

5.  http://www.cnblogs.com/Imageshop/p/3281703.html

6.  https://blog.csdn.net/songhhll/article/details/12612681

7.  https://blog.csdn.net/u013080652/article/details/42706301

8.K. He, J. Sun, and X. Tang, “Single image haze removal using dark channel prior,” IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 33, no. 12, pp. 2341–2353, 2011.


2. A Fast Single Image Haze Removal Algorithm Using Color Attenuation Prior 2015 TIP

和暗通道类似,这个color attenuation prior算法本质上也是一种统计上的发现。

 之所以对于单图像进行去雾处理是一个较难的内容是因为一个图像中包含的关于场景结构等信息非常少,因此很难获得较为全面的信息从而进行去雾。

然而,大脑在面对一幅图像的时候其实是可以很快的分辨清楚哪里有雾、哪里没有,或者很快分辨清楚近景、远景而不需要其他太多的资料。

作者基于这一思考,通过对很多副有雾图像进行分析发现了统计意义上的结论从而提出一个新的思路,通过对很多图像的远景、中景、近景进行分析发现了haze的浓度与亮度和饱和度之差呈正比。

这种方法的基本原理,依然是基于大气退化模型的

大气退化模型

由上式分析可以得到:

(1)直接的衰减会导致反射能量的减弱,导致亮度的低值。即公式中 J(x)t(x)

(2)大气光成分会增强brightness的值并且降低饱和度saturation。

 总结下来,即为,当雾的程度越大,大气光成分的的影响越大。因此,我们可以考虑通过研究saturation和brightness之间差来分析雾的浓度。

写成表达式的形式,即为

其中 d(x) 为景深,c(x) 是雾的浓度,v(x), s(x) 分别是value of brightness of scene,以及saturation。这个公式就是color attenuation prior(CAP)。作者通过构建训练样本采集了超过500张图像,最后得出了合适的参数。最终公式形式如下

最终的参数结果为

参考链接

1. Q. Zhu, J. Mai, and L. Shao, “A fast single image haze removal algorithm using color attenuation prior,” IEEE Transactions on Image Processing, vol. 24, no. 11, pp. 3522–3533, 2015.

2. https://zhuanlan.zhihu.com/p/28942127

基于深度学习的图像去雾方法

由于神经网络在检测,识别等任务上的取得了很大的进展,所以研究人员开始尝试用基于深度学习的方法取代传统的图像去雾方法。

其方法主要可以分为两种,一种是基于大气退化模型,利用神经网络对模型中的参数进行估计,早期的方法大多数是基于这种思想的;另一种是利用输入的有雾图像,直接输出得到去雾后的图像。目前最新的去雾方法更倾向于后者。

在本部分,将对近三年具有代表性的一些基于神经网络的图像去雾方法进行介绍。

1. DehazeNet: An End-to-End System for Single Image Haze Removal 华南理工大学 16 TIP

本文是是较早的一篇利用深度学习进行去雾的文章。

它是一种端到端的训练模型,利用神经网络来对大气退化模型中的t(x)进行估计。模型输入雾图,输出传输率t(x)映射图,然后通过大气退化模型来恢复无雾图像。采用深度CNN结构(4层),并提出了一种新的非线性激活函数。提高了恢复图像的质量。

该文章算法贡献如下:

1. end2end系统,直接学习并估计传输率与有雾图像的关系。

2. 提出nonlinear激活函数,称为BReLU(双边ReLU)。

3. 分析了DehazeNet与已有去雾技术之间的关系。

作者首先对大气退化模型进行了介绍,然后对几种传统的去雾方法进行了介绍:

(1)暗通道先验(Dark Channel Prior,DCP)

文献:He等人的暗通道先验

(2)最大对比度(Maximum Contrast,MC)

文献:Tan等人的Visibility in bad weather from a single image

(3)颜色衰减先验(Color Attenuation Prior,CAP)

文献:Zhu等人的A fast single image haze removal algorithm using color attenuation prior

(4)色度不一致

文献:Ancuti等人的A fast semiinverse approach to detect and remove the haze from a single image

网络结构

作者想要结合前面的四种传统方法,进行网络设计,网络结构主要分为4部分

(1)特征提取(Feature Extraction)

(2)多尺度映射(Multi-scale Mapping)

(3)局部极值(Local Extremum)

(4)非线性回归(Non-linear Regression)


网络结构

1)特征提取(Feature Extraction)

特征提取有别于传统卷积神经网络,DehazeNet采用“卷积+Maxout”的结构作为网络第一层。

其中F代表输出的特征,i代表第i个,1是是指第一层,k是指k个层进行maxout操作。W和B是权重和偏置。 第一层是特征提取层,即提取有雾图像特征。本文中使用了16个滤波器,通过maxout unit的激活函数,每四个输出一张图。这里不padding,输入是3*16*16三通道的块。输出的是四个12*12,每一个代表一种特征。

特征提取

作者在后面指出,“卷积+Maxout”等价于传统的手工去雾特征。当W1是反向(Opposite)滤波器,通道的最大等价于通道的最小值,等价于暗通道先验(DCP);当W1是环形(Round)滤波器, 等价于对比度提取,等价于最大对比度(MC);当W1同时包含反向(Opposite)滤波器和全通(All-pass)滤波器,等价于RGB到HSV颜色空间转换,等价于颜色衰减先验(CAP)。此外,从机器学习角度,Maxout是一种样条函数,具有更强的非线性拟合能力,如图(d)。


(2)多尺度映射(Multi-scale Mapping)

使用多尺度的平行卷积操作。由于多尺度特征被证明有利于去雾并且在inception的模型中也用到了平行卷积,即同一张图用不同尺度的卷积核进行卷积。分别用16个3*3、16个5*5和16个7*7的卷积核进行卷积,每一种尺度产生16个,并且通过padding每张图大小应该是一致的(pad见下图)。总共获得48个48*12*12特征图。



(3)局部极值(Local Extremum)

 根据假设透射率有局部不变性,所以用一个7*7局部最大值滤波替代maxpooling。输出是48个48*6*6。


4)非线性回归(Non-linear )

大气透射率是一个概率(0到1),不可能无穷大,也不可能无穷小。受到Sigmoid和ReLU激励函数的启发,提出双边纠正线性单元(Bilateral Rectified Linear Unit,BReLU),在双边约束的同时,保证局部的线性。

训练过程

1.数据集

 获取自然场景的有雾和无雾的图像是十分困难的,所以作者使用了基于物理雾霾形成模型的综合训练集。从因特网收集的图像中随机抽样10,000个大小为16*16的无雾霾patch。对于每个patch,作者统一采样10个t以生成10个模糊patch,这里为了减小变量学习的不确定性,将大气光A设置为1,共生成100,000个16*16的数据。

2.损失函数

作者将t的估计偏差作为损失函数,使用了均方差损失

参考链接

1. B. Cai, X. Xu, K. Jia, C. Qing, and D. Tao. Dehazenet: An end-to-end system for single image haze removal. IEEE Transactions on Image Processing, 25(11):5187–5198, 2016.

2. https://blog.csdn.net/u012556077/article/details/53364438

3. https://blog.csdn.net/yinhou1771/article/details/82682311

4. https://blog.csdn.net/u014195530/article/details/80963278

2. All-in-One Network for Dehazing and Beyond  Boyi Li  2017 ICCV

本文并没有单独估计t(x)和大气光A,而是通过轻量级的CNN直接生成清晰的图像,这种端到端的设计使得其可以嵌入到其他的模型中,比如说物体检测faster-RCNN。

该文章算法贡献如下:

1. end2end系统,提出了一个end to end的去雾模型,完成了haze  image到clear image之间的转化通过K(x)将t(x)与A统一,基于K(x)可以完成对清晰图像的重构。

2. 提出了新的比较去雾效果的客观标准,定量研究去雾质量如何影响后续高级视觉任务的,同时,其模型可以和其他深度学习模型无缝嵌。

作者首先介绍了一些之前的工作,并总结了之前方法的不足,作者认为:

      (1)之前的去雾算法没有端到端的去雾,而大多数用于图像恢复和增强的深度学习方法完全采用端到端建模,训练模型以直接从损坏的图像中回归干净的图像。作者认为估计参数有可能会使得误差相互放大。

      (2)目前,去雾模型依赖于两组评估标准:对于合成模糊图像,其清晰图像是已知的,通常计算PSNR和SSIM来进行评估;对于具有未知地面真实性的真实自然模糊图像,唯一可用的去雾结果比较是主观视觉质量。然而,在最先进的算法中,主观视觉质量的评价是难以做到的。而图像的清晰度会影响一些诸如目标检测类视觉任务的结果,所以,之前的方法缺少将去雾结果与高级视觉任务相关联去进行评估。

由大气退化模型,可以得到去雾后图像的表达式,如下:

可以看到,表达式中是有两个未知数的,作者的想法是,将这两个未知数化为一个,即用K(x)将A与t(x)相统一。其中,b是具有默认值的恒定偏差。

总体网络结构较为简单,主要分为2部分

      (1)K估计模块:利用输入图像I(x)对未知变量K(x)进行估计

      (2)干净的图像生成模块:将估计所得的K(x)作为自适应变量输入网络,得到J(x)

受到DehazeNet,MSCNN的启发,使用五个卷积层,并通过融合不同大小的滤波器形成多尺度特征。“concat1”层连接层“conv1”和“conv2”的特征,“concat2”连接来自“conv2”和“conv3”的那些; “concat3”连接来自“conv1”,“conv2”,“conv3”和“conv4”的那些。这种多尺度设计捕获不同尺度的特征。AOD-Net的每个卷积层仅使用三个滤波器。

1.损失函数

      使用了简单的均方差损失。

2.指标

      除了使用PSNR和SSIM指标外,作者还联合faster-RCNN进行了分析。

参考链接

1. Xu , and D. Feng . Aod-net: All-in-one dehazing network. In Proceedings of the IEEE International Conference on Computer Vision, volume 1, page 7, 2017.

2. https://zhuanlan.zhihu.com/p/47386292

3.Densely Connected Pyramid Dehazing Network  Rutgers University  2018 CVPR

作者的总体思路依旧是按照大气退化模型来进行的,作者指出,以往的方法较为侧重对传输图t(x)的估计,对于大气散射A,往往采用经验公式去估计,没有对A足够的重视,所以作者对二者均进行了估计。主要贡献如下:

1.提出了一种新型的端到端联合优化去雾网络,将公式嵌入到了网络,在训练阶段采取了阶段式训练的方法。

2.提出了一种边缘保留金字塔密集连接的编码器 - 解码器网络,用于精确估计传输映射。此外,它通过新提出的边缘保留损失函数进行优化。

3.利用GAN框架内的联合鉴别器来确定配对样本(即透射图和去雾图像)是否来自数据分布。

4.对两个合成数据集和一个真实世界的图像数据集进行了大量实验。进行消融研究以证明提出网络中不同模块所获得的改进。

如下图所示,网络以下四个模块组成:1)金字塔密集连接的传输图估计网 2)大气光估计网 3)嵌入公式 4)联合鉴别器网络

(1) Pyramid densely connected network for transmission map estimation

A. 用dense block做CNN的基本block来提取feature(dense block被认为是有利于融合多尺度特征)

B.multi-level pyramid pooling method. 是将得到的特征用不同尺寸的pooling,四个pooling layer,然后再upsize到原尺寸(就算多尺度的feature)

(2)Atmospheric Light Estimation Network

      作者同样假设大气光是均匀的e.g. A(z)=c constant。采用U-net来估计图像的大气光。

(3)嵌入公式

      在估计得到传输图与大气光后,将公式嵌入作为第三部分网络。

(4)鉴别器

      增加了一个discriminator 来更好的生成的transmission map, A(z)。 

损失函数

(1)edge-preserving loss

其中,LE,l2表示整体边缘保留损失,LE,g表示双向(水平,垂直)梯度损失,如下

LE,f表示特征损失,如下

(2) 判别器优化

        损失函数

(3)总损失

其中,Lt由边缘损失组成,La是预测A的l2损失,Ld表示除雾损失,也是l2损失,Lj是联合鉴别器损失,其前面的系数是一个常量。

损失太多训练时不好收敛,作者提出initialization stage,先分块优化每一个小block,然后再统一训练。

参考链接

1. H. Zhang and V. M. Patel. Densely connected pyramid dehazing network. In The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2018.

4. Gated Fusion Network for Single Image Dehazing 2018 CVPR

本文提出一种基于门限融合网络的雾霾图像的复原方法。该门限融合网络由一个编码解码网络构成。其中,编码网络用于对雾霾图像本身及其多种变换图像进行特征编码,解码网络则用于估计这些变换图像对应的权重。

具体而言,对一张雾霾图像,作者对其进行多种变换,包括图像白平衡、对比度增强和伽马矫正等操作提取图像内部的不同颜色或对比度特征,然后将得到的变换图像输入到门限融合卷积神经网络中,利用神经网络对雾霾图像的每个变换图像估计一个权重矩阵,再利用权重矩阵对所有的变换图像进行融合获得最终的去雾结果图。

 另外,为了去除恢复结果中容易出现的光晕效应(halo artifacts),作者提出了多尺度门限融合网络,可以有效增加网络感知野并减少光晕效应。

输入包括四部分,原图,三种方法预处理后的图像,即:

白平衡操作(目的是恢复出由大气光散射造成的颜色差异) 得到 Iwb

图像对比度增强(恢复出图像的可视化效果)  得到 Ice

gamma变换(对比度增强可能导致图像过暗,所以还对图像做gamma变换做增强)  得到 Igc

 最终的输出可以表达为如下形式,其中o代表逐元素相乘:

C代表confidence maps for gating,是通过神经网络所获得的

网络使用了encoder-decoder结构,这和U-net很像,但是其所有的feature大小保持一样,其同样像U-net一样使用了前后skip连接在一起的操作。卷积层为了获得更大的感受野使用了空洞卷积,每个卷积层后面加上一个矫正层,网络最后的输出是三个权重图C,网络的大致结构图如下所示:

网络使用了三个卷积块个三个反卷积块,除了第一层和最后一层,每一层的大小都是32个3*3*32的卷积核,第一层卷积核的大小是5*5,最后一层用于confidence map 的重建。

进一步优化

多尺度的Refine(具有多尺度风格,以防止halo artifacts):

通过对小尺度图像利用上述网络进行处理获得输出,然后输出进行上采样再送到同样的网络,这样做是为了学习得到更多的细节。每个级别的输入都是上一个级别输入大小的两倍,其相应的derived的预处理图像也是由上一个级别的输出图像得到的。这种级联的结构如下所示:

损失函数

1.对于前面的网络,对每一次的输出取MSE损失,损失函数如下:

其中,N是金字塔级别的个数,Θ是卷积和反卷积核的权重。

2.作者还使用了GAN网络来计算损失,添加了对抗性损失,其遵循[22]中的架构,构建了一个判别器。对抗损失定义如下:

[22] S. Nah, T. H. Kim, and K. M. Lee. Deep multi-scale convolutional neural network for dynamic scene deblurring. In CVPR, 2017. 5

3.最终的损失函数是:

在进行模型训练的时候,和前面的文章相同,作者同样使用的合数据集,但是作者还在合成的图像上增加了1%的高斯噪声来增加网络的鲁棒性。

在进行比较的时候,作者使用的指标为结构相似性(SSIM)与峰值信噪比(PSNR)。在测试的时候,作者还在公开数据集上进行了测试。

方法在一般自然图像中表现良好,但是在非常大的雾的情况下,不能取得良好的去雾效果。

参考链接

1. W. Ren, L. Ma, J. Zhang, J. Pan, X. Cao, W. Liu, and M.-H. Yang. Gated fusion network for single image dehazing.arXiv preprint arXiv:1804.00213, 2018.

2. http://tech.ifeng.com/a/20180321/44915180_0.shtml

3. https://kevinjhuang.github.io/2018/10/15/%E5%8D%9A%E5%AE%A262/

4. http://forum.xitek.com/forum.php?mod=viewthread&tid=1605692&page=1&ordertype=1


5.Gated Context Aggregation Network for Image Dehazing and Deraining 2019 WACV

本文利用GAN网络,实现可端到端的图像去雾,本文的重点在于解决了网格伪影(grid artifacts)的问题,该文章的方法在PSNR和SSIM的指标上,有了极大的提升,非常值得借鉴。

本文的主要亮点如下:

1. 提出端到端的去雾网络,不依赖于先验

2. 采用了smooth dilated convolution 代替原有的dilated convolution,解决了原来的dilated convolution导致的grid artifacts问题

3. 提出了一个gated fusion sub-network,融合high-level 及low-level 特征,提升复原效果

总体框架

三个卷积模块作为编码部分,一个反卷积和两个卷积作为解码部分在二者之间插入数个smoothed dilated resblocks。

Smoothed Dilated Convolution(平滑空洞卷积)

为了应对分割等任务, F. Yu[41] 等人提出空洞卷积(也叫扩张卷积),扩张卷积可以支持感受野的指数扩展而不会损失分辨率或覆盖范围。在一维情况下,给定1-D输入f,具有内核大小k的常规卷积层w的输出为:

其中一个输出点覆盖总k个输入点,因此感受野为k。 但是对于扩张的卷积,它可以被视为“带有扩张滤波器的卷积”,可以表示为:

但是它会所谓的网格伪影,针对这一问题,作者用了一个简单的分离卷积。

上面的图表示的是原始的空洞卷积的工作,从图中不同颜色的块块可以看出,经过dilated rate(r)>1的空洞卷积后,输出的特征层中相邻的特征值与输入特征层是完全独立的,没有相互依赖的关系,我们可以知道,图像是具有局部相关性的,同理,特征层也应该保留这个特性。

下面的图是经过改进的空洞卷积,在执行dilated rate>1的空洞卷积之前,做了一次核为(2r-1)的分离卷积,卷积的参数共享,经过该层卷积之后,每一个特征点都融合了周围(2r-1)大小的特征。该操作仅仅增加了(2r-1)(2r-1)大小的参数,却能有效的解决grid artifacts问题。

Gated Fusion Sub-network(门控融合子网)

该子网络主要是融合了不同层次的特征信息,以往的网络都是直接添加short-cut操作进行信息融合,本文的Gate fusion network 为不同层次的特征分别学习了权重,最后加权得到融合的特征层。

损失函数

简单的均方差损失

参考链接

1. Chen D , He M , Fan Q , et al. Gated Context Aggregation Network for Image Dehazing and Deraining[J]. 2018.

2. http://www.cnblogs.com/jingyingH/p/10061286.html

3. https://www.jianshu.com/p/6abff04c5f11

4. https://blog.csdn.net/suixinsuiyuan33/article/details/7945106

6.Towards Perceptual Image Dehazing by Physics-based Disentanglement and Adversarial Training 2018 AAAI

作者认为,之前的基于先验知识的去雾,缺点在于先验知识不是在任何情况都满足的(比如说多光源,大雾),并且不是监督训练的,而基于CNN的去雾需要训练集是成对的,即同时有有雾图像与无雾图像,而一个有效的去雾模型应该能够学习无雾图像到有雾图像的映射,无需使用paired supervision。

并且人类对于去雾后的图像应该和无雾图像的感知是一样的。基于以上观点,作者提出了Disentangled Dehazing Network,主要贡献如下:

1. 提出一种基于解耦的新型去雾网络

2. 收集了具有挑战性的数据集,包含800多个自然模糊图像与1000个无雾的室外场景图像

3. 通过对合成和真实图像的数据集的广泛实验来评估感知图像去雾

解耦网络 Disentangled Dehazing Network

作者引入基于基于解耦与重建的物理模型,目标是将有雾图像解耦为隐藏要素,再利用隐藏要素重建图像。

损失函数包含三部分,重建损失,对抗损失,正则化损失

(1)在重建损失中,使用L1损失函数,从而像素级一致性和较少模糊(与L2损失相比)

(2)为了生成both perceptually pleasing and hazefree images,作者其对中间输出J引入了多尺度生成训练,受到(Isola et al. 2017) and (Zhu et al. 2017)启发,作者使用了patch-level discriminator,并进行了改进,使用了局部鉴别器和全局鉴别器。多尺度对抗损失为:

(3)正则化损失:在该部分,借鉴了前人的经验,使用medium transmission map的平滑性作为正则化损失。

最终的损失函数为

目标函数为

恢复图像

通过前面的分析可以得到,作者可以得到两个去雾后的图像,一个是生成器GJ直接输出,另一个是利用估计的t和A来获得的,形式如下:

这两种方法得到的去雾图像各有优劣,其中生成器输出得到的图像倾向于生成具有更多纹理细节的图像,并且在感知上更加清晰,但是其易于受到噪声的影响并且会有undesirable artifacts,而用后种方式得到的图像更平滑,所以作者将二者进行了混合。

7.Cycle-Dehaze: Enhanced CycleGAN for Single Image 2018 CVPRW

这篇文章是基于《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》来做改进的,前者设计了一个循环的对抗网络学习图像风格的迁移,使用不成对的图像来训练网络。

  本文在其基础上,进行了改进,加入了循环感知一致损失(cyclic perceptual-consistency loss),对图片的特征进行监督,主要贡献如下:

1. 通过增加循环感知一致性损失以及循环一致性损失来增强用于单图像去雾的CycleGAN 架构。

2. 其方法既不需要模拟朦胧和地面实况图像的样本,也不需要估计大气模型参数

3. 通过拉普拉斯金字塔upscale dehazed images

4. 提供了一个通用模型,通过跨数据集来验证

Cycle-Dehaze 主要由两个生成器G,F和两个判别器Dx,Dy组成。

损失函数

在该部分,除了cycle-gan的损失外,作者使用了cyclic perceptual-consistency损失。

在cycle-consistency损失中,使用了VGG-16中的第2层和第5层的输出层来进行损失的计算,形式如下:

总的损失和目标函数如下:

你可能感兴趣的:(去雾算法总结(传统+深度学习))