结合天空分割和条件生成对抗网络的单幅图像去雾
2021-07-08陈永顺
陈 玮,陈永顺,尹 钟
(上海理工大学 光电信息与计算机工程学院,上海 200093)
1 引 言
图像增强是一个非常热门的研究领域,因为图像质量直接影响到计算机视觉系统.一般而言,户外图像都会因为不同的大气条件而受到一定程度的影响,尤其是雾霾的影响.这些大气条件造成的主要影响是图像的低对比度、扭曲的颜色和降低的能见度,致使监视、目标跟踪、遥感、交通控制和自动驾驶等系统性能可能会受到严重的影响[1,2],因此,人们对图像的去雾算法日益重视.
实现图像的去雾是一个高度不适定的难题.在过去的几十年里,人们提出了许多不同的图像去雾方法来解决这一难题,大致可分为传统的方法和现代的方法.这两种类型最显著的区别是,前一种类型是基于先验知识和物理模型进行去雾,后一种类型是基于神经网络的图像去雾方法.
Tan等[3]根据统计分析发现无雾图像比有雾图像具有更高的对比度,使用最大化局部对比度的策略实现图像去雾.Tarel等[4]提出了一种基于两种不同滤波器的方法:中值滤波器和保留边缘的滤波器,但去雾后的图像在景深变化边缘的地方会出现Halo效应.Fattal等[5]利用独立成分分析(Indepe-ndent component analysis,ICA)的方法来估计透射率,但该方法耗时较长,且对重霾图像的去雾效果一般.He等[6]通过对大量无雾图像的统计与分析提出了暗通道先验去雾方法(Dark Channel Prior,DCP),使用DCP计算透射率和大气散射模型恢复图像,然而,DCP在天空图像中降低了去雾图像的质量,且去雾耗时长、计算量大.为了解决He等方法中的问题,Meng等[7]对传输函数进行了边界约束,使透射率预测更加准确.Berman D等[8]人提出了一种基于非局部先验的去雾方法(面向像素的算法),该方法实时性较好,但出现恢复的图像会留有残雾和天空区域容易失真等情况.近年来,人工神经网络技术发展迅速,在计算机视觉系统中越来越受到人们的重视,在图像处理领域表现尤为显著,所以出现了基于神经网络的图像去雾方法.Cai等[9]提出一种从有雾图像直接生成无雾图像的去雾网络,将透射率和大气光值联合起来,并用神经网络对其进行估计,但对具有浓雾的图像处理时,存在对参数估计不精确的缺点,导致去雾程度不够.He Zhang等人[10]提出了一种边缘保持密集连接的金字塔去雾网络模型,图像去雾效果良好,然而恢复的图像细节不清晰.
综合来看,无论是基于大气散射模型的去雾算法,还是基于神经网络的去雾方法,现有的大多数图像去雾算法都会有某种程度上的不足,前者在某些较为特殊的环境下去雾效果欠佳,后者对大气光值的估计没有足够重视,而且还有可能出现对去雾透射率估计不精确的情况,导致去雾性能不佳.针对上述去雾研究的问题,本文提出了一种结合天空分割和条件生成对抗网络去雾算法.
2 大气散射模型
2.1 暗原色先验去雾算法
大气散射是一种当光穿过大气中的微小颗粒时并使其产生了偏离的物理现象.那么有雾图像的成因就可以用大气散射模型来解释,其模型公式如下:
I(x,y)=J(x,y)t(x,t)+A[1-t(x,y)]
(1)
其中,I(x,y)表示待去雾的图像,J(x,y)表示恢复的清晰图像,t(x,y)是透射率,A是大气光值.假设大气光是均匀的,则透射率可表示为:
t(x,y)=e-βd(x,y)
(2)
其中,β表示大气的散射系数,d(x,y)为场景深度.若能估计出A和t(x,y),代入式(1),由于是I(x,y)已知的,即可得到去雾后的图像J(x,y),式(1)可转化为:
(3)
2.2 暗原色先验理论
暗通道先验规律是He等[6]通过对大量的室外无雾图像进行实验与分析发现的,其定义为:在无雾图像的R、G、B3个颜色通道之中,其非天空区域总是会有一个颜色通道的像素灰度值极低,几乎接近0.即暗通道先验理论:
(4)
其中,Jdark(x,y)为无雾图像的暗通道图,Jc(z)为RGB图像的某一个颜色通道,Ω(x,y)是以点(x,y)为中心的一个方形区域.以大气光值A是已知的且为正作为前提条件,对式(1)的两边作最小值的运算,然后同时除以大气光值A,可得:
(5)
(6)
为了防止去雾过度而出现图像不自然的问题,引入一个约束常数ω(ω∈[0,1])(通常取值为ω=0.95),这样可以使得恢复的清晰图像保留轻微的雾霾而显得更加地真实自然.但是由式(6)得出的透射率是不足以起到去雾作用的,为此,He等人利用导向滤波算法[11]来对其实行进一步的处理,根据导向滤波算法处理后的透射率,由式(7)可得去雾后的清晰图像J(x,y):
(7)
其中,t0表示为透射率t(x,y)的一个约束值,因为当t(x,y)的值过小时,J(x,y)的像素值则会出现过大的情况,所以会导致恢复的清晰图像出现色偏.因此,需要给定求得的透射率一个最小值限制t0(通常取t0=0.1).He等[6]对大气光值A计算方法为:
(8)
其中,Ic(x,y)为待去雾的图像,Idark(x,y)为暗通道图,h和w分别表示为图像的高度和宽度,c为通道数.
3 本文算法
通过上述的分析发现,现有的大多数图像去雾算法存在着对去雾参数的估计不精确和去雾效果的颜色失真等问题,为了解决这些问题,本文提出了结合天空分割和条件生成对抗网络(Conditional Generative Adversarial Network)的单幅图像去雾算法.首先,利用阈值分割法将图像划分为天空区域和非天空区域,并使用分割出的天空区域来估计大气光值A;然后,利用改进后的条件生成对抗网络估计出精确的透射率;最
图1 算法总体流程框架Fig.1 Flowchart of the proposed algorithm
图2 去雾效果图Fig.2 Recovered results for foggy image
3.1 天空分割估计大气光值
以往大多的去雾算法较为侧重对透射率的估计,而对于大气光值A,往往采用经验公式去估计,没有对大气光值足够的重视且会受到明亮的非天空区域的干扰,影响了去雾算法的表现.为了避免出现上述问题,本文提出一种可行的基于阈值的天空分割算法分割出天空区域,大气光值A取值为天空区域所有像素值的平均值,使得大气光值被准确估计在天空区域中.本文使用式(8)来计算不存在天空区域的待去雾图像的大气光值A.
天空分割算法:首先,求有雾图像的暗通道图(暗通道图具有丰富的边缘信息[13]),以准确保留边界信息,记为Idark(x,y).由于图像中的天空区域为明亮区域,其像素值一般比较大, 当天空区域面积占的比例较大时,该像素值占据的比例也较大.本文先使用最大类间差算法对暗通道图Idark(x,y)进行第1次粗略分割处理,此时得到的分割结果并不是理想的结果,其存在着误判的情况,但是真实的天空区域占据着大部分,在第1次粗略分割后的天空区域中求出出现频率最高的点,并将该点的像素值记为N,又因为该像素值N是比非天空区域和天空区域临界边处的像素值更大, 所以使用一个大于0且小于1的常数μ(经验值取0.85)限制N.因此,将T=μN作为本文天空分割算法的阈值,根据该阈值T可分割得二值图像:
(9)
其中,It(x,y)表示为有雾图像天空区域的第2次粗分割结果,It(x,y)中的白色部分为天空区域.此时,分割结果还会存在着误判的情况,表现为零散的小面积白色区域错误的分割为天空区域,为解决该问题,根据天空区域的位置特点和面积的大小进行优化第2次粗分割结果, 优化的具体操作如下:
1)在It(x,y)的所有白色连通区域中,找到面积最大的白色连通区域,并求出其在It(x,y)中的最大行数值,记为Rmax,并令It(x,y)中行数大于Rmax的值置为0;
2)根据经过1)处理后的分割结果,在该基础上利用求最大连通区域的方法把白色区域面积小于图像总面积0.02%(经验取值)的区域的像素值置为0,最后得到的白色区域就是天空区域.
3.2 条件生成对抗网络
近年来,随着生成对抗网络的诞生与发展[14],条件生成对抗网络被运用在图像处理的多个领域[15,16].基于上述的启发,本文提出了一种基于条件生成对抗网络图像去雾算法,将生成器进行改进,引入均方差损失、基于VGG-19的特征损失和双向梯度损失对损失函数进行修正,进而使得对抗网络能够生成边缘细节清晰的图像,提高图像的质量,使图像显得更加真实.
3.2.1 生成器
生成器的任务是将输入的模糊图像生成清晰的图像,并且保留输入图像的结构和细节信息.本文生成器网络为一个带有多尺度卷积核的神经网络,该网络基本操作单元包括有7个卷积层、3个连接层和1个BReLU激活层,分别为Conv1、Conv2、Concat1、Conv3、Concat2、Conv4、Concat3、Conv5、Conv6、Conv7和BReLU.Conv1 和 Conv2通过Concat1连接,Conv2和Conv3通过Concat2 连接,Conv1、Conv2、Conv3和Conv4通过Concat3 连接.在经过卷积层(Conv)操作后,对卷积后的输出依次进行批量归一化(BatchNorm)和ReLU激活操作,通过Padding保持卷积层输入和输出大小一致,由于透射率是一个概率([0,1]),最后一层使用Cai[9]提出的双边纠正线性单元(Bilateral Rectified Linear Unit,BReLU).为了使条件生成对抗网络能够提取到图像不同尺度的特征,进而使其可以生成出细节信息更好的图像,所以生成器部分的卷积层设置了不同尺度的卷积核.经过改进优化后的生成器的结构图如图3所示,其具体的网络参数设置见表1.
图3 生成器结构图Fig.3 Generator network structure
表1 生成器网络参数Table 1 Generator network parameter
3.2.2 判别器
判别器网络主要的作用是为了判断生成器网络生成的图像的真和假(即生成器生成的图像是否服从真实样本分布).本文判别器使用一个神经网络,输入和条件通过Concat一并作为判别器的输入,该网络的基本操作单元包括卷积层、批量归一化层(Batch-Norm)和LeakyReLU激活,判别器的的输出是一个概率值,所以最后一层使用Sigmoid函数进行特征映射,并将判别器结果进行归一化处理.判别器的详细结构图如图4所示,其网络参数的设置见表2.
图4 判别器结构图Fig.4 Discriminatory network structure
表2 判别器网络参数Table 2 Discriminator network parameter
3.2.3 损失函数
条件生成对抗网络的生成器G的输入为噪声z和附加的条件信息y,网络的判别器D的输入为数据x和附加的条件信息y,判别器对x是否属于真实数据的概率做进一步判别.对网络进行训练,使其达到一个平衡(即判别器无法判定生成器生成的图像的真假),所以,条件生成对抗网络的目标函数V(D,G)为:
(10)
(11)
(12)
(13)
其中,Vi表示VGG-19的网络结构,ci,wi,hi分别表示为Vi网络结构输出特征的通道数、宽度和高度.双向梯度损失Lg包括水平梯度和垂直梯度,定义为:
(14)
其中,Hx为水平方向的梯度运算,Hy表示垂直方向的梯度运算,w和h分别表示特征图的宽度和高度;最后,结合网络的对抗损失Ladv、均方差损失LMSE、基于VGG-19的特征损失LVGG和双向梯度损失Lg,则改进后的条件生成对抗总损失函数Lloss定义为:
Lloss=WadvLadv+WMSELMSE+WVGGLVGG+WgLg
(15)
Wadv、WMSE、WVGG和Wg分别表示对抗损失Ladv、均方差损失LMSE、基于VGG-19的特征损失LVGG和双向梯度损失Lg占的权重比例.
4 实验与分析
4.1 数据集
由于CGAN是一种有监督的技术,因此执行训练步骤需要匹配模糊样本和真实样本.在本工作中,真实样本的计算采用文献[6]中的软抠图(softmatting)算法(即从有雾图像中利用softmatting算法求出精细透射率图),该算法在He等[6]中已被证明适用于去雾问题,但其计算处理时间和内存要求都很高.图像软抠图过程可以表示为:
I=Fα+B(1-α)
(16)
(17)
4.2 实验设置
4.3 大气光值估计结果对比
为了检验本文大气光值估算方法的是否准确有效,设计了实验,使用不同的方法去进行估计大气光值,实验的去雾结果对比如图5所示,图5(a)为有雾图像,图5(b)为利用本文天空分割算法的分割结果,白色的是天空区域,图5(c)为利用He方法[6]来估计大气光值的去雾结果,图5(d)为利用本文天空分割算法来估计大气光值的去雾结果,这两个去雾结果都是利用经过本文去雾算法优化后的透射率以及大气散射模型来实现去雾的.从图5的去雾结果观察出,在利用He等[6]的方法来估计大气光值恢复的无雾图像中,其天空区域出现了轻微的色偏;而利用本文天空分割算法实现对大气光值的估计,恢复的无雾图像的天空区域更加清晰、自然.
图5 去雾结果与大气光值估计结果对比Fig. 5 Comparison for dehazed images and atmospheric light estimation results
4.4 图像去雾算法实验与对比
图6为7张有雾图像以及7种去雾算法恢复的相应去雾结果.图6(a)为清晰的无雾图像,图6(b)为对应的待去雾图像,图6(c)和图6(e)分别为He的方法[6]和Meng的方法[7],虽然这两者的去雾效果都能够达到较好的水准,但其不足的是在天空等明亮区域都容易出现颜色失真;图6(d)为Berman D等人的方法[8],该方法天空明亮区域容易出现较为严重的颜色失真;图6(f)和图6(g)分别为Ren的方法[18]和Cai的方法[9],这两个方法都因为透射率的估计并不十分准确,致使恢复的清晰图像中还是包含着不少的雾霾,去雾程度不足,且前者比后者残留着更多的雾霾;图6(h)为Zhang等人的方法[10],其能够达到去雾效果,但恢复的图像出现轻微色偏,且恢复的细节不清晰;图6(i)为本文算法的去雾效果,可以从图6的去雾结果观察出,与其他算法的去雾图像相比,本文生成的去雾图像更加自然,细节信息更加清晰,且更加接近图6(a)的清晰图像.
图6 不同算法去雾效果对比Fig.6 Comparison of different algorithms to defog
4.5 定量评估
为了更有说服力地度量本文所提去雾方法的性能,采用在去雾评估广泛使用的两个指标:峰值信噪比PSNR(Peak Signal to Noise Ratio)和结构相似指数SSIM(Str-uctural Similarity Index Measuremen).PSNR定义为:
(18)
其中,peakvalue表示图像点颜色的最大值,MSE为均方误差,其定义如下:
(19)
其中,w表示图像的宽度,h表示图像的高度,Jt(x,y)为真实的清晰图像,Jo(x,y)为恢复的无雾图像.SSIM是基于感知模型的归一化度量,定义为:
S(x,y)=f[l(x,y),c(x,y),s(x,y) ]
(20)
其中,l(x,y)表示为亮度的对比,c(x,y)表示对比度对比,s(x,y)表示图像结构对比.
为了直观地体现出本文算法的去雾性能,表3给出了图5中使用不同大气光值估计方法的去雾结果的性能指标:PSNR和SSIM,对于存在天空区域的有雾图像,相比于使用He的方法[6]估计大气光值来恢复的图像,使用本文天空分割算法估计大气光值来恢复的图像的PSNR和SSIM指标都有一定程度的提升,证明了本文估计大气光值的方法更加准确有效,恢复的图像质量更高;表4和表5分别给出了图6中7张测试图像的PSNR和SSIM指标的值,对于PSNR,本文去雾算法在image2和image4分别略低于Cai[9]和Meng[7]的算法,但均高于其他算法,且本文算法的PSNR均值最高,达到了23.84;对于SSIM,Cai[9]的算法在image5和image7比本文算法略高,但本文算法的SSIM指标均值是最高的,达到了0.9471.根据数据分析结果表明,更进一步证明了本文去雾算法的去雾性能比其它的去雾算法更好,恢复的图像质量更高.
表3 不同大气光值估计方法的去雾结果评价指标Table 3 Evaluation of dehazing results of different atmospheric light value estimation methods
表4 各方法峰值信噪比比较Table 4 Comparative analysis using the PSNR
表5 各方法结构相似度比较Table 5 Comparative analysis using the SSIM
5 结 语
本文提出了一种结合天空分割和条件生成对抗网络的单幅图像去雾算法.利用天空分割方法使大气光值被准确的估计在天空区域中,使用改进后的条件生成对抗网络精确的估计出有雾图像的透射率,再利用大气散射模型恢复无雾图像,对恢复后的图像进行对比度增强处理.实验结果表明,与对比算法比较,本文算法恢复的清晰图像在PSNR和SSIM指标的均值最高,具有颜色自然、对比度高、边缘细节清晰等优点.论文后续的工作是解决本文算法时间复杂度较高的问题,以提高其实用性.