APP下载

结合天空分割和雾气浓度估计的图像去雾

2022-03-11吕建威韩昊男

光学精密工程 2022年4期
关键词:透射率雾气像素点

吕建威,钱 锋,韩昊男,张 葆*

(1. 中国科学院 长春光学精密机械与物理研究所,吉林 长春 130033;2. 中国科学院大学,北京 100049)

1 引 言

随着科技和工业的高速发展,雾霾天气成为了非常常见的自然现象。在这样的天气条件下,大气光经过空气中的悬浮粒子发生了散射,导致光学系统获取到的图像出现对比度下降、细节不清晰、局部亮度偏高,饱和度降低等一系列降质退化现象。图像降质退化给后续的目标检测与跟踪、图像识别等计算机视觉领域的技术工作造成了很大的影响,给医学、军事、工业以及交通等行业的工作带来了极大的不便。因此,研究如何复原有雾的图像,提高有雾条件下图像的清晰度,降低有雾天气对成像系统的影响有着极其重要的意义。

现有的图像去雾算法主要可分为三大类:基于图像增强的方法[1-2]、基于物理模型的方法[3-5]以及基于深度学习的方法。基于图像增强的方法有直方图均衡化[6]、Retinex 图像增强理论[7-8]、高斯滤波、中值滤波、快速傅里叶变换以及小波变换等。这类方法并没有考虑雾的形成机制,而是通过对比度增强的方式来提高图像质量,无法真正有效地实现去雾。基于物理模型的方法是以Narasimhan 和Nayar 提出的大气散射模型为基础[9],根据不同的先验知识和大气光估计方法来求解模型并复原无雾图像。He 等人[10]提出了暗通道先验(Dark Channel Prior,DCP)理论,具体过程为首先估计出暗通道图并结合大气散射模型推导出透射率的值,然后利用软抠图原理[11]或者引导滤波[12]对透射率图进行优化。该算法原理简单,运行效率高,应用广泛,许多去雾算法都是以该算法为基础被提出的[13-16]。但是,当图像中出现大面积浓雾、高亮以及白色物体时,大气光及透射率估计不准确,暗通道先验失效。Zhu 等人[16]提出了颜色衰减先验(Color Attenuation Prior,CAP)方法,具体做法是通过实验规律发现雾气的浓度分布与亮度和饱和度之差呈正相关并建立线性模型,然后学习训练大量样本得到透射率估计图。Berman 等人[17]提出的非局部先验(Non-local Prior,NLP)去雾法是将无雾图像的RGB 值利用K-means 聚类后形成了不同的簇,在雾的影响下这些像素点不再形成簇,而是形成了雾线,根据雾线可以进一步估计每个像素点的透射率值。Meng 等[18]在暗通道先验方法的基础上加入边界约束条件,使得改进后的去雾图片中对于天空的处理效果会有显著提升。Ancuti等人[19]提出了RGB 和LAB 之间的颜色变换方法来进行图像去雾。

近年来,基于深度学习的去雾方法受到了越来越多研究者们的关注,此类方法通过建立神经网络学习图像间的内在关联,通过大量训练获得无雾图像。Cai 等人[20]提出基于卷积神经网络的DehazeNet 结构来提高恢复的无雾图像的质量,DehazeNet 是一种端到端的训练模型,利用神经网络来对大气退化模型中的透射率进行估计。但该方法存在的缺点是将大气光值设置为全局常量,去雾后的图像往往颜色失真。Li 等人[21]将大气散射模型中的大气光和透射率两个参数通过变形合并成一个参数,在此基础上提出了一种基于CNN 的轻量级端到端卷积神经网络模型AOD-Net。AOD-Net 最终输出的是复原后的无雾图像,并没有输出透射率和大气光的估计图,这样可以有效避免大气光和透射率带来的误差,但由于网络模型深度浅,无法提取到图像中更深层次的信息。Ren 等人[22]提出了一种多层深度神经网络,通过有雾图像和对应的无雾图像的数据集来学习它们之间存在的映射关系,先采用粗尺度卷积神经网络来估计粗略的透射率分布,再利用细尺度卷积神经网络进一步优化透射率。基于深度学习的算法往往需要大量的样本训练,但目前没有大量真实的有雾图像数据集,用于训练的都是经过合成的有雾图像数据集,所以恢复图像存在缺陷[23-26]。

总之,基于图像增强的方法不考虑图像中雾的形成机制,只考虑视觉增强效果,容易造成对比度过度增强、颜色失真等现象,无法真正实现去雾。基于深度学习的方法不考虑图像的先验信息,去雾性能易受训练图像类型限制,占用内存较大,往往会出现颜色失真、过饱和等现象。基于此,本文提出一种天空分割和雾气浓度估计的去雾方法,有效解决了天空区域恢复不真实问题。针对非天空区域雾气浓度分布问题,提出了雾气浓度估计模型提高雾气浓度的估计精度。为了获得透射率图,分别估计天空和非天空区域的透射率,结合像素点概率分布得到叠加后的透射率结果,最终能够得到去雾更彻底、细节更清晰的复原图像。

2 图像去雾的原理和模型

2.1 图像去雾模型

最常用的白天去雾模型中认为相机捕获的大气中的散射光包含文献[27]中提出的直接传输和空气光:

其中:I(x)是在像素x处观察到的图像像素大小,J(x)是场景反射或没有雾时的理想的恢复图像,A是在白天除雾时被认为是恒定常数的大气光值,t(x)是到达摄像机之前场景的透射率,β是经雾中颗粒散射后的衰减因子,d(x)是相机与被称为景深的场景之间的光学厚度或距离。J(x)t(x) 称 为 直 接 传 输,A[1-t(x)] 是 空气光。

2.2 暗通道先验方法

暗通道先验理论表明:在绝大多数的非天空的局部区域中,对于每一幅图像的每一个像素的RGB 三个颜色通道,某一些像素总会有至少一个颜色通道具有很低的值。暗通道表示如下:

其中:Jc表示实际无雾图像的一个颜色通道,ω(x)表示以像素点位置x为中心的邻域图像块,Jdark表示实际无雾图像的暗通道。暗通道先验的原理表明:Jdark的值总是趋近于0。

式(1)两边同时进行暗通道操作,可以得到粗略的透射率值为:

在进行算法模拟时发现,若利用上述公式彻底去雾,图像会丢失部分信息,造成图像看起来不真实,因此引入有雾因子υ,保留图像中的一部分雾,υ=0.95。修正后的公式如下:

为了提高透射率的精度,最开始采用软抠图的方法来精细化透射率,由于软抠图的运行效率低,后来采用引导滤波的方法具有更好地保持边缘能力,大大提高运行效率。得到精细化的透射率之后,最终的图像去雾结果为:

一般情况下取t0为0.1。

3 本文算法

3.1 算法原理

算法原理框图如图1 所示。首先由梯度图像进行阈值分割并设定亮度约束条件分割出天空区域,根据改进的暗通道先验法和四叉树细分法得到大气光的估计值。然后,对于非天空区域提出了线性雾气浓度估计模型得到透射率的值。对于天空区域利用亮通道先验方法得到透射率的值,再结合像素点概率值进行叠加得到新的透射率图像。最后,利用大气散射模型得到去雾图像结果。

图1 算法原理图Fig.1 Block diagram of algorithm principle

3.2 图像天空区域的分割方法

在对图像大气光和透射率进行估计时,通常由于天空区域的存在导致雾的浓度估计精度不足,得到的结果会在天空区域出现颜色失真等现象。因此,为了提高图像透射率的估计精度,本文提出了新的图像分割天空区域的方法,并获得像素点是否属于天空区域的概率分布。

本文所提出的天空分割方法步骤如下:

步骤1:将图像转换为灰度图像,并通过Sobel 算子计算图像的梯度,得到梯度图像信息;

步骤2:对梯度信息进行适当的去噪和滤波,这里采用引导滤波的方法,能够较好地去噪和保边;

步骤3:将梯度图像进行最大值最小值归一化,随机设置梯度阈值将图像进行二值化,超过该阈值的区域像素值大小为0(黑色),反之为1(白色),最终得到能够初步分割出图像天空区域的阈值N=0.02;

步骤4:对步骤3 中梯度图二值化分割后的每个连通的白色区域统计其原始图像在对应位置的像素的亮度大小,即变换到HSV 空间中亮度V 的大小;统计V 的大小后,尽可能保留较大的亮度值,如果大于阈值T则保留,阈值设置为T=0.80 时能够在之后的步骤中识别出天空区域;

步骤5:在符合步骤3 和步骤4 条件下,图像中最大的连通区域可以作为识别出的天空区域,一般情况下连通区域大小超过整幅图像的5%时可以认为是天空区域。

得到天空分割结果后,可以利用概率值α(x)来表示像素点是否属于天空区域,如果像素点对应的梯度值大于阈值N,说明像素点梯度较大,认为不属于天空区域,反之,则认为像素点属于天空区域。这样,可以利用分段函数表示为:

其中:G(x)表示图像归一化后的梯度分布图,V表示HSV 空间中亮度V 的大小,T表示亮度阈值,N表示对梯度图进行阈值分割后获得的能够分割天空区域的阈值大小。图像天空分割结果如图2 所示,可以看出本文所提出的方法能够有效提取天空区域的信息,如图2(a)和图2(b)所示。若图像中没有天空区域时,如图2(c)所示,可以看到结果全是黑色,说明算法可以识别无天空区域的图像。

图2 图像天空分割结果Fig.2 Results of sky segmentation.

3.3 图像大气光的估计方法

在暗通道先验中,大气光的估计方法是将暗通道中的像素点值大小进行排序,选择0.1%的最亮像素的平均值作为大气光估计值。然而,当场景中白色部分较多(如过亮的天空,浓度很厚的雾,白色物体等)时,可能会错误选取大气光的估计位置,造成后续处理的结果出现颜色失真等现象。图3 为有雾图像及其大气光估计结果,其中填满红色区域为最终选定区域。Kim 等[28]首先对图像进行四叉树分割,得到像素平均值最大的图像子块,继续对该子块进行分割,重复上述步骤,直到分割次数达到预先设定的值为止。最后,从得到的最后子块中选取距离(255,255,255)最小的RGB 分量作为大气光值。这种方法在大部分图像中,大气光估计较为精确,但如果图像中存在白色过多的区域或者过曝的白光区域,大气光估计往往会出现偏差,四叉树分割方法的偏差示例如图3(b)所示。为了提高大气光值的估计精度,提取不重叠区域l(x),在各个不重叠区域中选取全部像素的最小值作为改进的暗通道估计图[29],表示如下:

根据文献中的叙述,选择子块大小为30×30。

图3(c)展示了本节方法的暗通道改进图。可以发现,改进后的暗通道像素强度值比原始图像子块平均值更低一些,之后就可以利用四叉树细分方法来估计大气光的值。经过以上改进后就可以排除上述的干扰问题,如图3(c)所示,选择大气光的估计点并不是在下方的建筑区,而是左上方的天空区域,大气光的估计精度有了明显的提高。

图3 有雾图像及其大气光估计结果Fig.3 Hazy image and its atmosphere light estimation results

3.4 雾气浓度估计模型

在绝大部分有雾的场景中,雾中的悬浮颗粒会对大气光产生散射,造成光学成像设备获取到的图像出现饱和度低,局部亮度高,细节模糊等现象。对于任意的场景,雾越浓的区域,悬浮颗粒对经过物体反射的光线产生的散射作用越大,该区域的细节越模糊,亮度越大,饱和度越低。

为了能够更准确地描述雾的浓度特点,需要在Zhu 等人[16]和鞠铭烨等人[30]方法的基础上进行改进,具体的改进方法是假设雾的浓度与图像的深度呈线性关系,雾气的浓度分布与局部亮度、饱和度和梯度三者有关,以此为基础并建立了线性雾气浓度估计模型,表示如下:

其中:a1,a2,a3代表线性权重系数;ζ代表模型的随机误差;L(x),S(x),G(x)分别表示图像在像素点位置x的亮度,饱和度以及梯度;雾气浓度图c(x)取决于像素点邻域内局部的梯度平均值、饱和度平均值和亮度平均值,雾气越浓的区域,亮度值越大,饱和度和梯度值越小,反之亦然。这里图像的梯度用Sobel 算子计算得到,具体的特征描述为:

其中:Ω(x)表示以像素点x为中心的邻域;|Ω|表示像素总数;∇I,L,S分别表示梯度,亮度以及饱和度分布(均需要归一化处理)。

为了求得图像深度估计模型的线性系数,从O-HAZY 和D-HAZY 数据集[31]中整理出大量图片,通过合成随机深度的1 000 幅有雾图像以及对应的无雾图像获得训练样本。在无雾图像中随机合成深度为0.5~1 的雾,合成的雾图需要设置大气光的向量值为A(k,k,k),其中大气光向量的三个维度分别代表RGB 空间中的三个分量,k的取值在0.8~1.0。设置好参数之后就得到1 000 张合成的有雾图像和对应的无雾图像。此外,通过合成的样本获取了所有其中有雾图像的局部亮度、饱和度、梯度等特征。部分无雾图像和对应合成的有雾图像如图4 所示。

图4 部分无雾图像和对应合成的有雾图像Fig.4 Parts of haze-free images and the corresponding synthetic hazy images

此外,获取了所有夜间有雾图像的亮度,饱和度以及梯度等特征,采用文献[32]里面的方法,这样图像深度模型表示为:

其中:i表示第i组训练样本,aT=[a1,a2,a3]T。

Xi=[L(xi),S(xi),G(xi)],第i组训练样本的有雾图像的深度图为di(x),通过线性表示的深度图模型为d(xi),根据1000 幅训练样本,利用最小化损失误差来求得线性系数和线性误差,表示法如下:

这样最小化损失误差E就可以表示为:

为了解决最小化损失函数的问题,我们将作以下的求导,令该求导值为0,可以得到:

其中,XTX为满秩的正则矩阵,这样可以求得a*为:

由于上述提到雾气浓度与图像的深度呈线性关系,说明雾气浓度和图像深度的变化趋势相似,所以我们可以近似地认为雾的浓度分布变化等价于图像的深度分布。这样图像的透射率与雾气浓度的关系表示为:

经过反复实验,所获得的最终线性系数的结果 为a1=1.026 7,a2=-0.626 5,a3=0.185 5,随机误差ζ=0.014 34,局部块大小取15×15时,得到的雾气浓度分布较为精准。与此同时,得到量化的雾气浓度估计图通常在深度变化较小的位置比较粗糙,在细节边界处会产生许多噪声。由于引导滤波具有非常优秀的保持边缘、减少噪声的能力,因此可利用引导滤波进行平滑处理。本节采用不同浓度雾的图像进行浓度估计,最终得到雾气浓度估计结果和对应的去雾结果如图5 所示。

图5 雾气浓度估计结果和去雾结果Fig.5 Results of haze density estimation and image dehazing

由雾气浓度分布图中可知,得到的结果对于处在不同深度的场景有明显的区分,大部分区域都处在浓雾场景中,较小区域则处在薄雾场景中。对比处理前后效果可得出,本文算法的恢复图像颜色看起来更加自然,对比度和可视度提升较大。另外,从雾气的浓度图来看,其内在的深度结构基本可以大体刻画出原图像的深度信息,原图像的细节之处能够明显地体现出来。

3.5 不同区域透射率的估计及图像恢复

对于天空区域和高亮区域,通常会有较多的白色区域,而较浓的雾的颜色接近于高亮,如果只是通过雾气浓度估计模型来获得透射率,得到的结果就会出现颜色失真、恢复不自然等情况。因此在本文的算法中,为了提高透射率的估计精度,需要单独对天空区域进行处理。

为了更好地处理天空区域的透射率估计问题,本文采用了亮通道先验[33]的方法,即在较亮区域内,某些像素在至少一个颜色通道内有较高的值并趋近于1,表达式为:

其中:Jc表示实际无雾图像的一个颜色通道,ω(x)表示以像素点位置x为中心的邻域图像块,Jbright表示实际无雾图像的亮通道。

公式(1)两边同时进行亮通道操作,可以得到粗略的透射率值为:

这样就可以得到天空区域的透射率的估计值。对于非天空区域,结合公式(2)可以求得非天空区域透射率的估计值tnon-sky(x)。

最后利用像素点的概率值将天空区域和非天空区域的透射率估计值进行线性叠加,就可以得到整幅图像的透射率,得到的表达式为:

其中,α(x)表示像素点x属于天空区域的概率值,为公式(7)的结果。

为了更好地得到去雾图像,需要利用引导滤波对透射率图进行优化,保持边缘并减少噪声。获得大气光和透射率的值后,利用大气散射模型得到图像复原表达式如下:

得到透射率和对应的去雾的结果如图6 所示,从透射率图中能够明显观察到图像中的细节之处,恢复后的图像细节非常清晰。

图6 有雾图像的透射率估计和去雾结果Fig.6 Results of hazy images transmission and dehazing

4 实验结果

为了验证所提出的去雾算法的有效性,本文从图像主观质量评价,客观质量评价以及算法运行时间三个方面对所提出的算法和其它的去雾算法进行比较。

本实验采用的软件和环境为:ASUS X556URK Inter Corei7-7500U 2.90 GHz,8 GB RAM,NVIDIA GEFORCE 930MX。经过对测试样本的训练,得到的数据如下:a1=1.026 7,a2=-0.626 5,a3=0.185 5,ζ= 0.014 34,局 部块大小取15×15。本节从Flickr 和Getty Image网站和D-HAZY[31]数据集选取了白天有雾测试图像运用现有的主流去雾算法进行去雾处理,将其结果和本文算法的恢复图像进行对比。

4.1 图像主观质量评价

本文将图像分成含天空区域和不含天空区域两类进行主观质量评价比较,所选择的算法有Zhu 等的颜色衰减先验算法[16]、He 等的暗通道先验 算 法[10]、Berman 等 的 非 局 部 先 验 算 法[17]、Cai等的端对端神经网络算法[20],结果如图7 和图8所示。

对于不含天空区域的有雾图像,去雾后的结果如图7 所示。从第二和第三幅图可以看出,Cai的算法无法彻底地去雾,尤其对于第三幅航拍图像,本文的方法与其它方法相比能够消除更多的雾。比较第一幅图右上角红楼处、第二幅图的娃娃头部以及第三幅图下方的白楼处,Berman 算法恢复的结果颜色出现失真的现象。He 算法、Zhu 的算法和本文算法对于不含天空区域的图像都具有良好的去雾效果。

图7 不含天空图像去雾算法比较Fig.7 Comparison of the dehazing methods without sky

图8 为含有不同颜色天空区域的图像去雾效果比较。Cai 算法在有天空的场景中同样保留了许多雾的成分。从图8(c)的第一和第二幅图、图8(d)第二和第三幅图中可以看出,He 算法和Berman 算法在天空区域的处理会出现明显的颜色失真现象,天空区域的恢复看起来不真实,特别是图8(c)的第二幅图产生了大量的光晕现象,本文算法相比于其它算法在天空区域的颜色恢复效果更真实自然。比较第三幅图的左下角的灰色楼房区域,Zhu 算法和Cai 的算法在该区域细节恢复不清晰。Zhu 在第四幅图黑色帽子周围产生了白色光晕。在第一和第四幅图的远处场景,本文算法去雾效果更好,能够更清楚地观察细节。总之,本文算法可以适用于不同类型的图像,在含有天空和不含有天空的有雾图像中不仅都能实现有效地去雾,而且可以完整复原图像各处的细节和颜色,更好地解决了天空区域的恢复问题。但本文的算法也存在着一定的缺点,例如,部分图像如第一和第四幅图像颜色恢复之后存在饱和度偏高的现象,这需要在之后的工作中进一步解决。另外,在雾气浓度估计模型中加入梯度因素可更清晰地体现出原图像模糊或者暗处的细节,通过适当的线性参数还能更好地平衡图像的整体亮度和颜色。

图8 含天空白天图像去雾算法比较Fig.8 Comparison of the dehazing methods with sky

4.2 图像客观质量评价

经过以上实验中图像主观质量评价比较后,为了更全面地验证去雾效果,本文采用图像盲评价和结构相似度方法,从图像细节、颜色、对比度以及结构信息等角度来衡量图像质量的好坏。

图像盲评价指标是Hautiere 等人[34]所提出的用于雾天复原图像质量的评价参数指标,利用原始有雾图像与恢复后的去雾图像的新可见边数比e、可见边梯度比r等评价图像的去雾效果。大多数情况下,e和r值越大,说明图像的边缘和细节增强越明显,进而增加了图像的清晰度,原始图像的复原效果越好。图像结构相似度(Structural Similarity Index Measurement,SSIM)方法可以用来度量图像的结构。峰值信噪比(Peak Signal-to-Noise Ratio,PSNR)方法是通过计算复原图像与参考标准图像的对应像素点全局差异大小来量化图像质量。PSNR 值越大,表明复原图像与参考标准图像之间的失真程度越小,图像恢复效果越好。Jobson 等人[35]提出了统计特征参数H,可用来测量色彩的恢复程度。通常情况下,SSIM 值越大表示图像结构越完整,H值越小就代表色彩保真度会越高。表1 利用图8 中的四幅有雾图像对比了其它去雾算法与本文算法去雾结果的评价参数e,r和H。表2 利用图9 中的四幅有雾图像和对应的无 雾图像获得参数PSNR 和SSIM。

图9 有雾图像和对应的无雾图像Fig.9 Hazy images and the corresponding ground truth images

从表1 参数e和r值的比较来看,本文算法的e值比其它算法更大一些,r值仅仅比Berman算法更低一些,说明本文算法在图像去雾,对比度和细节表现方面同样有着很高的水准,表现较为均衡。比较所有算法的H值,可以发现在第2 和第3 幅图中,本方法的H值更低,说明在含有非蓝色的天空的图像颜色恢复上普遍较好。但对于含有蓝色的天空的图像(第1 和第4幅图)H值更高,本文算法结果出现饱和度偏高的现象,这是因为所提出的算法是对整体的图像深度作估计,并没有局部进行优化,会导致在图像局部的透射率估计存在一些偏差,在以后的工作中我们会进一步改进优化方法。

表1 图像质量评价参数比较Tab.1 Comparison of the parameters of image quality assessment

通过对表2 中的数据进行分析,本文的算法的PSNR 值仅在第一幅图中接近并低于Berman 算法,第一和第二幅图的SSIM 值略小于Berman 算法,其它图像中均略高于另外几种算法。这说明本文算法表现出了高质量的去雾效果,图像的结构恢复更加完整,失真程度更小,对比度增强明显,细节清晰,颜色自然。总之,本文的算法可以适用于不同类型的图像,不仅可以有效处理含有薄雾或较浓的雾的图像,还能复原含有天空和不含有天空的图像。利用本文方法最终可以获得去雾效果明显,高质量的复原图像。

表2 PSNR 和SSIM 参数比较Tab.2 Comparison of PSNR and SSIM values

4.3 算法运行时间比较

为了验证算法的运行速率,本节选取了图8所示的四幅测试图像进行算法的运行时间比较。每一幅图像的大小和每个算法测试时间如表3 所示。从运行时间结果中不难看出,本文算法的运行速度仅次于Zhu 算法,相比于另外三种算法运行耗时更少。这说明本文所提出的算法的运行速率与其它主流算法相当,可以推测本文算法在经过算法优化或是经硬件加速后可以满足实时性的要求。在未来的研究工作中,我们将进一步验证算法的实时性。

表3 图像去雾算法运行时间比较Tab.3 Comparison of running time of image dehazing algorithms

5 结 论

本文针对图像去雾中存在的天空区域图像恢复失效的问题,提出了图像天空区域分割的方法,并分别进行天空区域和非天空区域的透射率估计。针对雾气浓度估计精度不足的问题,提出了线性雾气浓度估计模型解决了在非天空区域的透射率估计问题。实验结果表明,本文算法在天空区域图像恢复效果良好,去雾彻底且不存在颜色失真现象,非天空区域去雾效果表现良好,图像细节体现更加清晰,整体图像复原比较理想。虽然本文算法的运行速度仅次于Zhu算法,但从图像的去雾恢复效果来看,本文算法的图像恢复质量比Zhu 方法更高。另外,本文算法相比于另外三种算法运行耗时更少,从图像质量评价指标上来看,本文算法在不同场景下的去雾稳定性优于其它算法。综上所述,本文所提出的算法运行速率快,去雾效果明显,适用于图像去雾领域。

猜你喜欢

透射率雾气像素点
雾气一样的摆渡船
雾气一样的摆渡船
噪声对相干衍射成像重构物体图像的影响
基于局部相似性的特征匹配筛选算法
山中雾气
水天月
基于像素点筛选的舰船湍流尾迹检测算法
纯色太阳镜镜片耐日光辐照性能试验研究
基于canvas的前端数据加密
图像去雾中的大气光强度自适应恢复算法研究