张 雪,王 峰,赵 佳
(阜阳师范大学计算机与信息工程学院)
在雾天和雾霾天气条件下,由于空气中大量的悬浮物颗粒物对光线的吸收和散射等一系列作用,将导致拍摄到的图片会存在对比度低、细节丢失、能见度低等情况,影响图像后续的识别和分析工作,导致后续的图像提取特征不够准确。同时,雾和雾霾天气会给人们的生产生活和出行带来一些不便,对道路监控、车辆监控等都会带来一些影响[1-4]。
图像去雾是一项具有挑战性的工作,近年来,随着计算机科学等各种技术的不断发展成熟,在图像去雾方面已经出现各式各样的处理算法。其中,端到端的单幅图像的去雾技术由于具有很多优势,逐渐得到人们的关注,成为图像处理领域的研究热点。
一般而言,雾图像的每个像素都受到两个方面因素的影响:大气光值A 和透射率t(x)。这两者都和场景深度有着密切的关系,然而,对于场景深度一切都是未知的,这就给单幅图像去雾的工作造成了不可估量的难度。
根据处理方式不同,图像去雾算法可以大致分为两大类:一种是基于图像增强的方法,如小波变换算法,偏微分方程算法,Retinex 算法等[5-7]。基于图像增强的去雾算法通过直接增强对比度来改善图像的视觉效果,可能会对突出部分造成一定的信息丢失或过增强现象,而且需要对天空区域、透射率等进行准确估计,这些问题比较难以实现且计算量大,通用性不够。另一种是基于图像退化模型的复原方法,如大气散射模型算法、基于神经网络的去雾算法,基于暗通道先验的去雾算法等。其中最经典的算法就是暗通道先验去雾算法,通过对大量的无雾图像进行分析,总结暗原色的先验规律,输入含雾图像,再经由大气散射模型恢复出无雾图像,算法复杂度相较也更低[8-10]。由此,本文采用去雾方法是基于图像复原技术的暗通道先验去雾算法。
本文算法是结合传统的暗通道先验去雾算法的经验,提出端到端的去雾改进算法,相较于传统的去雾算法,本算法处理结果使得雾图像更加清晰,并减少色彩失真的问题,尤其对天空部分的去雾效果。
通常所说的暗通道,实际上是指清晰无雾的图片,除了天空区域(因为天空区域或者白色区域与雾的特征较为相似)外的任一局部区域内,总会存在某一些像素在至少一个颜色通道具有很低的值。在实际生活中造成这个现象的原因有很多,主要原因可以总结为三种,一是汽车、建筑物和城市中玻璃窗户的阴影,或者是树叶、树与岩石等自然景观的投影;二是彩色物体表面,如花草树木,蓝色的水面;三是颜色较暗的物体或者表面,例如灰暗色的树干和石头。暗通道先验模型就是在此基础上被提出来的,即对任一幅无雾图像J(x),定义暗通道[11-13]:
若颜色分量R,G,B 值都偏高的情况下,那么像素会有明显的趋于白色的势态。在不覆盖天空的区域里,把每一个像素中“偏暗”的值(通道)以一定的方式集合起来,就构成了一幅图片的暗通道图。在雾霾图像中,通道的这些暗像素的强度是由大气光值A 贡献的,这些暗像素可以直接提供对雾霾透射率t(x)的准确估计,从而求出最终的无雾图像J(x)。
1.2.1 大气散射模型
在计算机视觉和计算机图形学领域中,通过方程式(2)来描述雾图形模型,并且得到广泛的使用。
其中,I(x)就是待处理的含雾图像,J(x)是经过处理最终得到的无雾图像,A 是全局大气光值,t(x)表示透射率。目前,已知的条件有I(x),需要求最终的J(x),但是(2)式中t(x)和A 是未知的,这就需要先估算出t(x)和A 的值,才能得到最终的去雾图像J(x)。
定义暗通道的公式:
式中Jc表示的是彩色图像的每个通道,用Ω(x)来表示以像素x为中心的一个窗口,在传统的暗通道先验去雾算法中,暗通道图像使用的窗口大小一般均设置为15*15[14,15]。通过(2)式化简推导出J(x),对等式两边“取最小”的处理,得到:
1.2.2 估计大气光值A
通常情况下,上述(2)式中的全局大气光值A假设是已知的,实际上可以借助暗通道图从有雾图片中获取该值。具体步骤是:首先从暗通道图中按照亮度的大小取前0.1%的像素;然后在这些位置中,在输入的有雾图像I(x)中寻找对应的具有最高亮度的点的值,作为A 的值。接下来可以对(4)式两边同时除以全局大气光值A,得到:
对于(5)式两边再次进行“取最小”处理,得:
暗通道先验的理论指出,暗通道图是稀疏的,绝大多数元素为零或者趋向于零,由此得出:
1.2.3 估计透射率t(x)
此时,整理以上等式得出:
由上式可以计算透射率的估值,暗通道先验算法对于天空区域来说不是良好的先验模型,但天空的颜色通常与雾霾图像中的大气光值A 非常相似,所以对于天空区域:
由于天空是无限的,并且趋向于零的传输,因此无需分离出天空区域,视作非天空的区域进行处理。同时,引入常数ω(0<ω≤1)保留雾的程度,因为在现实生活中,即便是晴天,空气中也会存在一些微小颗粒,看远方的物体的时候,感受到雾的存在,而雾的存在可以使得到的处理效果看起来更加自然[16,17],公式如下:
1.2.4 恢复场景亮度
求出大气光值A 和透射率t(x)后,根据雾图形模型公式(2)恢复出场景的亮度,求出J(x):
当t(x)趋近0 时,直接衰减项J(x)t(x)也接近0,直接恢复J(x)会容易受噪声干扰,因此需要对t做一个下界t0的限制(传统的暗通道先验去雾算法中的下界t0取0.1),这意味着,在非常密集的雾霾区域,会保留少量的雾霾[18]。最终,J(x)表示为:
在传统的暗通道先验去雾算法中,ω用来保留雾的程度,并在大量的研究和实验中得出最佳ω=0.95。但在实际生活中,获取的含雾图片不尽相同,每张图片都需要不同的ω值来保留不同程度的雾,同时影响着去雾的效果,甚至对于同一幅有雾图像来说,它的每一块像素值所需要保留的雾的浓度都不一样,因此对于每一块图片来说,都需要设置其最合适的ω值以获取最符合主观视觉审美的去雾效果图。
传统的暗通道先验去雾算法中,对于每张图片设置的值都是一样的,就导致每个不同部分的去雾效果参差不齐,会导致在去雾的过程中产生图片颜色失真、对比度过高等问题,尤其是对于天空部分的去雾容易产生Halo 效应。
针对这些问题,本文提出一种改进暗通道先验去雾算法,其主要思想就是针对性地去除不同待去雾图片中每部分不同程度的雾。首先四等份均分割待去雾图像,这样图片中各个相异的部分就被分割开,再对图片进行暗通道去雾处理,每张图像的每一块图片都有各自不同的值来保留不同程度的雾,使得最终得到的去雾图效果相较更好,尤其是对于天空部分的处理,得到的去雾图更趋向于真实。
整个改进算法的去雾流程如下图所示:
图1 改进算法流程图
改进算法是基于传统的暗通道先验去雾算法进行的,首先输入待处理的含雾图像,计算透射率t(x),传统暗通道先验去雾算法指出,根据大量图像统计,无雾图像的R、G、B 三个颜色通道总有一个通道值是趋近于零的,换言之,在该像素上透射率t(x)趋近于1,J(x)与I(x)几乎相等。而有雾图像,由于雾霾反射的大气光干扰,R、G、B 通道上的最低值,也就是被反射后的大气光值A,带入大气模型公式里即可计算出该像素上的透射率t(x)。接下来是估计大气光值A,可以把它看做一个独立的R、G、B 像素,包含三个值,一般是对原始图像R、G、B 通道统计0~255 概率分布,分别从三个通道值中的最大值开始取占比大于0.1%的值作为A 中对应值。
计算透射率t(x)和大气光值A 后,把图片均等的分成四个部分,下一步确定四个不同大小ω值。传统暗通道去雾算法中的值对于整张图像而言,是个统一的定值,但是实际情况下的图像的每一块拍摄的景物是不一样的,此时整张含雾图片就会需要分别不同且具针对性的ω值。经过对大量图片的进行分析比对:当图片被分成四部分时,图片中的不同景物大概率地被分离开,所以选择把图片均等分割成四部分,对于每部分设置一个合适的ω值,这样就得到四个不同的ω值。
为验证本文改进方法的效果,在实验过程中选取多幅网络上的含雾图片进行仿真测试,并与文献[11]的传统的暗通道先验去雾算法结果进行比较。实验平台为64 位windows10 操作系统的计算机,处理器为Intel(R)Core(TM)i5-7500 CPU@ 3.40GHz 3.41 GHz,内存为8.00 GB,软件平台为PyCharm 2021.1.3×64.
针对传统暗通道先验去雾算法对天安门上的天空部分的处理过于黯淡的情况,改进算法设置ω1=0.88,ω2=0.9,ω3=0.84,ω4=0.87,其中四个部分的ω值分布如下图(c)所示,实验结果图如下:
图2 天安门的去雾效果图
针对传统暗通道先验去雾算法对青山上的天空部分处理出现颜色失真的情况,改进算法设置ω1=0.88,ω2=0.9,ω3=0.84,ω4=0.87,实验结果如下图所示:
图3 山上的去雾效果图
针对传统暗通道先验去雾算法在平地部分的处理出现严重失真的情况,改进算法设置ω1=0.88,ω2=0.89,ω3=0.88,ω4=0.9,实验结果如图4所示:
图4 平地的去雾效果图
针对传统暗通道先验去雾算法对天空部分的处理结果不好的情况,改进算法设置ω1=0.77,ω2=0.76,ω3=0.78,ω4=0.77,实验结果如图5 所示:
图5 天空的去雾效果图
针对传统暗通道先验去雾算法处理结果色彩趋于黯淡的情况,改进算法设置ω1=0.72,ω2=0.83,ω3=0.71,ω4=0.83,实验结果如图6 所示:
图6 城市的去雾效果图
针对传统暗通道先验去雾算法对天空和河流部分的处理结果过于灰暗的情况,改进算法设置ω1=0.71,ω2=0.73,ω3=0.72,ω4=0.74,实验结果如图7 所示:
图7 湖面的去雾效果图
本文提出的改进算法在图像的非天空区域和天空区域均取得较好的去雾效果,明显的提升图像的对比度和清晰度,改善了图片色彩失真的问题。特别是对天空区域的还原度比传统的暗通道先验去雾算法高了很多[19],而且去雾更加彻底。
通过分析,把图片平均分割成四份,然后对其进行暗通道去雾处理,得到的最终去雾图效果明显,并且经过大量的实验和对比分析:ω取值对非天空和河流部分的去雾效果而言,其值越小,去雾效果越不明显;同时相反,对于天空和河流部分的去雾操作来说,值越高,色彩失真和对比度过强的现象就越明显,所以,值控制在0.77 到0.83 时去雾效果最好;对于森林、荒地、草地、高楼、平地等,ω值控制在0.88 到0.92 的时候去雾效果最好。
本文提出的改进算法在时间消耗上优于传统先验去雾算法。
表1 两种算法运行时间对比
本文是依据传统的暗通道先验去雾算法原理进行的改进,通过平均分割后再进行暗通道先验去雾算法得到的去雾图片,不仅保留了暗通道先验去雾算法对非天空部分和河流部分的良好的去雾效果,同时提高了对于天空部分的去雾能力,有效地避免了Halo 效应,降低了图像色彩失真的可能性,去雾图片对比度良好,而且复原后的图像具有较好的清晰度和色彩还原度[20],细节部分的处理效果也更具清晰度,使得去雾后的图片看起来更自然,贴近生活,该算法具有较高的运行效率。