基于自适应大气光校正的图像去雾方法
2019-04-01全雪峰
全 雪 峰
(南阳医学高等专科学校卫生管理系 河南 南阳 473061)
0 引 言
雾霾天气下拍摄的户外图像模糊不清,直接影响图像在视频监控、目标识别、智能交通等方面的应用,因此雾霾图像清晰化处理至关重要。
目前主流的图像去雾技术可以分为两大类:一类是基于图像增强的方法,另一类是基于物理模型的方法[1]。前者包括直方图均衡化[2]和Retinex算法[3],这类方法通过提高有雾图像的对比度或突出图像特征来实现图像清晰化,但是容易造成图像细节丢失;后者通过研究大气悬浮颗粒对光的散射作用,建立雾天图像的物理模型[4],进一步反演恢复出清晰图像。基于同一场景下有雾图像的对比度比无雾图像的对比度低这一先验知识,Tan[5]提出最大化有雾图像的局部对比度来实现去雾目的,但是存在去雾图像颜色失真问题。Kim等[6]通过最小化代价函数来提高图像对比度,但存在去雾后图像的细节信息丢失等问题。Fattal[7]假设入射光强度与物体表面反射特性不相关,计算透射率并求出去雾图像, 但对浓雾图像去雾效果不佳。Tarel等[8]利用中值滤波估计大气散射函数实现图像去雾,其去雾效果一般。He等[9]提出暗通道先验算法并获得了良好的去雾效果,但不适于天空区域,而且由
于使用了软抠图致使算法处理速度较慢,不适合实时处理。导向滤波算法[10]虽然解决了软抠图实时性能不好的问题,但是恢复图像仍然存在光晕。针对暗通道先验算法的不足,人们提出了一些改进算法[11-14],并取得了一定的效果。
本文针对暗通道先验算法存在的问题,提出了一种自适应大气光校正方法,以避免由于大气光值不准而造成估计的透射率偏差大,导致去雾图像出现光晕等;提出了一种针对天空等明亮区域的透射率自适应补偿方法,使这些区域的色彩失真得以校正。本文提出的算法不需要进行透射率细化。实验结果表明,本文算法可以有效避免光晕和颜色失真等问题,而且处理速度较快。
1 暗通道先验去雾算法
1.1 大气散射模型
在计算机视觉和图像处理领域,常用下式来描述雾天图像:
I(x)=J(x)t(x)+A(1-t(x))
(1)
式中:x为图像像素;A为全球大气光强度;I表示采集的雾天图像强度;J表示场景辐射,即去除雾干扰后的清晰图像强度;t是介质传输透射率,在大气均匀情况下,t(x)=e-βd(x),这里的β为大气散射系数,d(x)为场景深度。式(1)表明,在RGB颜色空间若能事先估计出A和t,代入式(1)便可复原出无雾图像J。
1.2 暗通道先验去雾基础
He等[9]通过对大量户外无雾图像观察统计,发现在大多数图像里,对于非天空区域来说,某些像素至少一个颜色通道其强度非常低,接近于0。基于这一发现,He等提出暗通道概念。对于任意图像J,其暗通道Jdark由下式给出:
(2)
式中:Ω(x)表示以像素x为中心的一个局部区域 (通常取7×7或15×15的方形矩阵);Jc表示图像J的一个颜色通道。如果J为户外无雾图像,在天空以外的区域,J的暗通道Jdark的值很小,趋近于0。
假设Ac为大气光A在c通道的值,局部区域Ω(x)内透射率t(x)不变,式(1)可变形为:
(3)
对式(3)两边进行两次最小运算,可得:
(4)
将式(2)代入式(4),并由Jdark(x) → 0,可得:
(5)
为了使去雾后的图像更符合人眼视觉效果,在式(5)中引入参数ω(0≤ω≤1,通常取0.95),得到:
(6)
将式(6)代入式(1),得到:
(7)
为防止分母为0,在式(7)中引入常数t0(t0为很小的常数,通常取0.1),最终的图像恢复公式如下:
(8)
2 算法设计
本文对暗通道先验去雾算法进行以下四个方面的改进:(1) 利用四叉树算法搜索浓雾区域求取大气光并进行自适应校正;(2) 利用均值滤波代替最小值滤波求取暗通道;(3) 对估计的透射率不再进行细化,而是直接用于图像恢复;(4) 对去雾图像的亮度进行调节,以提高输出图像的视觉效果。本文算法流程如图1所示。
图1 本文算法流程
2.1 估计大气光值
2.1.1 初步估计大气光
由式(1)可知,大气光A在图像去雾过程起着举足重要的作用。He等[9]选取暗通道图中前0.1%的亮度最大的像素,将这些像素对应有雾图像中像素的最大值作为大气光值。大气光应是雾浓度最大的地方,但是最亮点有时并不是雾浓度最大的地方,而可能是场景中的白色汽车等高亮物体,此时仍然选取全局亮度最大值作为大气光值显然错误。为了准确估计大气光,基于图像中天空区域的像素值方差较小,本文采用四叉树搜索法[6]来初步估计大气光,方法如下:将原图像划分为4个大小相同的矩形区域,记每一区域像素的均值与标准差之差为Score[i] (i=1,2,3,4),选取Score[i]值最高的区域继续划分为4个更小的区域,再次计算Score[i],如此迭代进行,直到选取区域满足预先设定的阈值,以最后选取区域的最亮点作为大气光的初步估计值。具体选择过程如图2所示,图中黑色方块区域为最终选取的区域,设定的阈值为长×宽=200像素。
图2 四叉树搜索算法选择图像块过程
2.1.2 自适应大气光校正
测试发现,对于一些天空区域较小的图像,采用文献[6]的四叉树搜索法求得的大气光值往往偏低,造成最终去雾能力下降。为解决这一问题,本文提出如下自适应大气光校正方法。
以最后选定区域的最亮点作为初步估计的大气光A0的值,利用下式对A0值进行校正。
A=(1+max(0,log(vw))>A0
(9)
式中:w=7+9e-20v,称参数v为自适应大气光校正因子,表示输入图像中非天空或景深突变区域的大小。这里采用max的目的是设定一个校正阈值0,当log(vw)>0时,给大气光A适量的增加,而当log(vw)<0时,不进行校正,从而避免了A值不增反降。测试发现,绝大多数图像中v≤0.85的区域属于非天空或景深突变区域,故本文取v=0.85,这样即可自动确定w的值,并最终得到校正后的大气光值A。v和w间的关系如图3所示。
图3 v和w间的关系曲线图
对图4(a)所示有雾图像分别采用文献[9]方法、文献[6]方法和本文方法求取大气光,所得大气光值如表1所示,去雾效果如图4(b)-(d)所示。
图4 不同方法求取大气光后的去雾效果
文献[9]方法文献[6]方法本文方法(v=0.83)A(255,248,245)(181,186,185)(212,218,217)
由表1可以看出,由文献[9]方法所得大气光值偏高,由文献[6]方法所得大气光值偏低,本文方法对四叉树搜索法所得大气光值进行了较好的校正。比较图4(b)-(d)可以发现,利用本文提出的大气光自适应校正方法求得的大气光恢复的图像去雾效果较好。
2.2 透射率估计
2.2.1 暗通道均值
He等[9]在求取暗通道过程中使用了最小值滤波。本文利用均值滤波代替最小值滤波对暗通道先验公式修订如下[14]:
(10)
式中:称JdarkM(x)为暗通道均值。
分别利用He[9]的方法和本文方法对图5(a)求取暗通道如图5(b)和图5(c)所示。比较图5(b)和图5(c)可以看出,由最小值滤波得到的暗通道颜色呈块状分布,计算透射率时容易产生较大的误差,由均值滤波得到的暗通道图更为平滑,而且保持了图像原有的细节。
图5 不同算法所得暗通道
2.2.2 透射率估计
对式(3)先进行最小运算,再进行均值滤波,即:
(11)
应用第1节讨论的大气散射物理模型和暗通道先验模型,由式(6)可知,基于上述暗通道均值的透射率描述如下:
(12)
式中:ω(0≤ω≤1)为常数,本文取ω值为0.95。
对图5(a)所示图像分别采用引导滤波[10]和本文算法估计透射率,所得结果如图6所示。图中:(a)为引导滤波细化后的透射率;(b)为本文算法未细化的透射率;(c)为对应图6(b)中黑色方框区域放大图;(d)为本文算法用引导滤波细化后的透射率;(e)为对应图6(d)中黑色方框区域放大图;(f)为对应图6(a)为去雾图;(g)为对应图6(b)的去雾图;(h)为对应图6(g)黑色方框区域放大图;(i)为对应图6(d)的去雾图;(j)为对应图6(i)黑色方框区域放大图。
图6 不同方法所得透射率和去雾效果
对比图6(a)和图6(b)可以看出,本文算法得到的透射率更加精确,这也可以从相应的去雾图像图6(f)和图6(g)得到验证。此外,对比图6(b)和图6(d),以及图6(g)和图6(i)可以看出,由本文算法得到的透射率无需进行细化操作,如果采用引导滤波对透射率进行细化,去雾效果反而不好,这可从图6(c)和图6(e),以及对应的去雾图像图6(h)和图6(j)到验证。本文算法得到的透射率无需细化的原因是,由本文算法得到的大气光更精确,因而由式(12)求得的透射率也更精确,此时若再用引导滤波进行细化,由于引导滤波在保留图像细节的同时,也保留了不必要的图像纹理细节[11],这样反而降低了图像去雾效果。
2.3 天空等明亮区域的透射率自适应补偿
补偿后的透射率t(x)可表示为:
t(x)=tM(x)+Δt(x)
(13)
式中:Δt(x)表示补偿函数,其定义为:
Δt(x)=e-ktM(x)
(14)
其中,参数k=7+9e-20u,u为透射率补偿因子,表示有雾图像中天空或雪地等明亮区域的大小。根据前述自适应大气光校正因子ν的含义可知,u与v的关系为u=1-v。
对式(14)求导,得到该凹函数的最小值点在平面tM-t的坐标(tp,tmin),即:
(15)
显然,天空区域的景深为整个图像的最远处,该区域的透射率是整个透射率图中的最小值[11]。因此,对补偿后的透射率t(x)设置一个下限tmin,得到最终补偿后的透射率:
(16)
图7给出了u取不同值时透射率的补偿情况。由图7可以看出,通过本文提出的自适应透射率补偿方法,对于天空区域这种透射率较小的地方,其透射率得到了较多的补偿;对于透射率较大的地方,给予的补偿较小。通过调整u值,进而调整k值,可以使补偿曲线接近预期。
图7 不同k值补偿前后的透射率tM和t间的关系曲线图
2.4 恢复去雾场景
得到透射率t(x)和大气光A之后,将其代入式(1)就可恢复无雾图像。为防止分母为0,本文借鉴文献[9]的处理方法,为透射率设定一个下限值t0,取值为0.1,最终复原图像表达式为:
(17)
2.5 图像亮度调整
在雾天采集的图像,由于受大气光的作用,图像整体偏白,通过上述步骤得到的无雾图像整体偏暗。为提高图像的视觉效果,本文采用下面的调整函数来调整图像亮度,同时修正色偏。
(18)
式中:L0(x)和L(x)分别表示调整前后图像;α为调整因子,值越大图像亮度越高,本文取α=4。
3 实验结果与分析
为检验本文算法的有效性,本文对大量室外图像进行了测试,测试图像来源于互联网或所附文献,所使用的硬件平台为:2.50 GHz AMD Sempron (tm) X2 190 CPU,8 GB内存;软件平台为:Qt5.9,Opencv3.4,Windows 7 64位系统。
3.1 不同参数值对去雾效果的影响
图8所示为不同参数对去雾效果的影响。由图8可以看出,不同的u值、ν值对去雾效果有较大影响。通常对于包含天空的图像或存在景深突变的图像,一般设置μ值为0.10 ~ 0.15去雾效果最佳,过大的u值可能出现色偏或光晕;对于不包含天空或仅包含很小部分天空的图像,一般设置u值为0.15 ~ 0.20即可。
图8 不同参数对去雾效果的影响
3.2 去雾视觉效果对比
下面从视觉感受上比较引导滤波算法[10]、Kim算法[6]和本文算法的去雾效果。图9-图12给出了比较典型的室外有雾图像的去雾效果。
图9 不同算法去雾效果比较
图10 不同算法去雾效果比较
图11 不同算法去雾效果比较
图12 不同算法去雾效果比较
从图9这种含有较大面积天空区域图像的去雾效果可以看出,引导滤波算法在图像的天空区域出现较严重的色彩失真和光晕,这是由于引导滤波算法对天空区域的透射率估计过小,通过式(8)还原无雾图像时,因为分母很小,扩大了RGB三通道之间原有的差异,从而产生色彩失真和光晕。Kim算法和本文算法的去雾效果明显优于引导滤波方法。从细节上讲,本文算法的去雾效果又优于Kim的去雾效果,如图9(c)白色方框区域仍有薄薄的一层残雾。这是因为本文算法分别对大气光和天空部分的透射率进行了一定程度的增强,所以基本不会出现引导滤波算法和Kim算法存在的现象。
从图10这种普通有雾图像的去雾结果看,三种算法均取得了较好的去雾效果,但从色彩丰富度上看,本文算法和Kim算法要优于引导滤波算法。
从图11这种存在景深突变图像的去雾效果看,引导滤波和Kim算法在景深突变的边缘均存在光晕,引导滤波算法尤其明显,而本文算法能保持比较清晰的景深边缘,不存在任何光晕。
从图12这种含有远景区域图像的去雾效果看,引导滤波算法恢复的图像比Kim算法和本文算法效果较好。这是因为远景部分的像素值一般跟大气光接近,具有较大的通道最小值[15],利用本文算法去雾时,该区域的透射率将得到一定量的提升,高于真实的透射率,从而导致对该区域的去雾能力降低。但从近景 (如图12(b)和图12(c)中白色方框区域) 看,引导滤波方法和Kim算法恢复的图像均存在一部分残雾,而本文算法不存在残雾,图像清晰。
3.3 去雾效果的客观评价
下面分别从色调保真度、新增可见边之比、平均梯度比以及基于视觉感知的CNC综合评价体系等方面对不同算法的去雾效果进行客观比较。
图像的色调保真度[16]是一种基于图像统计特征的度量参数,定义为:
(19)
式中:abs(·)表示对所有元素取绝对值;mean(·)表示对所有元素取均值;Hin(x)和Hout(x)分别表示输入、输出图像在HSV空间的色调分量。一般来说,H值越小,图像的色调保真度越高。
(20)
(21)
基于视觉感知的CNC (Contrast-Naturalness-Colorfulness) 综合评价体系是郭璠等[18]提出的一种图像质量评价体系。该评价体系以人眼视觉感知特性为依据,从对比度、色彩丰富度和色彩自然度3个方面综合评价去雾图像的质量。CNC评价体系的总体框架如图13所示,其中x表示有雾图像,y表示去雾图像。
图13 CNC评价体系总体框架
CNC评价体系利用x与y的可见边求出图像的对比度增强指标e′,并分别计算去雾图像y的色彩丰富度指标CCI(Color Colorfulness Index)和色彩自然度指标CNI(Color Natural Index),最后运用这三个指标构造一个综合评价函数,并用该函数对去雾结果进行客观、定量评定。CNC综合评价函数为:
(22)
表2给出了图9-图12所示4幅图像在不同去雾算法下各指标值的大小。
表2 不同算法去雾效果客观比较
由表2可以看出,在色调保真度方面,本文算法对“娃娃”图像的处理低于引导滤波算法,稍次于Kim算法;在新增可见边之比和平均梯度比方面,本文算法对“城市”图像的处理次于引导滤波算法,但本文算法的平均梯度比高于Kim算法,而且相比于原有雾图像仍有较大改善;在CNC综合评价方面,本文算法对“城市”图像的处理效果介于引导滤波算法和Kim算法之间,对其他图像则均优于这两种算法;在处理时间上,相对于引导滤波算法本文算法并未引入明显的时间开销,且相比于Kim算法有较大减少。总的来说,本文算法在提高图像清晰度的同时也具有较快的处理速度。
4 结 语
本文提出了一种基于暗通道先验去雾的新的改进方法。本文利用提出的自适应校正大气光方法对由四叉树搜索法得到的大气光进行校正,得到了更为准确的大气光;利用均值滤波代替最小值滤波得到一种更为平滑的暗通道。基于本文方法估计的透射率无需进一步细化。针对暗通道先验不适用于天空等明亮区域问题,本文提出一种无需天空分割的自适应透射率补偿方法,有效改善了天空区域的颜色失真。实验结果表明,相比于传统的去雾算法,本文算法恢复出来的图像细节突出,具有更好的视觉效果。本文算法的局限是对于少数一些含有远景区域的有雾图像,对远景区域的去雾能力稍弱。接下来的工作是进一步改进算法,以更加有效和快速地处理雾霾对图像的影响。