改进暗通道窗口与透射率修正的图像去雾
2022-11-22孙彭辉
林 森, 孙彭辉
(沈阳理工大学自动化与电气工程学院,沈阳 110000)
0 引言
在雾霾天气下,空气中存在大量悬浮颗粒,使得光线被吸收或散射,会严重影响无人机等航拍设备获取图像信息,因此进行图像去雾操作极为重要。
目前去雾算法主要分为图像增强、图像复原和深度学习3类。基于图像增强的方法有直方图均衡化[1]、Retinex[2]以及小波变换[3]等,此类方法通过加强图像中的感兴趣特征来实现视觉效果提升,速度快且易于实现,但没有实质解决雾化问题。
基于图像复原的方法把大气散射模型作为基础,利用改进后的模型求解透射率和大气光来实现去雾[4]。TAREL等[5]提出基于中值滤波的去雾算法,该算法时间复杂度低,但设置参数多,且容易丢失图像细节信息;HE等[6]提出暗通道先验算法,去雾效果良好且易于实现,但当图像中包含景深突变和明亮区域(天空、水面、大面积白色区域等)时,去雾后会出现颜色失真和光晕伪影;ZHU等[7]对大量有雾图像进行分析发现雾浓度和景深有关,提出颜色衰减先验,该算法简单有效,但浓雾环境下处理效果较差;SABIR等[8]根据雾浓度求取透射率,并取天空和非天空区域的大气光均值作为整体大气光值,一定程度上抑制了颜色失真,但结果图像偏暗。
基于深度学习的去雾算法经过训练大量数据集恢复无雾图像。REN等[9]通过学习模糊图像与透射率图之间的对应关系,提出用于去雾的多尺度卷积神经网络;CAI等[10]提出一种名为DehazeNet的端到端系统用于图像去雾,将有雾图像作为输入,并输出对应的透射率图,之后根据雾天模型恢复清晰图像;LI等[11]利用卷积神经网络建立去雾模型,提出了一体化去雾网络(All-in-One Dehazing Network,AOD-Net)。因为训练所用的数据集都是人工合成的有雾图像,这些算法在真实雾天环境下的去雾效果并不佳。
针对上述算法的不足,本文提出改进暗通道窗口与透射率修正的图像去雾算法。主要创新性贡献有:1)利用超像素分割获得景深一致的局部窗口,获取更为准确的暗通道,并结合大气光特性求取大气光值;2)对于引导滤波细化后的透射率,提出自适应容差机制进行补偿,有效抑制明亮区域的颜色失真。
1 相关工作
1.1 大气散射模型
目前图像去雾算法采用的普遍为简化的大气散射模型[6],其表达式为
Ic(x)=Jc(x)·t(x)+Ac·(1-t(x))
(1)
式中:I为有雾图像;J为无雾图像;A为大气光值;t为透射率;c为RGB图像3个颜色通道中的任意一个通道;x为像素点的位置;空气中的介质粒子均匀时,透射率可表示为
t(x)=e-βd(x)
(2)
式中:β为介质散射系数;d(x)为像素点x处景深。
1.2 暗通道先验
HE等[6]提出了暗通道先验理论(Dark Channel Prior,DCP),通过对大量的室外无雾图像进行统计,发现在绝大多数图像中,存在一个颜色通道值很低,趋近于零,即
(3)
若Ac已知,对式(1)两边同时除以Ac且同时进行最小值滤波可得
(4)
将式(3)代入式(4)可得透射率为
(5)
式中,ω为雾气保留系数,一般取0.95[6]。
2 本文算法
2.1 算法流程
本文算法流程如图1所示。
图1 算法流程
具体步骤如下:1) 使用超像素分割算法改进滤波窗口,以求取更加准确的暗通道;2) 根据大气光所在区域特性,结合超像素分割进行大气光值估计;3) 用改进后的暗通道求取透射率,再用自适应容差机制来修正明亮区域的透射率;4) 反演大气散射模型恢复无雾图像。
下面详细阐述各步骤的相关原理和方法。
2.2 改进暗通道窗口
由于DCP选取固定方形滤波窗口,在边缘处会包含多个景深,容易导致去雾后出现光晕伪影。为解决此问题,用超像素分割有雾图像得到景深一致的局部窗口,窗口内的像素点有着相似的亮度、颜色和梯度等特征。在改进后的每个窗口内计算获取更为准确的暗通道,从而提高透射率估计精度。
本文使用超像素分割方法为简单线性迭代聚类算法(Simple Linear Iterative Clustering,SLIC[12]),其主要优势是时间复杂度低、生成超像素的紧凑度高、边缘保持性好,且只需设置一个参数,即需要分割的超像素数量s。s决定了超像素分割后窗口的大小,合适的窗口可以获得较好的暗通道。由于HE等[6]对600 像素×400 像素大小的图像使用15 像素×15 像素大小的窗口取得了较好的去雾效果,本文将其作为标准来调整窗口大小,若输入图像的大小为m×n,则窗口大小为
(6)
式中:wwin为窗口大小值;m,n分别表示输入有雾图像I(x)的高度和宽度。从而超像素分割数量s为
(7)
为验证改进窗口的有效性,选取一幅包含边缘信息较多的雾图进行验证,对比结果如图2所示。
图2 透射率对比
图2(b)的DCP没有考虑景深的影响,丢失了较多的边缘信息。相比之下,图2(c)的边缘信息保持较好,近处的楼房清晰可见,远处的景物也轮廓分明。
2.3 结合超像素分割的大气光值估计
大气光值易受到雾图中的明亮物体影响,导致估计不准确。为克服此问题,从大气光特性出发并结合超像素块来估计大气光值。由式(1)和式(2)可知,当拍摄场景中存在浓雾时,目标物体无法透过浓雾到达相机设备,此时透射率近似于零,在景深无穷远处亦是如此。此时雾天成像模型可简化为
I(x)≈A
(8)
式中,A为大气光Ac的3个通道的均值。这时成像结果主要由大气光造成。因此,大气光的选取需要考虑两点:1) 大气光所在处一般为有雾图像的背景区域(浓雾区域和景深无穷远区域);2) 从式(8)可知,大气光所在区域的亮度近似于定值A,因此该区域局部像素值变化很小。本文根据这两点提出了一种新的大气光值求取方法。考虑到在室外雾图中,背景区域往往都在图像上半部分,天空区域距离拍摄设备非常遥远,可认为其是景深无穷远处,即背景区域。因此大气光值的求取只考虑图像上半部分。具体实现方式为:1)将超像素分割后的雾图上、下等分,取上半部分图像作为处理对象;2)对该部分图像的每个超像素块内的像素计算标准差;3)标准差最小的超像素块作为大气光所在区域,并求其像素平均值作为最终大气光值。
上述超像素块内像素的标准差算式为
(9)
(10)
图3为DCP及本文算法估计的大气光所在区域对比图。在图像前景处包含明亮区域时,DCP将大气光定位在前景明亮处而非背景区域,产生了错误。本文算法估计的大气光定位准确且符合大气光特性,所得数值更加精确。
图3 不同算法估计的大气光对比
在求得暗通道和大气光值后,通过式(5)求出透射率,并用引导滤波[13]对其细化,得
(11)
2.4 基于自适应容差的透射率修正
对式(4)进行变换,得到实际的透射率为
(12)
引入容差机制[14]为
对于地下室的防渗漏施工一般采用的是堵漏法进行防水,堵漏法一般分两种情况,一种情况是漏水孔大水压比较高的地方,这种情况采用施工方法是先观察好地面结构情况,然后进行空洞的预凿,孔洞大小一定要确定好,然后将碎石平铺在孔洞的下面,在上面铺一层防水油毡,引开渗漏下去的水,最后要做的是将漏水孔处理好,然后注入水泥胶浆。另一种情况是在漏水孔比较小,水压比较低的地方,施工方法是将孔洞改成一个以孔洞中心为圆心的圆槽,深在3~4cm左右,然后清理好圆槽进行水泥胶浆的灌注,压实后涂上防水材料,为保证施工质量施工的每一步都必须进行严格的检查。
(13)
式中:tlast(x)为修正后的透射率;K为容差参数,它是不同区域划分的依据,将|I(x)-A| 为了更直观地表现容差机制对透射率的修正,将式(13)写成分段函数形式,即 (14) 从式(14)中可以明显看出,K的取值直接决定了透射率的修正结果,当|I(x)-A| 因为明亮区域的大小是由K决定的,所以若能确定不同输入图像中明亮区域的大小,便能求出相应的K值。均值迭代分割算法可以有效分割出图像明亮区域,故应用此算法来处理输入图像,并进一步求取K值,具体步骤如下。1) 对输入的有雾图像使用均值迭代分割算法,得到二值图像;2) 将有雾图像对应于二值图像中白色区域的部分作为明亮区域;3) 在明亮区域内求得最大和最小像素值;4) 用最大像素值和最小像素值分别减去大气光值A,并对两个结果的绝对值取平均作为容差参数K的值,即 (15) 式中:Imax为明亮区域最大像素值;Imin为明亮区域最小像素值。 用本文所提算法求得容差参数K,将其代入式(13)修正透射率,结果如图4所示。 图4 透射率修正前、后对比 由图4(b)可见,天空处透射率值过低,图4(c)修正后的透射率得到明显改善。 根据已知透射率、大气光值和有雾图像,代入式(1)求得无雾图像,并对其进行Gamma校正提升图像亮度从而获得最终清晰图像,即 (16) 在RESIDE[15]数据集中选取4幅航拍视角(Image1~Image4)和其他视角(Image5~Image7)的有雾图像以及实际浓雾天气下手机拍摄所得雾图(Image8)作为实验对象。将本文算法与TAREL算法[5]、HE算法[6]、CAI算法[10]和SABIR算法[8]的去雾效果进行对比,对比结果如图5所示。实验运行环境为64位Windows10系统,CPU为AMD Ryzen 5 1600X,内存为16 GiB,仿真平台为Matlab2018a。 图5 去雾结果对比 从图5中可以看出:TAREL算法恢复了较多的边缘信息,但噪点太多,去雾后图像仍然模糊;HE算法有着较好的去雾效果,但景深突变处出现光晕伪影,天空处出现严重的颜色失真且整体颜色偏暗;属于深度学习的CAI算法没有光晕伪影和颜色失真现象,但有一些色偏并且对于浓雾图像(Image7和Image8)去雾后仍留有残雾;SABIR算法对DCP算法做出了改进,消除了景深突变处的光晕伪影,但细节恢复一般且有一定色偏,在暗处场景去雾效果不佳,如Image1和Image2的左下部分。 综合发现,本文去雾算法恢复的图像颜色自然,消除了景深突变处的光晕效应,同时抑制了明亮区域的颜色失真,去雾效果好且细节处恢复更好,在真实拍摄的雾天场景下依然有较好的去雾效果,对比其他算法有着显著优势,且对于不同的场景都具备良好的去雾能力,鲁棒性更好。 为进一步验证本文所提算法的有效性,使用峰值信噪比(Peak Signal to Noise Ratio,PSNR),结构相似性(Structural Similarity Index Metric,SSIM)和平均梯度(Average Gradient,AG)这3项常用指标对多种算法的实验结果进行比较分析。 PSNR的值越大图像失真越少,其数学表达式为 (17) 式中:Mmax表示输入图像的最高像素值;MMSE是均方误差。 SSIM用来描述两幅图像的相似程度,取值范围为[0,1],用该指标评价去雾效果,其值越大越好。SSIM的数学表达式为 (18) AG反映图像纹理信息的改变,值越大,表明边缘性越好,数学表达式为 (19) 式中:M′和N′分别为图像的长和宽;m′和n′分别为对应像素点的横、纵坐标。 不同算法的各项指标值对比结果如表1~3所示。对于每幅图像不同算法的去雾结果,每项指标的最优值都加粗标出。为了综合评价整体去雾效果,对8组图像结果取均值。可以看出,本文算法在峰值信噪比、结构相似性和平均梯度的评测结果中,均优于其他算法,说明了本文算法的优越性。 表1 客观评价指标PSNR 表2 客观评价指标SSIM 表3 客观评价指标AG 不同的光照环境对雾天图像清晰化有着不同的挑战。为了测试本文算法对光照的适应范围,选取3幅不同光照环境的雾图进行评估,结果如图6所示。图6中第1行图为有雾图像,第2行图为去雾后图像。 图6 不同光照环境的去雾结果 白天光照充足,去雾后的楼房边缘清晰,颜色自然,整体画面效果良好。傍晚的光照不足,但仍然有光源,依然能够对图像进行去雾处理,恢复了场景的真实颜色,但整体较暗。夜间已经没有了太阳作为光源,光照严重不足,此时大气散射模型不再适用,无法直接使用该模型进行去雾处理。若想实现夜间去雾,则需根据夜间场景特点修正成像模型,已不属于本文研究范畴。综上可见,本文算法在有太阳作为光源的情况下,无论光照强度如何,都可以进行去雾操作,效果良好,具有实用价值。 考虑到各算法应用在实际生活中时,不仅要有良好的去雾效果,还要满足一定的时间要求,对于各算法的时间对比如表4所示。 表4 不同算法运行时间 由表4可知,本文算法时间虽然不是最优,但仍然比HE算法要低,并且对于尺寸较小的图像,本文算法的运行时间在可接受范围内。 本文在暗通道先验算法基础上做出改进,提出改进暗通道窗口与透射率修正的图像去雾算法。利用超像素分割算法改进暗通道的滤波窗口,获取更为准确的暗通道,从而消除光晕伪影;根据大气光的特性,结合超像素分割求取更为准确的大气光值;提出自适应容差来修正透射率,解决了DCP存在的先验盲区,抑制了明亮区域的颜色失真。实验证明,本文算法有更好的去雾效果,且能够应对不同类型的雾天图像,对于雾天环境下航拍等设备准确获取场景信息有着极大的帮助。后续将考虑进一步优化算法,提升超像素分割的效率。3 实验结果分析
3.1 主观评价
3.2 客观评价
4 结论