尹宋麟,谭 飞,2,周 晴,鲜 阳,赵 亮
(1.四川轻化工大学自动化与信息工程学院,四川 宜宾 644000;
2.人工智能四川省重点实验室,四川 宜宾 644000)
随着现代社会科技水平的不断进步,图像作为信息传递的媒介在智能交通、医学图像检测等领域应用广泛。设备采集图像时需要良好的光照,若在雾霾天气下,图像存在特征信息模糊、细节丢失、色彩失真等现象,严重影响了设备对图像的分析与理解。因此,如何处理有雾图像获取有效信息具有重要的研究意义。
图像去雾算法主要分为图像增强和图像复原两类,图像增强以直方图均衡化[1]和基于 Retinex 理论[2]的相关算法为代表,这一类算法优点是处理速度快、色彩恒定;
缺点是在光照变化较大区域会产生光晕现象,导致图像细节丢失。图像复原以暗通道先验算法[3]最为经典,此类算法优点是能够将图像的细节信息尽可能保留,去雾效果较为自然;
缺点是当图像中存在大面积高亮区域时,复原图像亮度整体偏暗。丁洁等[4]采用四分加权算法和导向滤波[5]对暗通道进行优化,并结合MSR算法[6]提升了图像亮度和清晰度,但在处理含有天空区域的图像时会产生Halo 效应。彭静等[7]采用四叉树搜索法获取大气光值并用双边滤波[8]优化透射率,通过Canny算子[9]和二维伽马函数[10]校正了图像亮度,恢复了有雾图像的细节信息,但对浓雾图像去雾并不理想。Ngo 等[11]通过图像特征函数估计传输图,设计自适应大气光值改善图像亮度不均匀现象,但算法复杂度高,且复原图像过于饱和。Zhu 等[12]通过图像融合算法,构建基于全局和局部曝光的像素权重图进行去雾,平衡了复原图像的色彩饱和度,但光照变化处的残雾没有消除。
针对以上问题,本文提出一种基于空域占比自适应暗通道去雾算法。首先对输入图像的灰度图自适应迭代出阈值,识别出天空区域并分割;
接着计算天空区域与输入图像的占比,若占比大于5%,大气光值取天空区域中前1%最亮像素点均值,否则采用加权平均求取大气光值;
对不满足暗通道理论的天空区域透射率进行修正,并引入引导滤波细化;
最后通过大气散射模型恢复无雾图像。
1.1 大气散射模型
在计算机视觉以及图像处理领域,所采用的描述有雾图像的大气散射模型[13]的数学表达式为:
式中I(x)为有雾图像;
J(x)为需要恢复的无雾图像;
A为大气光值;
t(x)为透射率。由于I(x)为已知量,只需计算A与t(x)的值就能反解出J(x)。由此可知,如何准确求解透射率和大气光值是大气散射模型去雾的关键。
1.2 暗通道先验理论
暗通道先验理论[3]表明,在无雾图像J(x)的非天空区域,即使图像曝光良好,R、G、B 3个通道中也会存在一个通道的某些像素值趋近于零,这个客观事实由数学表达式描述为:
式中,Jdark(x)为图像J(x)的暗通道;
Jc(y)表示图像的R、G、B 3个颜色通道中的其中一个;
Ω(x)表示像素点x的局部窗口,通常取15×15。
假设大气光值A已知,利用大气光值对式(1)进行归一化:
假设~(x)表示Ω(x) 中的透射率且为固定值,计算式(3)暗通道:
将式(2)代入式(4),化简求得t~(x):
为了保留图像深度,需要保留一定程度的雾。因此在式(5)中引入在[0,1]区间的参数ω=0.95,修正为:
计算出透射率后即可求出无雾图像J(x),同时为了避免分母的透射率趋于0,设置下限t0防止公式无意义,一般t0取值为0.1。最后由式(1)得到去雾图像公式如下:
由于暗通道先验算法只能较好地适用于非天空区域,但在实际情况中图像会出现天空区域,此时暗通道去雾易造成复原图像颜色失真,去雾效果不理想。因此,需要将天空与非天空区域分割后,采用不同的方法去雾。
2.1 基于自适应阈值的天空区域分割
在包含天空之类的明亮区域中,它们的像素值很大,在RGB 通道中找不到像素值接近于0 的点,此时暗通道理论在这些区域并不成立。因此本文提出自适应阈值迭代法分割天空区域,以便后续对天空区域去雾,具体步骤如下:
1)为降低算法运算量,将有雾图像I(x)转化为灰度图像G(x):
2)求出灰度图中最大灰度值Gmax(i,j)和最小灰度值Gmin(i,j),设置初始阈值表达式:
3)分别计算灰度值小于和大于阈值T的灰度总值S0和S1,以及灰度个数n0和n1,表达式如下:
4)分别计算小于和大于阈值的均值,得到新的阈值表达式:
当T与T′相差小于0.1 时,停止阈值迭代,此时T′即是最佳分割阈值,选择灰度值大于T′的区域连通,将面积最大的区域作为最终分割出的天空区域。算法具体流程图如图1所示。
图1 天空分割算法流程图
通过最佳灰度阈值对天空进行分割后的结果如图2所示。
图2 天空区域识别结果
2.2 大气光值改进
大气光值选取的准确性与图像去雾的结果密切相关,He 等[3]对大气光值的估计是选取图像暗通道中像素值最大的前0.1%的点,然后对应到原图中找到像素最大点作为结果。但该方法存在一定问题:当雾图中出现明亮物体时,该方法估计出的大气光值会偏大,影响去雾效果。于是Wang等[14]提出取天空区域像素均值作为大气光值的估计,但对于天空较小甚至某些没有天空的图像,这种方法还不够合理。因此,本文提出一种改进的大气光值A的获取方法。
首先通过2.1 节得到的最佳阈值计算天空区域像素与整幅图像像素比例,若占比大于5%,则选取天空区域中前1%个最高亮度像素均值作为大气光值,否则采用加权平均[15]求全局大气光值。定义U(x)为原图天空区域,M为原图像素点总个数;
m为天空区域的像素点总数,Ur(x) 记录原图中像素值最大的前0.1%的点,则改进后求取A的表达式为:
式中,n=m/M表示天空区域的权值;
Umed=med(Ur(x))表示取Ur(x)中值;
Imax(x)表示由暗通道先验选到的大气光值。
He 法和改进方法效果如图3 所示,图中蓝色方框标记的为He 的方法,红色方框标记的为改进方法。可以看出,He法错误地将大气光候选区域定位在白色物体上,而改进方法将大气光候选区域定位在远处的天空区域内,避免了白色物体所造成的估值偏差。
图3 He法和改进方法估计大气光值结果
2.3 透射率修正
由上述分析知,含天空之类的明亮区域不适用于暗通道理论,因此计算出的透射率是不准确的。若不考虑暗通道理论,则由式(4)推导出的准确透射率函数应为:
式(14)、(15)中Y为经验公式,为透射率修正因子,As为天空区域亮度值均值,Ps为空域占比。
修正后的透射率在图像边缘处过小,导致去雾图像出现块状效应。为了得到较为理想的透射率,采用引导滤波[5]对其进行优化,引导滤波器在对图像进行重建的同时能够保持图像平滑,具有一定的边缘保持性,数学模型表示为:
其中,qi为输出图像;
Ii为引导图像;
i、k表示像素索引;
wk表示像素点k的局部窗口;
ak和bk为wk的代价函数确定的线性系数。代价函数式为:
其中,ε为防止ak和bk过大的正则化因子;
pi为有雾图像。通过最小二乘法求解线性系数ak、bk为:
其中,|w| 为wk中所有像素点总个数;
μk为Ii在wk的均值;
σk为wk的方差。由于ak、bk在不同窗口区域值不同,因此需对各窗口区域中的线性系数求均值:
其中,分别表示像素i处wk的平均系数。使用输入图像的灰度图作为导向图,对引导滤波修正前后的结果图进行对比,如图4 所示。可以看出优化后的透射图更加光滑,细节部分也更完整。
图4 引导滤波优化前、后的透射率
为验证本文改进算法的有效性,选取6 幅含有天空区域的有雾图像进行仿真实验,其空域占比值见表1,同时从主观和客观两方面出发,与其他经典的去雾算法进行对比分析。实验所用到的软件是Matlab R2020a,操作系统为Windows 10,处理器为Intel(R) Core(TM) i7-11800H@2.30 GHz,16 G内存。
表1 空域占比值
3.1 主观分析
主观分析可以最直观地观察图像复原后的效果。将本文算法分别与文献[3]、文献[11]和文献[12]进行对比,实验结果见表2。He 算法和Ngo 算法处理的天空区域出现偏色,虽然Ngo 算法处理后的图像整体色调稍有提升,但细节部分处理不够理想导致复原后的图像显得过于饱和;
Zhu 算法复原效果较好,但在光照变化处残雾依然存在,高亮度区域导致了图像整体偏暗;
所提改进算法复原后的图像更加清晰自然,天空区域颜色得到改善,光照变化区域没有出现伪影,有效恢复了有雾图像的细节信息,去雾较为彻底。
表2 不同算法去雾效果对比
3.2 客观评价
采用信息熵H、峰值信噪比(PSNR)、平均梯度r和运行时间t作为评价去雾效果的客观指标[18]。信息熵用于度量图像中所包含信息的丰富程度,其值越大说明图像携带的信息量越多。PSNR是一种衡量图像质量和失真度的指标,其值越大说明图像失真越小、质量越好。平均梯度描述的是图像边界或影线两侧附近灰度值的变化,反映了图像微小细节反差变化的速率,该指标主要用来表征图像的相对清晰度,其值越大说明图像越清晰。表达式分别为:
其中,i为图像像素值;
pi为i出现的概率;
n为每个采样值的比特数;
MSE为原图像与去雾图像之间的均方误差;
rt为原图像与去雾图像对应像素点的平均梯度比值;
℘为去雾图像可见边的集合。采用客观指标对各算法处理后的图像进行评价,各项数据见表3~6。
表3 不同算法信息熵对比 bit
表4 不同算法峰值信噪比对比 dB
表5 不同算法平均梯度对比
对比表3~5 发现,本文改进去雾算法在信息熵整体优于其他算法,说明复原图像包含信息丰富,去雾更彻底,在图像6 中信息熵对于He 算法提升幅度最大,为36.1%。所提算法峰值信噪比优于He 算法和Ngo 算法,在图像5 中略低于Zhu 算法,在图像3 中相对于Ngo 算法有较大改善,提升15.9%。在图像2 中平均梯度相对于He 算法提升幅度最大,为28.5%,说明复原图像失真小、清晰度高。由表6可知,所提算法的运行时间少于He 算法和Ngo 算法,但略高于Zhu算法,说明改进算法的时间复杂程度也有所降低。综上所述,本文所提改进算法能有效对图像去雾,且具有一定的优势。
表6 不同算法运行时间对比 s
本文主要提出了一种基于空域占比自适应暗通道去雾算法,针对含有天空区域的有雾图像,使用自适应阈值分割出天空区域;
根据天空区域在图像中的占比选择不同的方法获取大气光值,避免了估计偏差;
接着修正天空区域透射率并采用引导滤波平滑,有效恢复了图像细节信息。最后分别与He、Ngo 和Zhu 的算法在有雾图像上进行主、客观结果对比,证明了改进算法去雾的优势,不仅改善了天空区域颜色失真问题,且具有较低的时间复杂度。针对没有空域的有雾图像,暗通道先验就能取得较好的去雾效果。后续将在目标识别任务中运用此方法对含雾数据集进行预处理。