天空识别的改进暗通道先验单幅图像去雾算法研究
2019-01-24谭龙江
谭 龙 江
(华侨大学 经济与金融学院,福建 泉州 362021)
1 引 言
雾霾是由悬浮在大气中的水滴、气溶胶、尘埃等颗粒对入射光散射和吸收产生的现象.近年来随着环境污染的加重,雾霾现象更加频繁,在雾霾天气拍摄图像会出现对比度低,饱和度下降,颜色失真等降质问题,严重影响了室外机器视觉监控系统效用的发挥[1].因此,快速有效的去雾算法具有重要意义.
早期的去雾算法主要依赖场景的深度信息或多角度的观察信息.如Zhao等人[2]利用场景的3D模型及深度信息来实现去雾,具有较好的去雾结果.Qu等人[3]发现大气颗粒对光的散射具有部分偏振的特性,采用偏振器采集不同角度的图像用于去雾.然而这些算法均需要大量附加信息,极大地限制了去雾算法的应用.
相比而言,单幅图像去雾算法具有更广泛的应用,然而随着雾,霾,烟现象的加重,较少的场景信息能够被获得,使得高精度的单幅图像去雾算法极具挑战性.如Fattal等人[4]利用数学模型来描述目标的表面阴影和场景的透射率实现去雾,该模型仅考虑了图像的颜色和局部信息,无法应用于浓雾情况.Berman等人[5]通过大量统计发现,清晰无雾的户外图像中一般仅含几百种不同的颜色,且同种颜色的像素点无论距离镜头远近,其像素值在RGB空间均呈簇状分布.相反,在雾天降质图像中,因受雾气散射影响,相同像素点的灰度则呈线状分布.利用该非局部先验,算法能快速对颜色相近的像素进行聚类,有效实现去雾.然而算法仅利用颜色信息来获取非局部先验,对于浓雾和天空区域不能有效处理.另一方面,Tan等人[6]发现雾天降质图像的对比度要低于清晰图像对比度,可通过将雾天图像的局部对比度最大化来进行去雾,但导致图像色调过于饱和而结果失真.
He等人[7]利用暗通道先验理论估计场景透射图,再用软抠图技术处理边缘细节,能获得较好的去雾结果,但运行时间较长,且算法不适应用于天空区域.
受上述算法的启发,我们发现天空区域对透射图和大气光的准确估计影响很大,考虑天空区域的信息影响,将有效改进去雾结果.为此,本算法针对暗通道先验算法无法有效处理天空区域的问题,提出了识别天空区域的去雾算法.首先采用通过分析大气光在RGB颜色空间的分布特性,利用差分函数和暗通道信息相结合的方式来估计大气光,避免了天空区域中高亮像素引起大气光值较大的问题;随后,针对暗通道先验无法正确估计天空区域的缺陷,改进暗通道先验算法,使其能针对天空及非天空区域分别准确估计透射图,并在此基础上采用自适应中值滤波和双边滤波来联合优化透射图;最后,利用大气散射模型估计无雾的清晰图像.
2 基本思路
在He等人[7]的工作基础上,提出了一种天空识别的改进暗通道先验单幅图像去雾算法.该算法首先通过变差函数,对大气光图值进行合理的估计,避免图像中高亮像素的影响;其次改进暗通道先验无法适用于天空区域的局限性,对天空区域和非天空区域分别估计透射率,并用自适应中值滤波和双边滤波对其进行快速优化,使去雾结果更加精确.
图1为算法流程图.以单幅有雾图像为输入,主要包含大气光图估计、透射率估计、去雾图像恢复三个部分.
图1 算法流程图Fig.1 Algorithm flow chart
各步骤的概要说明如下:
1)变差函数的大气光图估计.在大气光图估计阶段,考虑到使用天空或白色景物中高亮像素估计大气光,会使大气光的强度值偏大,故利用变差函数对暗通道先验算法选取的候选像素进行逐一的判断,识别出天空区域的非高亮像素来精确估计大气光.
2)透射率的估计和优化.充分考虑暗通道先验理论不适用于天空区域的特性,提出了识别天空区域的改进暗通道先验原理,使其能对天空及非天空区域分别估计透射率.最后,为了快速的消除透射光率的区块效应,利用自适应中值滤波和双边滤波来联合优化透射率,提高去雾质量.
3)去雾图像恢复.利用本算法估计的大气光和透射率进行图像去雾.
3 天空识别的改进暗通道先验单幅图像去雾
3.1 大气散射模型
根据大气散射规律和光学反射成像,一幅有雾图像的大气散射模型为:
I(x)=J(x)t(x)+A(1-t(x))
(1)
其中,I(x)是观测图像,J(x)是待估计的清晰图像,A是整幅图像的大气光强度,t(x)是光线通过介质的透射率.图像去雾的最终目的就是利用该模型在已知I(x)的基础上,恢复出J(x),A和t(x),由于未知量个数大于方程个数,该问题为病态问题,需要利用已有的先验知识来解决.
3.2 基于变差方程的大气光图值估计
统计分析表明,大气光图A的值与天空中浓雾区域的像素值最为接近,准确识别该区域是估计大气光的重要前提.目前存在的单幅图像去雾算法大多利用图像中高亮像素点作为天空区域的近似值,估计大气光图.例如,Tan等人[6]使用雾天图像中最亮的像素点值来估计大气光图.He等人[7]根据暗通道先验,选取暗通道图像中亮度最大的前0.1%像素来估计大气光图.然而在实际应用中,最亮的像素点可能存在于白色景物中,即便存在于天空区域,仅利用天空区域中最亮点来估计,也会使得大气光图RGB值偏大,导致失真.为了减少高亮像素对大气光估计的影响,本文在He等人[7]方法的基础上,提出了一种基于变差方程的大气光图估计算法.
实验表明,降质图像中浓雾天空区域的像素值主要分布在RGB立方体的对角线上,如图2中黑色实心像素点所示.因此对于初始的雾天降质图像I(x),我们可提出一个变差函数f(x)来搜索分布在对角线上的点:
(2)
图2 RGB彩色空间(黑色实心像素位于天空区域, 白色空心像素为白色景物)Fig.2 RGB color space.(Black solid pixels are located in sky areas,and white hollw pixels are located deep within the scene)
由公式(2)可知,f(x)的值在天空中的高亮区域最小,在非天空区域较大,利用该特性可以摒弃高亮像素.此外,白色景物随着景深的增加,颜色会变得暗淡模糊,且在浓雾的影响下该现象更加明显,正如图2中白色空心像素点所示,白色物体随深度增加,不稳定的灰度值在对角线上下方波动.为了去除这类高亮像素信息的干扰,强化f(x)的对比度,我们在公式f(x)添加比例系数k,如公式(3)所示:
(3)
式中,比例系数k默认设置17.同时,我们选取一个合适的阈值来选择合适的区域对大气光图估计.假设阈值Δ,如果f(x)≤Δ,就认为该像素点来自于天空或白色物体中的高亮区域,进而舍弃该点.如果f(x)>Δ,则保留该点来估算大气光图的值,本文默认Δ=36.随后求取筛选像素点的暗通道值,用暗通道中亮度最大的前0.1%的像素点来搜索图像亮度最大点,用它来估计大气光图的值.
上述方法不但有效的避免了天空和白色物体中高亮像素信息的干扰,即便对于f(x)较小的灰色物体或天空区域,也会因为结合了暗通道信息,而摈弃了这类亮度较小的干扰像素,确保了大气光图值估计的合理性.
3.3 透射率估计
3.3.1 天空识别的暗通道先验透射率估计
根据3.2小节估计出的大气光图A的全局常量值,可将公式(1)的大气散射模型变换为:
(4)
式中,c∈{r,g,b}.
假设在以x为中心的一个局部邻域Ω(x)内透射率是常量,并将其表示为T(x),则公式(4)两边都取两次最小操作,得到公式(5):
1-T(x)
(5)
He等人[6]通过对户外大量无雾图像观察和统计特性研究发现了暗通道统计规律,即无雾图像的大部分非天空局部区域中,至少存在一个颜色通道有着较低的像素灰度值,且该值趋近于零.相关的暗通道定义为:
(6)
结合暗通道先验理论,透射率T(x)的估计表达式为:
(7)
为了保留保留一部分残雾,使图像具有景深感,引入了常量参数w(0 (8) 式中,默认w=0.95. 然而在无雾图像的天空区域中,公式(6)并不趋近于零,因此用公式(6)估计的透射率T(x)并不准确,为此提出了识别天空区域的暗通道先验透射光率T(x)方法,由公式(5)可知,T(x)估计可表示为: (9) 假设图像中的坐标点(u,v)对应着有雾图像I(x)中暗通道像素的最亮点,可用Imax来表示: (10) 再假设坐标(b,d)对应有雾图像I(x)中暗通道的最暗点,用Imin来表示: (11) (12) 3.3.2 透射率的快速优化 如果使用本文估计出的大气光图A的值和改进暗通道先验估计的透射率T(x),直接在大气散射模型下恢复去雾图像,会在处理梯度较大的景深边缘时,出现明显的块效应,这是由于透射光率的估计是在假设其在局部区域Ω(x)内为常量而造成的.Levin[8]和He[7]分别使用软抠图及引导滤波算法对估计透射率进一步优化,在一定程度上改善了这一现象.虽然软抠图效果较好,但时间和计算复杂度都较高,且占用了大量内存.相比较而言,引导滤波算法处理速度更快,但细化效果又略差,尤其是在梯度较大的景深边缘还会残留雾化效果.同时考虑到公式(12)中,利用邻域中的极值来估计透射率,其结果易受局部高亮或低亮像素值的影响.为此,这里选用自适应中值滤波及双边滤波联合的方式优化透射率T. 为了使优化后的透射率T在局部区域的取值更合理,设计了一种能保留图像边界中部分亮度值的自适应中值滤波.其工作原理如图3所示. 图3 自适应中值滤波流程Fig.3 Process of adaptive median filter 其中,初始邻域窗口尺寸S为3,并以奇数增大;Smax是设定的最大窗口尺寸,默认取初始图像大小的1%;Tx是透射率图T中x点的像素值,Tmin,Tmed,Tmax分别为以x为中心的邻域中灰度最小值、中值、最大值.通过对透射率T的自适应中值滤波处理后,它能去除亮度均匀区域中突现的局部极亮点和局部极暗点,同时较传统中值滤波具有更好的保边性.处理后所得透射率T1可以看做是初始T的局部均值,这样初始T的细节高频部分不可避免地就被模糊化了,尽管较传统的中值滤波所产生的细节模糊化更轻[9],但是这种轻微的模糊也同样需要进行处理,否则会导致细节部分在去雾后会更加模糊.双边滤波正好能够有效地处理自适应中值滤波产生的细节模糊化,从而使估计得到的透射率更准确.双边滤波处理的公式为: (13) 其中,T2为双边滤波优化T1后的结果.T1(x)和T1(y)代表示自适应中值滤波处理后T1中像素点x的灰度值,及以x为中心的邻域窗口中像素y的灰度值,其中,Wx是归一化系数,定义为: (14) Gσd和Gσr分别是静态空域D和动态值域R上以σd和σr为标准差的高斯核.‖·‖表示欧式距离.因此,双边滤波考虑灰度信息的同时还兼顾了像素点的空间关系,即平滑了透射率,又确保了边缘清晰[10].为了提高运算速度,双边滤波还可采用文献[11,12]中的快速双边滤波方法.该策略与软抠图方法相比,获得的传输率结果更精细.大量实验表明,公式(13)中的窗口大小取自适应中值滤波大小S的两倍,σd取10,σr取0.1. 在得到全局大气光图A的值和透射率T2后,可以估计出清晰的无雾图像J(x): (15) 由于天空区域的像素值与大气光图值A接近,当恢复天空区域时透射率T(x)趋近于0,这会导致恢复的去雾结果中包含一定的噪声.因此,我们设置一个限制t0来优化透射率T(x),在本文中默认设t0=0.1. 本文所提算法在2.2GHz CPU,8G内存的计算机,Matlab 2015b的环境下运行.并从网上公共的图像数据库及项目组拍摄的城市雾天图像中选择了300幅图像的图像集进行测试,其中包含大量天空背景,少量天空背景及不含天空背景的图像.对比算法选取了Tan[6]提出的单幅图像去雾算法,Berman[5]提出的非局部先验去雾算法,及He[7]提出的暗通道先验算法.实验表明对于含有大量天空背景的图像,本文算法中,阈值Δ为36,w值为0.9.而对于少量及不含天空区域的图像,阈值Δ变为100,w值设为0.8. 图4为各算法对图4(a)的三幅测试图去雾后的结果,从图4(b)中可见,本文算法因考虑天空区域对透射率和大气光的影响,去雾的结果最优,复原结果中景物的颜色最接近真实图像,且天空及浓雾区域也能较好处理.图4(c)He算法的复原结果对于前景物体处理效果较好,但无法有效处理远处浓雾区域,如第一幅图中远处草垛仍受雾气干扰,清晰度不高,玩偶图像无法恢复背景的浓雾区域,城区图像中同样可发觉,He算法的结果天空区域出现光晕,明显失真.图4(d)Tan算法因利用局部信息估计透射率导致透射率不连续,去雾结果过饱和,存在白色噪声,如第一幅图中草垛上箭头所示的白色干扰,玩偶图像背景中白色的浓雾区域.图4(e)Berman算法因采用颜色信息来获得非局部先验,去雾后的结果对比度较强,但对于远处天空及浓雾区域效果仍有偏差,如城区图像去雾后天空区域出现明显的阴影和光晕. 图4 不同算法的去雾结果Fig.4 Dehazing results of different algorithms 为了客观地评价各算法的去雾质量,采用信噪比PSNR和平均梯度AG指标进行量化评估.PSNR测量了雾天图像与去雾图像间的差异,其值越大,则失真越少,去雾质量越高.PSNR的定义如下: (16) 式中,d为图像的深度,本文默认为8. (17) AG指标反映了细节对比度,它被用来评估图像的清晰度.高的AG值对应了更清晰的图像.图像的AG定义如下: (18) 为了测试算法的鲁棒性,对300幅雾天图像的图像集进行去雾处理,分别测得各算法的量化指标值.从表1可见,本文算法在三张测试图和图像集中的AG和PSNR值都最高.例如在表1测试图1中分别为0.048和48.1,而He的算法次之.去雾准确度至少分别提高了5.1%和4.7%. 表1 不同算法的AG,PSNR值对比 图像本文算法He算法Tan算法Berman算法AGPSNRAGPSNRAGPSNRAGPSNR测试图10.04848.10.04646.90.04244.20.03642.8测试图20.03436.80.02932.60.02834.80.02728.7测试图30.03928.80.03322.40.03426.40.02820.2图像集 0.04138.10.03936.40.03634.20.03431.7 此外,本文算法平均运行时间由大气光值估计,透射光率估计及物理散射模型去雾组成,每个步骤仅涉及简单邻域最大,最小或平滑操作,故运行时间较短,300幅图像测试表明平均运行时间为1.7秒,而He算法在透射图的软抠图操作,耗时较多,运行时间约为42秒,Berman采用k-d树对颜色线进行分类再提取非局部先验信息,耗时较长,运行时间约为23秒.Tan算法运行时间约为2.4秒.故本文算法较存在算法其运行时间至少提高了29%,能有效用于室外视觉监控系统. 常用的单幅图像去雾算法没有考虑天空区域对大气光和透射图的影响,去雾并不准确.本文提出了识别天空区域的改进暗通道先验的去雾算法.算法首先利用差分函数区分天空区域,再结合暗通道信息估计大气光.随后使用改进后的暗通道先验算法分别估计天空区域及非天空区域的透射率,快速恢复去雾图像.通过对300幅雾天图像集测试表明,本算法不但能保留场景的细节信息,对天空区域及非天空区域均能准确去雾,运行时间仅为1.7秒,同等条件下较其他常用算法提高了至少29%,能用于户外视觉监控系统中.3.4 无雾图像的恢复
4 实验结果与分析
4.1 实验结果
4.2 不同算法去雾质量的量化评估
Table 1 Comparison ofAG,PSNRof different algorithms5 结 论