杨 明, 李 喆, 成丽波, 贾小宁
(长春理工大学 数学与统计学院, 长春 130022)
雾作为常见的天气现象之一,主要是由空气中悬浮的细小颗粒和空气中的水分以及其他杂质相互融合、相互粘连而形成的一种混合物。由于雾霾中微小粒子的存在,照射在目标物体上的太阳光发生散射与漫反射现象,导致观测到的目标物体出现模糊、对比度降低、清晰度下降、边缘信息丢失等情况[1-2]。因此,需要采用合适且高效的方法对有雾图像进行去雾处理。
近几年,随着卷积神经网络(convolutional neural network, CNN)的不断发展,该方法逐渐被应用到图像去雾领域[3-4]当中。这是因为通过卷积神经网络不仅可以得到有雾图与无雾图之间的映射关系,同时也可以求出大气透射率。
Cai等[5]将卷积神经网络技术应用于图像去雾,并使用卷积神经网络设计出端到端的图像去雾算法。但该算法中网络参数并不具有泛化性质,无法解决不同景深图片中雾霾去除的问题。Ren等[6]设计了多尺度卷积神经网络用于处理图像去雾问题。该网络通过粗糙网络和精细化网络生成高大气透射率,但很容易导致图像的细节信息丢失。
端到端去雾算法在一定程度上提高了图像去雾的质量,但是学习过程得到的参数不适合不同景深图像。同时,学习过程中容易出现过拟合的现象,这会导致去雾过程中忽略原图像的更多细节信息,也会使得恢复出的无雾图像出现图像失真的情况。
本文设计了一种可以适应不同景深含雾图像的去雾算法,以解决复原图像出现图像失真的问题。首先,在DehazeNet算法的基础上融合智能算法,设计出一种基于CNN和随机漫步理论的图像去雾算法以解决DehazeNet去雾算法不适合不同景深含雾图像的问题。其次,使用K-means算法对DehazeNet去雾算法得到的大气透射率进行聚类分析,利用图像失真度与图像对比度函数的差作为损失函数。该损失函数作为求解最优大气透射率的目标函数,利用随机漫步算法求解最优大气透射率,得到无雾图像。
图像去雾是图像处理领域中一个重要分支,近年来涌现了多种处理图像去雾问题的算法。主要可以分为以下三类:基于图像复原的图像去雾算法、基于图像增强的图像去雾算法以及基于CNN的图像去雾算法。
基于图像复原的去雾算法基于雾天退化模型,通过利用有雾图像与无雾图像之间的映射关系恢复清晰图像[7]。暗通道先验算法[8]是图像复原算法中具有代表性的算法之一。许多学者通过改进这个算法,得出了许多图像复原的去雾算法[9-11]。
基于图像增强的去雾算法通过对含雾图像的细节信息、边缘信息以及对比度信息等方面进行增强来达到图像去雾的目的。如:Retinex去雾算法[12]、直方图均衡化去雾算法[13]以及小波变换去雾方法[14]等。
随着近几年计算机性能和GPU性能的不断提升,基于CNN的图像去雾算法成为研究热点。CNN在解决图像去雾问题时主要分为2类:单阶段端到端去雾算法与两阶段端到端去雾算法。其中,通过学习有雾与无雾图像之间的一种映射关系,利用该映射关系直接恢复出无雾图像的方法称为单阶段去雾算法。利用神经网络计算出雾天退化模型中的大气透射率与大气光值,代入雾天退化模型恢复出无雾图像的方法称为两阶段去雾算法[15]。
单阶段去雾算法相较于两阶段去雾算法应用更加广泛。Cai等[5]设计了可以同时保持双边约束和局部线性的激活函数(bilateral rectified linear unit, BReLU)以解决图像去雾问题。Li等[16]利用CNN设计了一种“All-in-One”去雾网络。陈清江等[17]为解决含雾图像对比度降低、饱和度下降以及色彩偏移的问题提出了一种基于CNN的全卷积去雾算法。寇大磊等[18]为解决图像去雾后细节信息丢失严重、颜色偏暗的问题,提出了一种基于CNN的快速去雾算法。
在图像去雾领域,利用雾天退化模型来衡量雾霾天气对观测者拍摄图像质量的影响。雾天退化模型表达式为
I(x)=J(x)t(x)+A(1-t(x))
(1)
其中:x表示像素点的坐标;I(x)代表有雾图像;J(x)表示清晰图像;A表示大气光值;t(x)表示大气透射率,取值范围是[0,1]。通常t(x)有如下表达式:
t(x)=e-βd(x)
(2)
其中d(x)表示景深。
图像失真度损失函数为
(3)
该函数被用来衡量图像的失真度,其中χ为像素点对应坐标全体所构成的集合,Jc(x)表示清晰图像c层的像素值。
图像对比度用来衡量图像中灰度反差的大小,其定义如下
(4)
其中:Jc,mean表示清晰图像c层所有像素值的均值;Nc表示c层中像素点的总数。
DehazeNet网络[5]一共分为4层:特征提取层、多尺度分析层、局部极值层和非线性回归层。
含雾图像首先利用16个卷积滤波器及MaxoutUnit激活函数对输入的三通道含雾图像进行特征提取,得到4个12×12大小的特征图像块。
多尺度分析层从多个尺度对特征提取层得到的特征块分别使用16个3×3,5×5,7×7大小的卷积滤波器进行特征分析,最后输出48个12×12大小的特征图。
局部极值层利用大气透射率具有局部不变的性质,对多尺度分析层获得的48个12×12大小的特征图进行局部极值处理,从而对大气透射率进行估计。
非线性回归层利用BReLU激活函数重构大气透射率。
本文在DehazeNet去雾算法的基础上融合智能算法设计了一种基于卷积神经网络和随机漫步理论的可训练端到端图像去雾算法。
(5)
其中mean(·)为均值函数。
引入K个变量ti,i=1,2,…,K。利用大气光值A和加雾后的有雾图像Ic(x),定义分片图像失真度损失函数:
(6)
其中
(7)
利用公式(1)和加雾图像c层的所有点像素值的均值Ic,mean,定义分片图像对比度函数:
(8)
定义损失函数:
(9)
(10)
最后,令有雾图像I(x)中亮度最大点的灰度值为大气光值A,利用公式(7),计算
(11)
得到清晰图像J(x)。本文的算法流程见表1。
表1 基于CNN和随机漫步的图像去雾算法流程
大气透射率会受到图像中景物深度d的影响,故本文选取远景图像(Image01,Image02,Image03)、近景图像(Image04,Image05,Image06)和遥感图像(Image07,Image08,Image09)3种不同类型的图像进行试验。首先对3种不同类型的图像利用雾天退化模型(1)进行加雾处理,由公式(2)中的β控制加雾浓度。
将加雾后的含雾图像分别使用本文算法、DehazeNet算法、暗通道先验算法[8]、Non-localImageDehazing算法[19](本文记作“NL算法”)进行去雾处理。本文算法针对不同的含雾图像,需要选取不同初次行走步长λ、最大行走步数N和精度ε,详见表2。图1~图3展示了实验中部分图像加雾后使用不同去雾算法去雾的视觉效果图,表3为不同算法去雾的评价指标对比结果。
表2 λ,N,ε的取值
表3 远景、近景以及遥感图像加雾后使用不同算法去雾后的评价指标结果
(a) 原图(b) 加雾图(beta=0.025)(c) 暗通道算法去雾图(d) NL算法去雾图(e) DehazeNet算法去雾图(f) 本文算法去雾图
(a) 原图(b) 加雾图(beta=0.025)(c) 暗通道算法去雾图(d) NL算法去雾图(e) DehazeNet算法去雾图(f) 本文算法去雾图
(a) 原图(b) 加雾图(beta=0.025)(c) 暗通道算法去雾图(d) NL算法去雾图(e) DehazeNet算法去雾图(f) 本文算法去雾图
本文采用交叉信息熵(cross entropy)、峰值信噪比(peak signal to noise ratio, PSNR)及结构相似度(structural similarity, SSIM)3个评价指标来衡量各算法的去雾效果。
本文算法首先对DehazeNet去雾算法中得到的大气透射率使用K-means算法进行聚类分析处理,使用图像失真度函数与图像对比度函数的差作为目标函数,将图像去雾过程中求解大气透射率问题转化成求解最优化问题。最后使用随机漫步算法对聚类后的大气透射率进行优化,最终恢复出高质量的清晰无雾图像。与暗通道先验算法、NL去雾算法、DehazeNet算法的去雾效果进行对比分析,本文设计的算法在近景含雾图像、远景含雾图像以及遥感含雾图像去雾中取得了很好的实验效果,在评价指标的数值结果上也得到了大幅度的提升。