一种改进的有雾图像去雾算法
2020-04-22谢有庆李一航刘甲甲
何 涛, 谢有庆, 李一航, 徐 昊, 刘甲甲, 余 萍
(1.深圳南山供电局,深圳 518000;2. 深圳供电规划设计院有限公司,深圳 518000;3.华北电力大学电子与通信工程系,保定 071003)
在电力建设工程中,基于可视化技术的工程管控系统的应用可大大提高工程管理水平,在全天候条件下采集清晰的现场图像是系统应用的重要保障。近年来由于雾霾天气的影响,导致图像采集设备采集的图像,对比度下降、饱和度降低和色彩失真,对航空拍摄,驾驶辅助和可视化工程管控等应用带来不利影响。因此,研究如何从有雾的图像中恢复出清晰的图像是当前图像处理领域的重点内容。
早期的图像除雾方法中,Narasimhan等[1]提出一种基于物理散射的去雾模型,通过这个模型从两幅或多幅有雾图像中恢复场景构信息。Kopf等[2]提出通过使用三维地理模型可直接获取有雾图像的景深信息来对图像行去雾。然而,在实践中获得这样的辅助信息可能非常困难甚至是不可能的。因此,这种通过获取辅助信息的图像去雾方法在实际的应用中相当有限。
相比早期的图像除雾方法,近年来国内外研究者又取得了一些重大进展。如Cai等[3]提出的基于神经网络的深层架构的DehazeNet图像去雾网络,在特定的数据集上取得了较好的去雾效果,但需要提供大量的有雾和对应的无雾图像进行训练,样本采集困难,缺乏理论依据。Ren等[4]使用卷积神经网络,计算每个像素的多尺度特征,并针对不同的去雾问题定制训练数据,但在真实世界的户外图像进行测试时,表现不理想。Fattal等[5]在大气光与物体表面色度统计不相关假设的前提下,将雾霾图像分解成恒定区域和透射区域,该算法依赖数据的统计特性,但由于雾霾图像的颜色信息较少,导致获取的统计信息不可靠。Tarel等[6]通过对有雾图像用中值滤波器进行滤波,直接将滤波输出作为图像的雾气面纱值,但中值滤波器不具有保留边缘信息和细节信息的特性,造成雾气面纱过度提取而导致去雾后的图像局部区域色彩失真。He等[7]通过对大量户外图像进行统计研究发现大多数无雾霾图像局部区域通常包含一些低强度像素提出了暗通道先验的理论。该理论结合软抠图算法,可以实现非常好的去雾效果。但复原后的图像整体偏暗,去雾过程中耗费计算机资源而且在包含天空区域的有雾图像中会出现晕圈伪影现象。
针对上述问题,通过对大气散射强度退化模型进行研究,提出一种基于灰色关联度的引导滤波图像去雾算法。该算法与传统算法的不同之处在于,将有雾图像的像素分为正常像素和被雾霾颗粒破坏的像素,通过计算灰色关联度判断出被雾霾颗粒破坏的像素值;然后,通过引导滤波的方法对雾霾颗粒破坏的像素进行分离,在对数域中计算雾气面纱估计值;按照大气散射退化模型反演复原出清晰的图像。最后通过主观和客观的评价方式验证本文算法的有效性。
1 基本原理
1.1 图像退化模型
在计算机视觉和计算机图形领域,大气散射模型被广泛应用描述雾霾的成像过程[1],模型公式为
I(x)=J(x)t(x)+A[1-t(x)]
(1)
式(1)中:I(x)为含有雾霾的图像;J(x)为去雾后恢复出的清晰图像;t(x)是透射率;A是全局大气光系数;x是像素点坐标。恢复一幅有雾图像的目标就是已知I(x)的条件下,通过估计A和t(x)的值,从而由式(1)反演推算出清晰图像J(x)。在式(1)表示的模型中,透射率t(x)可表示为
t(x)=e-βd(x)
(2)
式(2)中:β表示大气散射系数;d(x)表示场景深度。由式(2)可知,透射率t(x)是由场景深度和大气散射系数决定的,通过估计深度图d(x)和大气散射系数β来求解透射率。在此基础上,Tarel[6]引入大气面纱V(x):
V(x)=A[1-t(x)]
(3)
由式(3)可以将式(1)式改写为
(4)
式(4)中:I(x),和J(x)分别是白平衡后有雾图像和无雾图像;V(x)是大气面纱函数;A是全局大气光系数。
1.2 引导滤波
导向滤波的思想是由He等[8]最先提出的,能够有效地突出图像细节,其关键是假设引导图像I和滤波器输出图像q之间具有局部线性关系。即假设在以像素点k为中心的窗口wk中,输出图像q是引导图像I的线性变换,即
qi=akIi+bk, ∀i∈wk
(5)
式(5)中:(ak,bk)是在滤波窗口wk中假定为常数的一些线性系数。
2 灰色关联度引导滤波图像去雾算法
2.1 图像灰色关联分析
灰色关联分析是用序列的相似性来度量序列之间的关联性[9]。在图像处理中,经常会对图像的3×3邻域的九像素进行相关性分析。即取邻域窗口中心点的像素灰度值作为参考序列,中心点周围的8像素作为比较序列,这时参考序列与比较序列中均只有一个元素,具体计算过程如下。
(1)假设系统参考序列为X0=[x0(1)],比较序列为
X1=[x1(1)],X2=[x2(1)],…,X8=[x1(1)]。
γ[x0(1),xi(1)]=
i=1,2,…,8
(6)
式(6)中:ξ∈(0,1)为分辨系数,一般取0.5。
2.2 基于灰色关联度的引导滤波
假设有雾图片的像素分为两种类型,一种是正常的像素点,另一种是被雾霾污染的像素点。通过计算灰色关联度对正常像素点和被雾霾污染像素点进行判断,然后对雾霾污染的像素点进行导向滤波,正常的像素点保持不变。以f(i,j)为中心像素的3×3滤波窗口内,对灰色关联度进行改进,选择滤波窗口中像素值的均值作为参考序列X0。
X0={x0(1),x0(2),…,x0(9)}=
{c,c,c,c,c,c,c,c,c}
(7)
式(7)中:c=mean{f(i-1,j-1),f(i-1,j),f(i-1,j+1),f(i,j-1),f(i,j),f(i,j+1),f(i+1,j-1),f(i+1,j),f(i+1,j+1)}为滤波窗口中9个像素的均值。滤波窗口内9个像素值作为比较序列X1,即
X1={x1(1),x1(2),…,x1(9)}=
{f(i-1,j-1),f(i-1,j),f(i-1,j+1),
f(i,j-1),f(i,j),f(i,j+1),f(i+1,j-1),
f(i+1,j),f(i+1,j+1)}
(8)
然后由参考序列和比较序列按式(9):
Δ01(k)=|x0(k)-x1(k)|
(9)
计算得到差异信息序列:
Δ01=[Δ01(1),Δ01(2),…,Δ01(n)]
(10)
将差异信息序列代入式(6)计算得到邻域窗口内像素均值与各像素值的关联序列γ01=[γ01(1),γ01(1),…,γ01(n)]。最后设定阈值T,如果关联度序列中的九个关联度小于设定的阈值T,则滤波窗口内的当前像素判定为被污染的像素点,这时对该像素所在的领域窗口像素进行引导滤波,即假设以f(i,j)为中心像素的Wk滤波窗口内,输出图像q和引导图像I满足式(5)所示的线性关系。为了求解线性系数(ak,bk),根据He等[8]的滤波思想可以转化为使最小化滤波窗口wk中的代价函E(ak,bk):
(11)
式(11)中:ε为正则化参数。式(11)是一个线性回归模型,其最优解为
(12)
(13)
2.3 雾气面纱计算
本文算法与经典去雾算法提取雾气面纱的方法不同,通过取对数的方法缩小原始图像和滤波以后图像像素值之间的差异,以减少大气面纱中包含的原始图像的纹理信息和细节信息。然后在对数域中,用原始图像减去灰色关联引导滤波后的图像,将二者的差值取反对数作为原始有雾图像的雾气面纱估计值V(x)。然后由式(3)反推出透射率t(x),从而对原始图像进行恢复。
2.4 雾霭图像复原
由大气散射退化模型表达式可知,要想在I(x)已知的条件下恢复出清晰的图像J(x),必须准确估计出透射率t(x)和大气面纱V(x)。所以只需估计出大气面纱V(x)的值,就能从有雾图像中恢复出清晰图像J(x)。本文中的大气面纱V(x)表示为
V(x)=exp{aln[I(x)+1]-ln[H(x)+1]}
(14)
式(14)中:a是取值区间为(0,1)的常数;I(x)为原始有雾图像;H(x)为灰色关联引导滤波以后的图像。式(14)中I(x)加1再取对数,是为了防止归一化像素值为零时取对数后的值趋于无穷大,由式(4)可得本文去雾复原的图像J(x):
(15)
式(15)中:x表示图像上点的位置坐标;t(x)是透射率,由式(3)确定;A是全局大气光系数,其取值采用He等[8]从暗通道中按亮度的大小取0.1%的像素,然后再取这些像素对应在原图中的最大值作为A。即
A=max{max[Idark(x),0.1]}
(16)
式(16)中:Idark(x,y)表示图像的暗通道。为了防止t(x)为零,设置一个下限值t0(t0一般取0.1),即用max[t(x),t0]代替t(x)。
综上所述,本文算法步骤如下。
假设输入有雾图像为I(x),去雾增强后的输出图像为J(x)。
步骤1对原始图像进行灰色关联引导滤波,滤波后的图像用H(x)表示。
步骤2在对数域中,用原始图像减去灰色关联引导滤波后的图像,得到对数域中的雾气面纱估计值V′(x):
V′(x)=alg[I(x)+1]-lg[H(x)+1]
(17)
式(17)中:a为取值区间为(0,1)的常数,取0.03。
步骤3对V′(x)取反对数,得到雾气面纱值V(x):
V(x,y)=exp[V′(x,y)]
(18)
步骤4将V(x)代入式(4)即可得到输出图像J(x)为
max{max[Idark(x),0.1]}
(19)
3 实验与结果分析
为了对本文算法的去雾效果进行验证,选择去雾算法研究中常用的有雾图像进行测试,并与算法DehazeNet[3]、多尺度卷积神经网络(multi-scale convolutional neural networks,MSCNN)[4]进行比较。本实验环境:CPU为英特尔 Pentium(奔腾) G4600 @ 3.60 GHz双核,内存为8 GB,操作系统为Windows10的笔记本电脑,使用 MATLAB 2015b进行实验。实验中算法各参数取值为: 灰度关联阈值T通过多次试验取0.65,引导滤波器窗口半径r取4,正则化参数取值为0.01,用原始图像作为引导滤波器的导向图。
3.1 主观评价
实验采用包含远景和近景两种类型的图片,不同算法的实验结果,如图1~图4所示。
图1 建筑及周边近景
图2 山体远景
图3 城市交通远景
图4 城市交通近景
由图1可知,对比的三种算法中MSCNN的去雾效果最好但颜色过于饱和,DeHazeNet去雾后留有部分残雾,本文算法去雾后的图像颜色相比于原始雾图有些许偏离,但却能反映出更多精细的图像细节。图2为同时包含远景和近景的测试图片,从远景(红色框中云彩的部分)来看所对比的三种算法去雾效果相当,但从近景(红色框山角的部分)对比可知DeHazeNet和MSCNN去雾后的图像中山角的部分可视性降低,相对而言我们的算法去雾后的图像在可视性效果更好。图3为包含较多活动场景的交通图像,由图3可知对于远处浓雾部分,三种算法去雾效果都不是很明显,但从整体颜色方面考虑,本文算法去雾效果最佳。图4为包含雾霾的测试图片,由图4可知在浓雾条件下,三种算法的去雾效果都不是很理想,但在同等水平下,我们的算法体现出的人物细节更清晰。
3.2 客观评价
为进一步对算法的去雾效果进行验证,采用常用图像质量评价指标信息熵[10]、平均梯度[11]、结构相似性[12](structural similarity index,SSIM)及峰值信噪比[13](peak signal to noise ratio, PSNR)对不同算法进行比较。图像的信息熵反映图像所包含信息量的大小,信息熵越大则图像包含的信息量越大;平均梯度反映图像对微小细节反差表达的能力,用于评价图像的模糊程度。平均梯度越大,表示图像纹理层次信息越多,图像越清晰;结构相似性(SSIM)是一种衡量两幅图像相似度的指标,从图像组成的角度反映场景中物体结构的属性;SSIM越大表明算法对原始图像的结构信息完整性的保留能力越强,对有雾改善效果越明显。
表1比较了图1~图4所示去雾算法结果对应的客观性能评价指标,由表1可知有雾图像经本文算法处理后的性能指标大部分大于DehazeNet和MSCNN算法。由此可知,在包含某些常见场景的有雾图像中,本文算法在反映图像细节信息和可视性等方面具有一定的优势。
表1 算法去雾客观性能比较
3.3 目标检测试验
在可视化技术的工程管控系统应用中,经常将去雾后的图片用于目标检测。实验使用YOLOv3作为检测网络,三种去雾算法去雾后的图片作为输入进行目标检测,可视化结果和检测的量化结果分别如图5、图6和表2所示。
图5 较少目标图像去雾后YOLOv3检测对比
图6 较多目标图像去雾后YOLOv3检测对比
表2 图像去雾后使用YOLOv3检测的结果
由表2可知,将含有多种目标的有雾图像使用上述三种去雾算法进行处理后再检测,本文算法检测出的目标个数最多,耗时最少且图像包含的目标越多去雾后检测的效果越好,具有一定的工程应用价值。
4 结论
将灰色关联理论应用于图像去雾中,采用取对数的方法计算雾气面纱,细化了雾气面纱的估计值,按照大气散射退化模型反演恢复出去雾后清晰的图像。在提升视觉效果的同时,有效地保持了图像边缘细节信息,最后通过主观和客观评价的方式验证了算法的有效性。本文算法也有不足之处,主要体现在采用灰色关联度对像素进行滤波判断时阈值的设定是通过多次实验采用的一个相对较好的值,不能保证其是最佳阈值。未来努力的方向是研究一种能够进行自适应阈值设置的算法,以取得更好的去雾效果。