倪萍,赖惠成,高古学,谷腾飞,贾振红
(新疆大学信息科学与工程学院,乌鲁木齐 830046)
在户外拍摄图像时,图像的质量受天气影响很大,如雾霾天气会使得拍摄的图像清晰度和能见度低,甚至导致有用的细节信息丢失,从而使图像质量下降,严重阻碍和影响智能交通、视频监控和目标识别等视觉系统的的工作和效用。因此,对含有雾霾的户外图像做除雾处理以使图像清晰化具有重要意义。
目前,图像去雾的方法主要分为基于图像增强、图像复原和深度学习三大类。基于图像增强的除雾算法较注重图像对比度的增强以及去除图像噪声2 个方面。具体算法包括直方图均衡化算法[1-2]、Retinex 系列算法[3-5]以及小波变换和同态滤波算法[6]。文献[1]提出一种基于密度的直方图划分和自动确定子直方图的数量并对每个子直方图单独进行均衡化的方法。文献[2]开发一种自适应直方图均衡化的局部对比度保持技术,用于增强在低光和夜间条件下捕获的医学及自然图像。文献[3]提出一种基于Retinex 的拉普拉斯金字塔去雾算法。文献[4]提出一种基于Retinex 的图像感知对比度增强方法,并使用亮度自适应使增强后的图像具有更好的色彩,但图像的颜色会偏离原来的颜色,整个图像趋于白色。文献[5]提出一种采用粒子群优化(PSO)算法对参数进行优化,然后将有雾图像转化为色调、饱和度、强度(HSI)进行色彩补偿的方法。文献[6]提出一种基于同态滤波和全变分级联的图像去噪算法,力求在最大程度地保留图像边缘特征的同时降低噪声。基于图像复原的去雾算法多数是基于大气散射模型执行去雾,具有代表性的算法是何凯明[7]提出的暗通道先验去雾算法,达到了非常好的去雾效果。随后,暗通道先验算法以及改进算法得到了广泛应用。文献[8]提出一种多尺度深度融合算法,并给出表示非线性滤波随机残差的线性模型。文献[9]提出一种简单但功能强大的颜色衰减先验除雾算法,创建了雾图像深度图的线性模型,然后通过大气散射模型估算透射率并有效去雾。文献[10]提出一种基于暗通道先验和形态重构的方法来快速计算透射率图。文献[11]提出一种使用暗通道和大气光计算双透射率图的策略,然后利用梯度域引导滤波细化透射率图的方法。文献[12]为了避免传统去雾算法带来的噪声扩散和放大问题,提出一种基于非下采样Contourlet 变换的单幅图像去雾算法。文献[13]提出一种利用3 幅不同光学特征的偏振图像自动估算大气光的偏振度和无穷远处的大气光,从而得到去雾图像的方法。基于深度学习的算法可以对无论是薄雾还是浓雾等不同雾霾天气条件下的图像进行恢复。文献[14]采用深度CNN 结构强大的学习能力,提出一种称为DehazeNet 的可训练端到端去雾模型,利用神经网络来估计透射率,并给出一种新的非线性激活函数。文献[15]利用GAN 提出一个端到端的网络来直接恢复最终的无雾图像,解决了伪影的问题。文献[16]利用一个三尺度残差注意力CNN 和集成注意力CNN 提出了集成多尺度残差注意力网络(EMRA-Net),可以直接生成无雾图像。文献[17]提出一种基于RefineDNet 的两阶段弱监督除雾模型,该模型将除雾分为可见性恢复和真实性改进两个子任务,来合并基于先验和基于学习的优点。
综上所述,当前的去雾算法研究重点在于除雾及透射率图的计算速度,并且不损失图像质量。然而,这些算法仍存在对浓雾图像去雾不彻底、颜色不自然、亮度偏暗、具有光晕伪影现象等问题。为此,本文提出一种基于形态学和梯度域导向滤波的去雾算法。该算法通过暗通道先验求出初始透射率,并利用梯度域导向滤波对透射率进行优化,对雾图最小强度图进行形态学灰度腐蚀和导向滤波操作得到改进暗通道,最终利用大气散射模型得到除雾后的图像。
在计算机视觉领域中,用于描述雾度图像形成的模型[18]如式(1)所示:
其中:I(x)为有雾图像;J(x)为去雾后的图像;A为大气光值;t(x)为透射率。当大气均匀时,透射率t(x)可以表示为:
其中:β是大气散射系数;d(x)是场景深度。从几何学上讲,雾度成像方程式(1)表示在RGB 颜色空间中,向量A、I(x)和J(x)是共面的,它们的端点是共线的。从式(1)可知,待恢复图像J(x)的表达式为:
HE 等认为在非天空区域中,至少一个颜色通道在某些像素处的强度极低,甚至趋于零。因此,对于图像I,暗通道Idark定义为:
其中:Ic为I的颜色通道;Ω(x)是一个以x为中心的局部色块;y是包含在Ω(x)中的像素是一个最小滤波器。
估算A的过程是:首先选取暗通道中最亮的前0.1%像素,然后在这些像素中,对应输入图像I中具有最高强度的像素,可以代表全局大气光A。
将暗通道先验运用于式(1)两边,无雾图像J的暗通道趋于0。假设大气光A已知,进一步假设局部色块Ω(x)中的传输是恒定的,最后得出透射率t(x):其中:ω(0 <ω<1)为基于应用的参数,设置为0.95,它的作用是为图像中远处的场景保持非常少量的雾度;c表示3 个颜色通道的索引;A是大气光值。
本文算法流程如图1 所示。具体步骤如下:
图1 本文算法流程Fig.1 Procedure of the proposed algorithm
1)通过暗通道先验[7]求出初始透射率。
2)利用图像形态学闭、开运算细化透射率。
3)利用梯度域导向滤波[19]优化透射率。
4)对雾图最小强度图进行形态学灰度腐蚀和导向滤波[20]操作得到改进暗通道,求大气光值。
5)利用大气散射模型得到除雾后的图像。
6)将无雾图像转换到HSI颜色空间中,对I通道进行亮度提高,再由HSI颜色空间转换到RGB颜色空间。
透射率估计示意图如图2 所示。本文利用暗通道先验[7]的透射率t(x)作为初始透射率,如图2(b)所示。可以看到,初始透射率存在明显的矩形块状效应,下文利用形态学闭、开运算平滑透射率图和消除矩形块状效应。
图2 透射率估计示意图Fig.2 Schematic diagram of transmission estimation
首先,通过形态学灰度闭运算操作,去除结构元素上小的暗或者深色元素,并可以相对地使高灰度部分保持不变,添补含有黑色的微小空洞区域的白色物体,并平滑边界轮廓。形态学灰度闭运算是先灰度膨胀后灰度腐蚀,使用结构元素se对初始透射率图t(x)进行闭运算,表示为:
其中:tcl(x)表示闭运算后的透射率;·表示灰度闭运算;imerode()表示灰度腐蚀;⊕表示灰度膨胀;se为结构元素,本文采用的是15×15 的矩形结构元素。
其次,通过形态学灰度开运算操作,消除暗背景下的亮元素,删除比环境更清晰的小对象,平滑图像中较大的目标物体的边界大体轮廓尽可能不改变其面积的作用。执行形态学灰度开运算,既可消除亮白色物体的干扰,又能基本维持整体亮度不变。先灰度腐蚀后灰度膨胀的过程称为开运算,使用结构元素se对闭运算后的透射率tcl(x)进行开运算,表示为:
其中:◦表示灰度开运算。经过形态学闭、开运算后的结果如图2(c)所示,可以看出明显地平滑了初始透射率图,去除了一些暗色、黑色的元素,比如:天空处的云朵,图像中间偏下右边的白色部分和房屋顶处,处理后颜色变淡,但是透射率图还是存在矩形块现象,为了抑制透射率图中的纹理、平滑边缘和消除矩形块现象,接下来使用梯度域导向滤波[19]进行优化。梯度域导向滤波器包含一个一阶显式的边缘感知约束,并且边缘感知因子是多尺度的,该滤波器也避免了梯度反转,因此比导向图像滤波器[20]和加权导向图像滤波器[21]更好地保留了边缘。将透射率图top(x)作为梯度域导向滤波器的导向图,雾图I的灰度图作为输入图像。在一个以k为中心像素的局部图像块ωk中,输出透射率tGD(x)与导向图top(x)呈线性转换关系,表示为:
其中:|ωk|表示ωk的像素总个数。
在式(8)中,为了求解ak和bk,通过最小化输入和输出之间的差值计算代价函数,即在ωk中,有:
其中:Ii表示在像素i处的输入图像;(k)为边缘感知加权,作用是测量像素x相对于整个导向图的重要性;λ是正则化参数以防止ak太大;参数γk起到影响ak的作用。如果像素x处于边界位置,则γk的值将接近1,如果像素x在平滑区域中,则接近0,即如果像素x处于边界位置,ak的值将接近1,如果像素x在平滑区域中,则ak的值将接近0。根据线性回归,求解式(11)中的ak和bk,得到:
将ak和bk分别代入式(9)、式(10),再代入式(8)计算后,滤波结果即为本文最终透射率tGD(x),如图2(d)所示。可以看出,tGD(x)保存了导向图top(x)的大部分边缘信息,还消除了矩形块现象,而且计算开销很小。本文估算透射率过程中闭、开运算可交换顺序,结果一致。
从式(1)可知,大气光A是一个关键参数,要得到最后的去雾图像,必须求出A。目前求解A的方法很多,如文献[22]直接利用强度最高的像素点作为大气光值,而现实生活中存在很多白色物体,这种方法就很容易将非雾气的白色物体当作最高强度的像素点,文献[7]首先选择暗通道中最亮的前0.1%像素,然后在这些像素中,对应在输入图像中具有最高强度的像素可以代表全局大气光A,但一般获得的大气光值较高且耗时长。现实场景中的大气光并不均匀,如果去雾过程中大气光值比真实大气光值大,则除雾后的图像远景部分会偏暗,近景部分会偏亮;若比真实大气光值小,则除雾后的图像远景部分会偏亮,近景部分会偏暗。因此,本文提出先对雾图的最小强度图进行形态学灰度腐蚀,再将经过导向滤波的结果作为暗通道图,以防止直接使用暗通道得到的大气光值估值过高。本文估计大气类A的步骤如下:
1)对雾图的最小强度图进行形态学灰度腐蚀去除噪声。
2)再经过导向滤波细化,基于式(4),细化后的暗通道图表达式如下:
其中:Adark(x)为形态学灰度腐蚀和导向滤波后的暗通道;GF()表示导向滤波操作,imerode()表示图像形态学灰度腐蚀;se为结构元素对象,本文采用的是15×15 的矩形结构元素。
3)基于式(15),选择Adark(x)中最亮的前0.1%像素,将前0.1%最亮像素点对应在原图中,最高的像素值作为大气光。大气光值A由下式得出:
其中:h和w分别表示输入图像的高度和长度。图3所示为原始暗通道和Adark的对比,通过图3(b)与图3(c)的比较可以看出,细化后的暗通道Adark保留了图像的大体轮廓,并有平滑图3(b)和有效去除“矩形块效应”的作用;图3(d)为使用原始暗通道的恢复图像;图3(e)为使用Adark的恢复图像,可以看出,图3(e)的亮度比图3(d)要暗一点,颜色更自然一点,比如图像中马的颜色。
图3 暗通道估计的对比Fig.3 Comparison of dark channel estimation
根据上述过程,透射率tGD(x)和大气光A都已求出,根据式(3)可计算出无雾清晰图像。但是,当透射率tGD(x)接近0 时,直接衰减项J(x)tGD(x)非常接近0,直接恢复的图像容易产生噪音。因此,将透射率tGD(x)设置一个下限t0,最终无雾图像J(x)通过以下方式恢复:
其中:阈值t0是为了减少图像噪声的影响,当tGD(x) <t0时,tGD(x)=t0,本文t0值设置为0.1。
在上述去雾过程后,无雾图像亮度偏暗。因此,本文提出将无雾图像转到HSI 颜色空间中对I通道进行亮度提高,使增强后图像亮度合适,颜色真实自然。HSI 颜色空间使用颜色三要素来描述颜色,即:H定义颜色的频率,称为色调;S表示颜色的浓淡级别,称为饱和度;I表示强度或亮度。其中,图像中的颜色信息与I无关,人类肉眼感受到的颜色信息与H分量和S分量是密切相关的。因此,与RGB 颜色空间相比,HSI 颜色空间比较符合人类肉眼对场景中颜色信息的感知。基于文献[23]中低光图像增强的多曝光融合框架,融合图像被定义为:
其中:R表示多曝光融合增强后的图像;W表示多曝光评估器,作用是增强低曝光区域的对比度,同时保留好的曝光区域的对比度;P表示输入图像;g()表示多曝光发生器,将输入图像映射到多曝光图像中;K表示多曝光采样器,作用是确定所生成的图像的最佳曝光比。在HSI 颜色空间中实现图像亮度提高处理之后,再转换到RGB 颜色空间才可以正确显示出来。
图4、图5 所示为本文算法曝光增强前后以及对文献[11]使用本文后处理方法的对比。可以看出,无曝光增强图像亮度偏暗,如图4(b)、图4(d)和图5(b)、图5(d)所示,在图5(d)中尤为明显。文献[11]算法在经过本文后处理后,亮度比本文高,但从图4(b)和图5(b)可以看出,除雾后图像过增强,导致图像颜色较深,亮度偏暗,从图5(b)中还可以看到,左上方大水坑的左边和右侧小水坑的水面变成黑色,存在颜色失真现象。本文最终结果可以保持合适的亮度,并且不会过饱和,没有颜色失真,如图4(e)和图5(e)所示。对文献[11]算法运用本文后处理方法后,如图4(c)和图5(c)所示,图像亮度明显提高,主观效果得到提升,验证了本文后处理方法的有效性。
图4 曝光增强前后对比1Fig.4 Comparison before and after exposure enhancement 1
图5 曝光增强前后对比2Fig.5 Comparison before and after exposure enhancement 2
为验证本文算法对雾图像增强的有效性,将获得的结果与最近文献中不同方法的结果进行主观效果和客观指标比较。图6~图13 所示为从LIVE Image Defogging 数据库[24]和现有的去雾算法中收集到的现实场景雾图像的主观效果对比。本文选取了4 种典型传统算法[7,9-11]和2种深度学习算法[14,17]进行对比实验。文献[17]算法采用软件环境配置为Ubuntu 18.04、CUDA10.1、Python3.6、Pytorch1.1.0、torchvision0.3.0、numpy1.19.5 实现;计算机配置为CPU:i7-7700K,GPU:GTX1080 8GB X2,内存:64 GB。其他算法都采用Matlab(R2018a)实现。计算机配置为:Intel®CoreTMi7-3537U CPU @ 2.00 GHz 2.50 GHz,8 GB 内存。
图6 主观结果对比1Fig.6 Comparison of subjective results 1
从图6~图13 可以看出,各算法对不同特征的雾天退化场景复原具有明显的差异性。在图6(b)~图13(b)中,文献[7]算法去雾很彻底,但不适用于天空区域,在景深突变区域会出现光晕和伪影,如图6(b)中树叶、建筑物和天空的连接区域有光晕伪影现象;另外在图7(b)中,军人衣服和地面颜色较深且军人周围有伪影。在图6(c)~图13(c)中,文献[9]算法对薄雾图像有效,但去雾后图像颜色偏深,整体亮度偏暗,如在图7(c)和图11(c)中人物的衣服,在图8(c)中人脸肤色偏棕色,显得非常不自然;在雾较多情况下,会低估远处的雾度,出现了明显的去雾不彻底现象,比如图10(c)和图12(c),能够明显地看到残留的雾。在图6(d)~图13(d)中,文献[10]算法去雾后图像整体亮度偏暗,对雾较多的图像去雾效果欠佳,比如图10(d)~图13(d),去雾后留有大量的残雾;在图9(d)中,去雾后图像背景树木几乎全部丢失。在图6(e)~图13(e)中,文献[11]算法除雾彻底,但和文献[7]算法出现同样的问题,在景深突变区域会出现光晕和伪影,也会出现信息丢失、颜色不自然和亮度偏暗等问题,比如图6(e),右上角树叶、建筑物和天空的连接区域有伪影;在图7(e)中,军人的周围有伪影;在图8(e)中,人脸肤色颜色已经失真;在图9(e)中,背景树木偏暗黑色,极其不自然。与深度学习方法相比,从图6(f)~图13(f)可以看出,文献[14]得到的结果虽然没有天空失真和光晕伪影的问题,但是这种方法得到的图像并没有完全去雾,无论雾多还是雾少都留有轻微的残雾。从图6(g)~图13(g)可以看出,文献[17]去雾效果好,但在图12(g)中,远处的雾没有去除干净,有图像过增强和颜色偏灰白色现象,如图6(g)左上角和右下角树叶处偏暗,图7(g)~图8(g)整体颜色较深;图9(g)~图10(g)和图12(g)~图13(g)整体颜色偏灰白色,图10(g)中卡车处理后不是黄色,图13(g)中山的颜色不自然,天空处偏白色。本文算法对雾图像有很好的增强效果,避免了图像过饱和并保留了去雾有效性,无论是薄雾还是浓雾、近景还是远景都能够有效去雾,增强了图像细节,解决了天空区域失真和在景深突变区域会出现光晕和伪影的问题,去雾后图像有较高的对比度和清晰度,天空和云层自然清晰,且亮度适宜,颜色真实自然。
图7 主观结果对比2Fig.7 Comparison of subjective results 2
图8 主观结果对比3Fig.8 Comparison of subjective results 3
图9 主观结果对比4Fig.9 Comparison of subjective results 4
图10 主观结果对比5Fig.10 Comparison of subjective results 5
图11 主观结果对比6Fig.11 Comparison of subjective results 6
图12 主观结果对比7Fig.12 Comparison of subjective results 7
图13 主观结果对比8Fig.13 Comparison of subjective results 8
从主观结果分析可以直观地看出本文算法与对比算法的差异与不足,但仍具片面性。为进一步验证本文算法的优越性和有效性,本文从客观指标方面与上述算法进行对比分析。
可见边的规范化梯度均值r可以表示可见边的对比度恢复的质量,定义为[18]:
其中:nr为复原图像的可见边数;pi为属于复原图像中可见边的像素点;ri为复原图像与有雾图像在pi处的Sobel 梯度的比值;X为复原图像的可见边集合。
对比度C表示一幅图像上亮区域和暗区域的层次感,定义为[25]:
其中:δ(i,j)为相邻像素间灰度差的大小;Pδ(i,j)为相邻像素间灰度差的大小为δ的像素分布概率。
平均梯度G可以表示图像的相对清晰程度,定义为[26]:
Q的表达式为:
其中:H为需要评价的图像;m和n为图像的行数和列数;(i,j)为像素坐标。
图像信息熵E表示图像中灰度分布的聚集特征所包含的信息量,定义为:
其中:Ri表示图像中灰度值为i的像素在图像中出现的概率;L为图像的灰度级。
表1~表4 分别给出了图6~图13 的可见边的规范化梯度均值、对比度、平均梯度和图像信息熵的指标分析。4 种指标越大表示图像细节越清晰,去雾效果和图像质量越好。
表1 可见边的规范化梯度均值r 指标的对比Table 1 Comparison of the normalized gradient mean r index of visible edges
由表1数据可知,图7(e)、图7(g)、图8(g)和图10(g)的r值偏大,这是因为去雾后图像存在过增强现象,而本文方法具有较大且合适的r值,表明本文方法具有较好的可见边恢复性能。由表2 可知,文献[7,9-10,14]对图7 的处理对比度有下降;文献[10]的恢复效果不是很好,平均值低于原图对比度的平均值,存在退化现象,其他算法的平均值都有提升。有些图像的C值比本文C值大,如文献[11,17]算法的图6~图8 和图13,文献[11,17]算法的平均值分别位于第2 位和第3 位,本文的平均值最高,表明本文算法无过增强现象,不会有非常大的灰度反差和纹理变化,恢复的图像更清晰醒目,色彩更鲜明。由表3 可知,所选对比算法G值的平均值都有提升,但文献[9]算法中图6(c)的G值比雾图还低,文献[10]算法提升效果不明显,只有图7(d)、图10(d)和图12(d)有提高;文献[11,17]算法中图6~图8 和图13的G值比本文大,但是主观效果亮度偏暗,颜色偏深。本文算法G值的平均值最高,说明本文方法处理后的图像清晰度最好。从表4 的数据可以看出,文献[7]算法中图13(b)出现了少许降质现象,E值的平均值位居第3位。文献[9]算法在选取的8张图片中,E值不存 在退化的有图7(c)、图9(c)、图10(c)和图12(c)。文献[10]的E值平均值比雾图的平均值还要低,只有图7(d)和图12(d)有提高。文献[11]的E值提升效果不太好,其中,图6(e)、图8(e)、图11(e)和图13(e)都存在降质现象。文献[14]算法中只有图6(f)的E值有下降。文献[17]和本文算法在图13 中均出现降质,E值平均值分别位于所有算法的第2位和第1位。由此可见,本文算法处理后的图像有较多的信息量。
表2 对比度C 指标的对比Table 2 Comparison of contrast C index
表3 平均梯度G 指标的对比Table 3 Comparison of average gradient G index
表4 图像信息熵E 指标的对比Table 4 Comparison of image information entropy E index
表5 列出了本文算法和6 个对比算法对图6~图13 进行除雾处理的运行时间。
表5 不同算法运行时间的对比Table 5 Comparison of running time of different algorithms s
文献[17]算法在GPU 上实现,其他算法均在CPU 上实现。整体来看,本文算法的运行速度快于文献[9,11,14]算法,慢于文献[7,10,17]算法,其中文献[10]算法的运行时间最短,是因为文献[10]算法提出的基于暗通道先验和形态重构的方法能够快速的计算出透射率图。但是,本文算法比文献[7]算法具有更好的亮度,比文献[10]算法具有更高的饱和度和清晰度,比文献[17]算法具有更好的视觉效果。综上所述,本文算法能够较好的增强有雾图像。
为了进一步验证本文算法的有效性,在RESIDE 数据集中挑选了38 张真实场景的雾图像,并测出6 个对比算法和本文算法对38 张图像除雾处理后图像的可见边的规范化梯度均值、对比度、平均梯度和图像信息熵的值,并计算出平均值。如表6 所示,本文算法的r值平均值比文献[17]算法低,这是因为文献[17]算法存在普遍的图像过增强现象。本文算法的C值平均值低于文献[11]算法,但文献[11]算法的恢复图像颜色较深,导致灰度反差和纹理变化较大,而本文算法恢复的结果颜色较自然。本文算法G值的平均值与文献[17]算法较为接近,都能显示出更多的清晰细节,但本文算法的主观效果更好;文献[10]算法依然存在退化现象;其他算法在G值上都有提升。本文算法E值的平均值最高,且与文献[17]算法较为接近;文献[10]算法的提升效果不好,E值的平均值存在下降;文献[9,11]算法的E值平均值均有下降;其他算法E值的平均值都有所提升。整体来看,本文算法具有合适的亮度与对比度,视觉效果较好,且包含的信息量最多。
表6 38 张图像4 个指标平均值的对比Table 6 Comparison of the average value of 4 indicators of 38 images
本文提出一种基于图像形态学和梯度域导向滤波的图像去雾算法。利用暗通道先验求出初始透射率后,经过图像形态学闭、开运算和梯度域导向滤波处理平滑和优化透射率图。通过对雾图的最小强度图根据形态学灰度腐蚀和导向滤波操作得到暗通道图,利用改进的暗通道图计算大气光值。将除雾后的RGB 图像转换到HSI 颜色空间中,对I通道使用低光图像增强的多曝光融合框架来增强图像的亮度。实验结果表明,本文算法能够保证图像具有合适的亮度,不存在过饱和现象,并且能够恢复更多的细节信息,视觉效果自然,没有光晕伪影。但是,本文算法对浓雾场景的远景部分去雾不彻底,下一步将以图像形态学为基础,引入拉普拉斯金字塔和高斯金字塔,构建多曝光图像融合方法来达到对有雾图像近景及远景部分去雾彻底、无信息丢失且颜色自然真实的目的。