基于天空识别与加权引导滤波的图像去雾算法
2022-03-05林贝欣
林贝欣, 殷 明, 邢 燕, 韩 艺
(合肥工业大学 数学学院,安徽 合肥 230601)
通常雾环境中漂浮着许多颗粒,从而导致光线发生散射,使观察得到的图像可见度下降,细节信息缺失,严重影响图像在某些领域的应用,如目标跟踪、自动监视系统和场景评估等;因此研究去雾算法获得去雾图像是有意义的和必要的。
近年来,针对有雾图像,为了提高图像的可视性和对比度,学者提出很多图像去雾算法,并取得了较好的研究成果[1-12]。文献[1]假设透射率与表面阴影在局部不相关,估算透射率,该方法在物理上是合理的,但无法处理浓雾图像,并且在假设前提被破坏的情况下可能会失效;文献[2]提出一种颜色衰减先验,即景深可以由高亮度和低饱和度表征,并建立线性模型,但该方法使用统一的大气散射系数,导致鲁棒性差,浓雾图像处理效果不能令人满意;文献[3]观察到,剔除天空的暗通道原理,可以实现令人满意的去雾效果,但在采用Soft Matting思想细化透射率时,存在效率低的问题;为此,文献[4]提出用引导滤波代替Soft Matting算法,但是恢复后的图像在深度不连续附近仍包含一些光晕伪像;文献[5-7]优化了文献[4]的算法,提出改进引导滤波,边缘的细节强度改善了很多,但是对于边缘的感知还是不够强;文献[8]提出非局部先验,根据雾线模型估算透射率,这种模型可以复原有雾图像的色彩,但是需要更多的先验知识,因此在使用时存在局限性,并且在天空区域中效果也不理想;文献[9-11]是针对有雾图像存在天空区域的去雾算法, 将天空区域和非天空区域区分开, 虽然能够有效处理天空区域,但对于被建筑挡住的天空区域无法检测出来;文献[12]从雾图像中提取3个与雾相关的统计特征,并用这3个特征的线性组合评估雾密度。这些基于雾密度预测的方法可以有效地消除雾,但是由于雾密度预测不准确,往往产生过度除雾和颜色失真现象。
近年来,利用深度学习的方法进行去雾越来越流行。文献[13]是一种端到端的训练模型,用于从有雾图像中估计透射率t(x),并提出nonlinear激活函数,提高恢复图像的效果。文献[14]提出的AOD-Net模型并不是像大多数模型那样估计透射率t(x)和大气光A, 而是通过轻量级CNN直接生成清晰图像;文献[15]提出一种基于门限融合网络的雾图像的复原方法,在一般自然图像中处理效果良好,但是在非常大的雾的情况下,不能取得良好的去雾效果。尽管利用深度学习的方法取得了令人鼓舞的结果,但训练数据固有的局限性却成了这一蓬勃发展趋势越来越严重的障碍。
总之,上述去雾算法存在如下3个缺陷:① 不能有效地处理浓雾图像;② 去雾后的图像在天空区域出现块状伪影的现象;③ 恢复的图像在边缘区域出现光晕伪影。分析发现,去雾效果不佳的原因在于错误地估计了透射率。针对天空区域、景深突变区域和浓雾图像处理效果不佳的状况,本文提出一种基于天空识别与加权引导滤波的图像去雾算法,该算法通过自适应加权引导滤波来细化透射率,并把有雾图像通过4-RTV模型优化后的图像作为引导图像,再结合天空识别的结果调整透射率,有效地解决了上述不足。
1 相关理论
1.1 大气散射模型
大气散射模型[16-17]显示了有雾图像的形成并被大面积使用,其公式如下:
I(x)=t(x)J(x)+A(1-t(x))
(1)
其中:I(x)为有雾图像;J(x)为无雾图像;A为全局大气光;t(x)为透射率或传输。在均匀介质中,透射率t(x)的表达式为:
t(x)=e-β d(x)
(2)
其中:β为大气散射系数;d(x)为景深。
1.2 暗通道先验
文献[3]提出暗通道原理,用于估算粗略传输图,定义为:
(3)
其中:Ω(x)为以像素点x为核心的邻域窗口;Jc(y)为J的其中一个颜色通道。自然图像统计数据表明,Jdark(y)趋于0。
(4)
其中,ω用来保持非常少量的雾,通常设为0.95。
1.3 引导滤波
假设在以像素k为核心的窗口wk中,在引导图像Ii与输出图像qi之间建立线性模型,即
qi=akIi+bk, ∀i∈ωk
(5)
其中,ak、bk为wk中恒定的线性系数。为确定(ak,bk),在窗口wk中使以下成本函数最小,即
(6)
其中,λ为防止ak过大的正则化系数。
文献[4]提出的引导滤波中,采用全局一致的正则化系数,导致在复原图像中出现光晕伪影。由于局部方差大的区域对应边缘区域,文献[5]提出加权引导滤波,即利用引导图像在窗口wk中的方差信息不断改变正则化系数。根据窗口wk中的方差,定义边缘权重,即
(7)
使用边缘权重,向边缘处的像素分配比在平坦区域中的像素更大的权重,相应地在边缘处的正则化系数较小,可以很好地保留边缘。
2 本文算法
基于暗通道先验和传统引导滤波的去雾算法可以有效地处理浓雾图像,但是难以处理天空和密集的景深突变区域,因此本文提出一种天空识别和自适应加权引导滤波的图像去雾算法。具体算法流程如图1所示。
图1 算法流程
2.1 估计大气光值
对于大气光的选择,通常选择天空区域最亮的点,但比大气光亮的物体可能导致大气光的错误选择。为了更可靠地选择大气光,采用文献[18]中基于四叉树细分的分层搜索方法,它是基于如下事实:在雾区域(例如天空)中,像素值的变化通常很小。先把雾图像分为4个矩形块;再将每个矩形块的分数定义为像素的均值减去该矩形块内像素的标准差;接着选择得分最高的矩形块,并将其进一步分为4个更小的矩形块。重复此过程,直到所选矩形块的大小小于预先指定的阈值。
2.2 细化透射率
2.2.1 优化引导图像
引导滤波是边缘感知操作,只有在外观平滑的图像条件下能呈现好的效果。对于具有强纹理区域,使用引导滤波的精确透射图易出现具有与此类纹理相关的错误变化;这与大气散射模型是矛盾的,因为每个像素中的透射图仅与深度有关,与纹理或颜色无关。本文希望精炼透射图是平滑的,在传统的相对总变差RTV模型[19]的基础上,提出4-RTV模型,平滑有雾图像,并用作引导图像,即
(8)
其中
(9)
其中:q属于以像素p为中心的方块区域R(p);D为窗口化的总变差;g为高斯核函数;∂xS、∂yS分别为S在x和y方向的梯度;*为卷积符号;卷积核Ki为:
(10)
引导图像希望是平滑且保持结构的,本文提出的4-RTV模型可以满足这一需求,如图2所示。与优化前相比,使用RTV模型优化后的透射图过于平滑以至于模糊掉一些边缘结构(从图2c和图2d中右边的高楼可以看出),而本文方法是在产生平滑表面的同时感知深度边缘。
图2 优化前后的去雾效果比较
2.2.2 自适应加权引导滤波
为了更好地保存边缘的一些重要细节,本文在文献[5]的基础上改进加权引导滤波算法,通过添加局部平均值u,以达到进一步提升感知边缘的能力。局部标准差σ是量化局部清晰度的结构图像信息的重要描述符。但是σ的感知影响随局部平均值u的变化而变化。因此将自适应边缘权重定义为:
(11)
其中:N为引导图像的总像素数;ε设为0.005。成本函数变为:
(12)
则
(13)
边缘处的像素一般要比平面区域中的像素更重要,分配的权重应该更大。若p′位于边缘区域,则ωI(p′)的值通常大于1;若p′位于平滑区域,则ωI(p′)的值小于1。不同边缘权重的效果对比如图3所示。图3b和图3c分别为图3a在文献[5]和本文使用的边缘权重的效果图。图3显示,本文所提出的边缘权重更能够突出边缘,而文献[5]使用方差的边缘权重,边缘有点暗淡。
图3 不同边缘权重的效果对比
2.3 基于天空识别修正最终透射率
图4 下限值不同的去雾效果比较
图5 天空分割过程示意图
天空识别算法具体步骤如下:
(1) 用Sobel算子求输入图像I的梯度信息,并用双边滤波器进行适当去噪和滤波。
(2) 将梯度信息换为二值图像B1(x),并对B1(x)进行半径为r的腐蚀,得到图像B2(x)。
(3) 区域生长。首先选取区域生长的种子点,剔除位于图像下方平坦区域(图像大小为M×N,若大于M/10,则认为是下方区域)的点;再在图像上方平坦区域中寻找亮度最大的点,并将其作为种子点,再进行区域生长,得到可能为天空的区域;计算这个区域在整个图像中所占的比例ratio。
(4) 纹理特征。大量实验数据表明,以种子点为原点,选取50×50的天空可能区域,可以更好地求得这个区域的纹理特征熵值。
(5) 当ratio大于阈值θ时,有种特殊情况会出现在浓雾图像中,即可能会将图片中雾比较重但不是天空的区域误认为是天空区域。针对这种特殊情况,若ratio大于等于阈值θ、雾浓度[20]和纹理特征熵值分别大于阈值δ和ξ时,认为所获得的区域不是天空区域;反之认为是天空区域。当ratio小于阈值θ时,认为不是天空区域。
2.4 复原图像
得到大气光A和最终透射图t(x)之后,根据物理大气散射模型可以得到去雾图像,表达式如下:
(14)
不同方法的去雾效果比较如图6~图10所示,本文恢复图像显示在图7g中。从图7g中看出,天空区域的失真问题以及图像残留伪像问题在很大程度上得到改善。
图6 不同方法的去雾效果比较(一)
图7 不同方法的去雾效果比较(二)
图8 不同方法的去雾效果比较(三)
图9 不同方法的去雾效果比较(四)
图10 不同方法的去雾效果比较(五)
3 实验结果与分析
为了检验本文去雾算法的效果,与现有的去雾算法(文献[3-4]、文献[2]、文献[21]、文献[8]、文献[12])进行对比,算法代码来自文献作者发布在GitHub上(除文献[3-4]外)的内容,文献[3-4]的算法代码从https://github.com/akutta/Haze-Removal获取,对测试图像(来源于文献[1]和文献[8]使用的单幅图像集)进行定性和定量评估。实验主要参数见表1所列。
表1 主要实验参数
η和r取值与划分天空区域和非天空区域有关,多次实验得知,η在0~0.08之间,实验效果较好;本文设η=0.04,r=1。θ为天空区域占比阈值,取值不可过大,否则无法判断小面积的天空区域。多次实验发现,θ=0.1时实验效果较好。引入雾浓度δ和纹理特征熵值ξ来确保选取的区域是天空区域,当δ取值范围为[0.05,0.12]时,实验效果较好,本文取ξ=0.1,δ=2。
3.1 定性分析
将本文的方法与选定的5种主流方法进行比较。图6~图10给出了针对不同图像,不同去雾方法的去雾效果。 值得注意的是,文献[2]的方法可以在一定程度去除雾,但是对于浓雾,效果不理想,如图8b所示;文献[21]的方法通过图像分解能够很好地阻止光晕伪影,但从图6f和图8f可以看出,文献[21]的去雾效果过于光滑和不自然;文献[8]和文献[3-4]都无法很好地处理天空区域,图7c和图7e显示天空区域出现块效应;文献[8]的结果也出现了颜色失真的现象,如图8c和图10c所示;通过文献[3-4]的方法获得的还原图像包含光晕伪像,如图7e和图9e所示,这是对透射率估算不正确造成的;文献[21]的方法能够有效地消除浓雾,但是也产生了颜色失真的现象,如图6d、图10d所示,这是对雾密度预测不准确造成的。
相比之下,本文去雾效果较好,不仅在天空区域实现真实色彩和更好的感知力,而且能够有效抑制光晕伪影,很好地保留细节。
3.2 定量分析
为了客观评价本文算法的有效性,采用对比增强评估指标[22]、梯度幅度相似度偏差GMSD[23]和信息熵作为定量评估。
3.2.1 评估指标
对比增强评估指标中,e表示去雾图像中新的可见边缘相对于模糊图像的比率;r为除雾之前和之后的梯度范数的平均比;σ表示除雾后变为黑色或白色的像素百分比。较高的e、r值和较低的σ值表示去雾效果较好。但是e、r和σ并不总是一致的, 因此要平衡好三者。梯度幅度相似度偏差GMSD是评估去雾图像与输入雾图像之间的梯度幅度相似度偏差;畸变程度越小,GMSD值越低,恢复的图像越好。图像信息熵entropy表示复原图像信息的丰富度,越大越好。评估指标对比结果见表2所列。
表2 评估指标对比结果
3.2.2 评估结果与分析
表2列出的对比结果说明了本文方法的有效性。GMSD的值反映图像中畸变严重程度的范围,值越高,失真范围越大,图像效果越不好。从表2可以看出,本文方法和文献[21]的方法都获得了较小的GMSD值,但文献[21]的方法受到伪影的影响,细节保留得不够清晰,而本文的方法在抑制光晕的同时能够很好地保留细节。较高的信息熵值表示复原图像信息的丰富度。从表2可以看出,文献[8]的方法获得最高的信息熵值,但由于颜色失真导致色彩过于丰富,而本文方法在保持丰富颜色的同时能够保持颜色的真实感。表2给出了不同去雾方法的对比度增强评估,在平衡e、r和σ三者之后,本文方法获得良好的效果。
4 结 论
针对经典去雾算法在天空和边缘处出现光晕的现象,本文以暗通道先验为基础,提出基于天空识别与加权引导滤波的图像去雾算法。通过优化引导图像和改进加权引导滤波抑制景深处出现的光晕效应,有效增强了边缘处的细节。针对暗通道先验不适用于天空等明亮区域问题,提出一种天空识别方法,能够有效识别图像中是否存在大面积天空区域,从而对透射率进行修正,得到洁净的天空区域。实验结果表明,相比于一些主流的去雾算法,本文算法所得到的图像在景深处能恢复更多细节,并且在天空处没有出现明显的失真。