王 硕,陈金玉
重庆大学 自动化学院,重庆400044
在雾或雾霾天气条件下,从户外获得的图像变得模糊,图像中场景信息的丢失会降低计算机视觉系统处理的效果,通过去雾处理来提高图像的视觉效果以及突出图像的特征信息变得越来越重要。
目前图像去雾算法主要分为两大类:一类是基于图像增强的去雾算法,对常用的图像增强算法进行针对性的运用和改良,增强图像的对比度,突出图像中景物的特征和有价值的信息[1-2],如基于Retinex 的方法[3]、基于直方图均衡化的方法[1-2]等。另一类是基于物理模型的图像复原去雾算法,从降质图像的形成机理出发,建立大气散射模型,通过一定的先验信息反向推出复原图像[1-2],这类算法针对性强,复原效果自然。近年来,在基于物理模型的去雾方法中,出现了不少基于机器学习和深度学习的去雾算法[4-5],但是该类算法需要大量的有雾图像数据进行训练,而且去雾效果依赖训练图像数据的质量,存在较大的不确定性。
基于物理模型的去雾算法依赖一定的先验知识,如Fattal等人[6]假设透射率和物体表面着色局部不相关,以此来估算场景反照率以及介质透射率,但对于浓雾区域,该算法失效;Tan等人[7]以最大化局部对比度为约束条件复原图像,复原后的图像易出现颜色过饱和现象和光晕;Kim 等人[8]通过建立一个包括衡量对比度和信息损失的代价函数,来估算最佳的场景透射率,对天空区域免疫,但是复原结果中易出现亮度不均;Berman 等人[9]以颜色线为先验条件,利用这些颜色线估算全局的透射率,复原结果中易出现局部过饱和等现象。He 等人[10]提出暗通道先验的假设,通过求取图像的暗通道,进而估算场景透射率,对户外图像取得了良好的去雾效果。但是当图像中存在天空等明亮区域时,暗通道先验的假设不再成立,导致复原图像容易产生色彩失真或伪影的现象。针对暗通道先验算法在天空区域易失效的问题,后续出现了许多改进算法。Li等[11]提出了暗通道置信度的概念,用以校正不满足暗通道先验区域的透射率。刘国等人[12]在求取暗通道的过程中,引入自适应阈值,以提高估算透射率的准确度。肖进胜等[13]利用边缘检测算法分割出天空区域,并对天空区域的透射率进行补偿。王柯俨等[14]提出多阈值天空分割法,并假定天空区域的透射率为一个定值,以此来校正天空区域的透射率。
本文受以上算法启示,提出了一种基于局部亮度和饱和度的暗通道置信度计算方法,用以校正天空区域的透射率,解决暗通道先验算法在天空区域失效的问题。实验结果表明,本文改进的算法消除了暗通道先验算法在天空区域产生色彩失真、过饱和和伪影等问题,复原的图像中天空区域具有良好的视觉效果。
在图像去雾研究领域中,通常用大气散射模型[1-2]描述有雾图像的形成:
其中,I是有雾图像;J是场景反射光强度(无雾图像);A是全局大气光照强度;t为透射率;β为大气散射系数;d为场景深度。由大气散射模型可知,若想根据有雾图像I复原出无雾图像J,需要先求得A和t。
He 等[10]通过定义彩色图像的暗通道并对大量彩色图像进行统计观察,发现图像中色彩鲜艳的区域总有一个颜色通道的值近似或等于0,由此得到暗通道先验的定理。
其中,Jc表示图像的一个颜色通道,c∈{r,g,b},Ω(x)表示以像素x为中心的一个窗口。
假设大气光值A已知,对式(1)的两端同时求取暗通道,可求得透射率t:
其中,ω为控制去雾程度的调节参数,通常取0.95。
最后将A和t代入到式(1)中,即可恢复出无雾图像J(x):
由于天空等明亮区域的像素通道值均很大,不存在像素通道值趋于零的像素点,从而不满足暗通道先验的假设,导致暗通道先验算法失效,并且在此区域应用He等[10]的算法求得的透射率要比实际值偏小,使得复原结果中天空区域像素通道值的差异被严重放大,致使复原图像色彩失真。针对这个问题,Li等[11]提出基于局部对比度和亮度的暗通道置信度,用暗通道置信度的概念表示局部区域暗通道先验算法的满足程度,以此校正透射率。
C1(x)、C2(x)分别为由统计局部对比度和亮度得到的暗通道置信度,C(x)为最终计算得到的暗通道置信度,tc(x)为补偿后的透射率。
暗通道先验的假设通常在色彩鲜艳的场景下才成立,如图1 中的(b)所示,在无雾图像中的天空区域,暗通道值不接近于0,导致暗通道先验算法在此区域失效。
图1 无雾图像的亮度和饱和度
而在有雾图像中,常常出现如天空、灰白的建筑物等不满足暗通道先验的场景,本文通过分析这些场景在HSV空间的特点,发现这些灰白高亮的区域有着较高的亮度和较低的饱和度,如图1 中的(c)、(d)所示。本文基于此特点,提出了一种新的暗通道置信度计算方法,用于校正透射率,并结合四叉树搜索法改进了大气光值的估计方法。
实际上,当图像中灰白高亮区域的面积小于暗通道先验算法使用的最小值滤波的窗口的大小时,滤波窗口滑动过的区域总能找到暗原色点,所以暗通道先验在此区域依旧成立,如图1(b)中的建筑物区域所示,此时透射率是不需要校正的。而当灰白高亮区域的面积大于滤波窗口的大小时,会出现滤波窗口滑动过的区域不包含任何暗原色点的情况,导致暗通道先验在此区域失效,如图1(b)的天空区域所示。本文通过对S和V分别进行最大值滤波和最小值滤波,以过滤掉那些小面积的灰白区域。
其中,S和V分别为HSV空间的饱和度和亮度,且均作归一化处理;Smax(x)和Vmin(x)为饱和度和亮度分别经过最大值、最小值滤波后的结果,滤波半径取求暗通道所用的窗口大小。如图1(d)、(e)所示,高亮度和低饱和度的区域基本保持在天空区域。
本文利用二维高斯函数,结合饱和度、亮度和局部暗通道置信程度的关系,构造计算暗通道置信度的公式,如下所示:
其中,C(x)为暗通道置信度,取值区间为[0,1],c为关于A的自适应调节参数,为大气光值均值。实验发现,c的取值区间为[0.01,0.05],且当大气光值A越大时,c取较小值有更好的效果,反之取较大值。
当暗通道置信度过低时,会对透射率过度补偿,影响去雾效果,因此需要对C(x)设定阈值,经实验分析,C(x)取值区间为[0.5,1],可获得最佳效果。
如图2所示为本文算法求得的暗通道置信度,可以看出本文算法能够有效地将有雾图像中天空区域分割出来。
图2 暗通道置信度
本文通过暗通道置信度来校正透射率,不再保留去雾调节参数ω,求得的粗略透射率为:
本文采用引导滤波[15]对粗略透射率进行细化后,得到最终细化的透射率。
大气光值应当取无穷远处,即雾最浓的区域,一般为天空区域。本文基于有雾图像在HSV 空间的特点,采用四叉树搜索法来寻找大气光值存在的区域,算法过程如下:
(1)将原图转换到HSV空间中,求得亮度V和饱和度S,对V和S作归一化处理。
(3)选取Score[i]值最大的区域进行迭代处理,直到到达设置的阈值,阈值为δ=max(20,min(h,l)/20),其中h和l为原图的长和宽。
(4)在最终选取的区域取V-S最大值的像素点作为大气光值所在点,再将大气光值从HSV 空间转换到RGB空间即可求得A。
如图3所示,在多种场景下,本文算法都准确地定位到了有雾图像中的天空区域,得到了准确的大气光值。
图3 大气光值估计结果
本文实验开发环境使用的是Matlab2016a,程序运行环境为Window10。本文算法计算暗通道和暗通道置信度采用的滤波半径均为自适应取值,大小为krnlsz=floor(max([3,w×kenlRatio,h×kenlRatio])),kenlRatio=0.1,w和h分别为图像的宽和高。
为了验证文本算法去雾的效果,本文分别选取He等[10]的暗通道先验算法、Berman等[9]的基于颜色线的去雾算法、Cai等[4]的基于DehazeNet的去雾算法和王柯俨等[14]的基于暗通道先验的改进算法,与本文算法进行图像去雾比较。
图4(a)为有雾原图,图4(b)为He 的暗通道先验算法的复原结果,可以看出在非天空区域,He的算法有着良好的去雾效果,但是在天空区域,去雾效果并不理想,如图4(b)中,Image1的天空有明显的色彩失真,Image3的天空被过度增强,Image4 中的天空存在伪影,Image5中的天空和海面由于过度增强,产生了明显的色差和伪影;图4(c)为Berman 的算法,如图4(c)中的Image1 所示,该算法在近景和远景都有着良好的去雾效果,但是图像整体或局部会偏暗,如图4(c)中Image2、Image3、Image4所示,局部区域过暗,而且在Image4和Image5中的天空区域产生了明显的亮度不均;图4(d)为Cai的算法,复原结果中不存在色差和伪影,近景复原效果良好,但是复原图像中远景区域去雾程度低,如图4(d)中Image1、Image3、Image4和Image5的远景区域依然有大量明显的雾;图4(e)为王的算法,通过多阈值分割出天空区域,并单独进行透射率的补偿,明显改善了天空区域复原的效果,但是王的算法认为天空区域的透射率为相同的定值,当天空区域的信息比较多时,可能会降低天空区域的去雾效果,如图4(e)中Image2所示,因为天空区域取了较大的透射率,导致天空区域去雾程度降低;图4(f)为本文算法的复原结果,与原算法相比,在天空区域去雾效果良好,如图4(f)中Image1、Image3、Image4 和Image5 所示,并没有产生严重的色彩失真或伪影等现象,并且在满足暗通道先验的区域,尽可能地保留了原有的去雾效果,但是本文算法并没有解决暗通道先验算法不能有效去除景深突变区域残留雾的问题,如图4(f)中Image1所示,左上角依然有少量残留的雾。
图4 去雾结果比较
因为本文算法主要解决是暗通道先验算法在天空区域容易失效,导致算法复原结果中出现色彩失真或伪影的问题,所以本文采用文献[16]中方法评估复原图像色彩偏移程度,并采用Structural Similarity Index(SSIM)即结构相似性指标[17],评估有雾图像和复原图像的结构相似程度。
文献[16]以原图像和复原图像RGB 颜色分量的直方相似性来度量去雾图像的色调偏移程度:
其中,I表示原始有雾图像,J为复原图像。uI和uJ分别表示I和J的均值,分别表示图像I和J的方差,σIJ为I和J的协方差,K1和K2为常数,通常取K1=(C1×L)2、K2=(C2×L)2,一般C1=0.01、C2=0.03,L是像素值的范围,取255。SSIM 指标越大,表示原图像和复原结果的结构越相似。
表1、2分别为图4中不同算法的去雾结果的直方图的形状相似性和结构相似性。由表1、2可知,由于Berman 的复原结果中经常出现局部过暗或亮度不均的现象,导致其复原结果与原图像的直方相似性较低。而Cai的SSIM指标普遍偏高,是因为Cai的算法去雾程度比其他几种算法低,导致Cai的复原结果与原图像有更高的结构相似性。本文算法的复原结果中,不存在色彩失真等现象,且在非天空区域尽可能保持了原算法的去雾效果,所以相比He的算法,本文算法有着更高的直方图相似性和结构相似性。
表1 各算法处理前后的直方相似性
表2 各算法处理前后的结构相似性
在相同条件的实验环境下,对图4中的Image1进行去雾,文中不同算法的时间消耗,如表3所示。
表3 各算法去雾处理时间消耗
可以看出,本文算法的去雾处理速度要比He的算法稍慢,是因为去雾过程中需要额外计算暗通道置信度。但是本文算法中计算暗通道置信度所需要的最小值滤波和最大值滤波均能在线性时间内实现,细化透射率所用的引导滤波也能在线性时间内实现,所以本文算法的时间复杂度依然是线性的,算法的复杂度并没有增加。
本文基于暗通道先验的算法,提出了一种新的基于局部亮度和饱和度的暗通道置信度计算方法,用暗通道置信度对天空区域的透射率进行校正,有效地解决了天空区域色彩失真问题,拓展了算法的适用范围。同时,利用四叉树搜索法,结合图像在HSV 空间的特点来寻找大气光值,提高了大气光值估计的准确性。实验结果表明,本文算法能有效地解决暗通道先验算法在天空区域容易产生色彩失真或伪影的问题。