基于暗通道补偿和透射率修正的图像去雾算法

2023-05-08 03:16容杰雄
计算机应用与软件 2023年4期
关键词:透射率像素点预估

容杰雄 张 鸿

1(武汉科技大学计算机科学与技术学院 湖北 武汉 430065) 2(武汉科技大学智能信息处理与实时工业系统湖北省重点实验室 湖北 武汉 430065)

0 引 言

在雾霾天气下,由于空气中存在的大量悬浮颗粒对光线的散射作用,导致了智能摄像设备采集到的图像的对比度以及清晰度较低,极大地降低了图像的质量,同时也影响到后续的视频识别或目标检测工作。因此,图像去雾技术具有非常重要的研究意义。

传统的图像去雾算法大致可分为两类,一类是基于图像增强的算法;另一类是基于物理建模的算法[1]。较为经典的图像增强算法包括直方图均衡算法[2]、小波变换[3]、伽马变换[4]、带有颜色恢复的多尺度Retinex算法[5](MSRCR)、保持色度的多尺度Retinex算法[6](MSRCP),MSRCR是在多尺度Retinex的基础上,通过使用色彩恢复函数实现了色彩还原的功能,但是它需要合理地控制色彩恢复的增益和偏移值。而MSRCP是将图像由RGB空间转到HSI空间,对I通道进行多尺度Retinex增强,而后根据原RGB空间的比例计算出HSI空间其他两个通道的值,最后再将图像转回到RGB空间。

上述算法由于没有考虑到雾天成像的原理,其增强的图像容易产生细节缺失的问题。一种更为直接的方法是对雾天成像原理进行建模。文献[7]中从大量无雾图像的统计中发现暗通道的先验规律,然后借助该规律以及大气散射模型对有雾图像进行了去雾处理。然而,该算法对透射率的估计并不精确,并不适用于含有天空区域的图像,因为在暗通道图中,天空区域的灰度值并不是趋近于零的。同时,该算法在大气光值的预估上也存在着误差,容易受到图像中白色物体的干扰,造成色彩失真问题的出现。

为此,学者们提出了许多改进策略。文献[8]采用双边滤波方法对天空区域的透射率进行预估,该方法能够有效地提高含有天空区域的有雾图像的对比度,但是双边滤波在处理高像素图像时效率较低;文献[9]采用引导滤波替代双边滤波,尽管引导滤波和双边滤波都具有很强的边缘保护特性,但是引导滤波的时间复杂度与滤波窗口大小无关,相比而言引导滤波更具有优势;文献[10]在最小值滤波前加入中值滤波补偿暗通道,并选取补偿后的暗通道的最大值作为大气光值的预估值,但是该算法得到的暗通道仍然呈块状分布;文献[11]利用四叉树搜索算法预估大气光的值,但是该算法应用于天空区域较小的图像时预估的大气光值偏小,进而降低了图像的去雾效果。

针对上述论文存在的不足,本文提出一种基于暗通道补偿和透射率修正的图像去雾算法,针对传统暗通道去雾算法在天空区域出现的色彩失真问题,本文使用均值滤波对暗通道进行补偿,利用获得的补偿暗通道对大气光值的预估方法进行了优化;针对传统暗通道去雾算法出现的细节缺失问题,本文根据像素点到大气光点距离的远近修正了初始透射率的值,并利用快速引导滤波对图像的透射率进行了细化。实验结果表明,本文算法处理后的图像色彩保真度较高,亮暗分布合理,同时算法的运行时间较短,符合实际视频识别的要求。

1 传统的暗通道去雾算法

1.1 大气散射模型

文献[12]提出了著名的大气散射模型,它被广泛地运用于计算机视觉领域之中,其公式可以表示为:

I(x)=J(x)t(x)+A(1-t(x))

(1)

式中:x表示单个像素的坐标;I(x)表示待去雾图像;J(x)表示去雾后的图像;A表示全球大气光成分;t(x)表示图像的透射率。图像去雾的核心就是通过合理地预估出待去雾图像的大气光以及透射率的值,实现有雾图像的去雾化。

1.2 暗通道去雾算法

暗通道先验是He等[7]发现的一种先验规律,他们从大量的无雾图像中发现,一幅图像的非天空区域的三个通道中至少有一个通道的灰度值较低,且趋近于零,其公式可以表示为:

(2)

式中:Jdark表示去雾图像的暗通道图;Ω(x)表示最小值滤波的滤波窗口;c表示彩色图像的RGB三个通道;y表示单个像素的坐标;Jc(y)是去雾图像J(y)在RGB三个颜色通道中的分量。

假设大气光值是一个已知的常量,将式(1)两边同时除以RGB通道下的大气光值Ac,得到式(3)。

(3)

式中:Ic(x)和Jc(x)分别表示RGB通道下的待去雾图像以及去雾后的图像。

(4)

式中:Ic(y)和Jc(y)分别是I(y)和J(y)在RGB三个颜色通道中的分量。

根据暗通道的先验条件,可将式(3)变形为式(5),求得图像的透射率为:

(5)

式中:λ是一个调节因子,用于在景深处保留少量的雾,其目的是为了保持去雾图像的真实性。

最后将上述得到的大气光值以及图像的透射率代入到式(1)中,反解求得去雾图像的表达式为:

(6)

式中:t0是一个透射率的下限阈值,其目的是防止去雾图像J(x)的值偏大导致图像过曝。

2 本文算法

2.1 暗通道补偿

传统的暗通道去雾算法[7]在有雾图像转换为暗通道图的过程中,使用的是最小值滤波,将其直接作用于有雾图像的RGB通道的最小值图像上,如式(4)所示,这一方法在大多数图像上都能取得不错的效果,但是,当两个邻近像素点之间的像素值差异较大的时候,直接使用最小值滤波会减少像素值大的那一像素点的灰度值,导致透射率的预估值偏大,进而在图像中产生光晕的问题。

为了解决该问题,文献[10]采用中值滤波作用于有雾图像各通道下的最小值图像,然后再通过一个最小值滤波来补偿暗通道,文献[13]则是直接采用中值滤波替代最小值滤波,在比较了不同的滤波方法后,本文提出一种新的暗通道补偿方法,通过使用均值滤波取代最小值滤波,对有雾图像各通道的最小值图像进行暗通道补偿,其目的是为了增大滤波窗口内的灰度值,减少透射率预估时产生的误差,对应的表达式如下:

(7)

式中:Idark(x)表示原始图像的暗通道图;x和y表示单个像素的坐标;Ω1表示均值滤波的窗口;c表示彩色图像的三个通道;min()表示获得各通道下像素的最小值;mean()表示均值滤波。

图1展示了原始的有雾图像、文献[7,10,13]和本文方法的暗通道图。从图1(b)中可以看出直接将有雾图像各通道的最小值图像通过最小值滤波后,暗通道呈块状分布,在计算局部区域的透射率时容易产生较大的误差,而图1(c)中加入了中值滤波后,暗通道变得更加平滑,但是仍然无法分辨出图像中的细节,因此文献[13]舍弃了原有的最小值滤波,直接使用中值滤波补偿暗通道,如图1(d)所示,图像的细节部分得到了明显的改善,而本文使用的均值滤波,相对于中值滤波而言,图像的细节部分更为清晰,如图1(e)所示。图2展示了上述暗通道的细节放大图像。

(a)原始图像 (b)文献[7]暗通道 (c)文献[10]暗通道

(a)文献[7]暗通道细节 (b)文献[10]暗通道细节

(d)文献[13]暗通道 (e)本文暗通道图1 不同算法的暗通道

(c)文献[13]暗通道细节 (d)本文暗通道细节图2 不同算法的暗通道细节放大图

2.2 大气光值优化

传统的暗通道去雾算法首先筛选出暗通道图亮度最大的前0.1%个像素点,然后在原始图像的相同像素点中选取最大的像素点的值作为大气光的预估值。这一方法适用于不含有天空区域的图像,但是运用到包含天空区域或者白色物体的有雾图像时,则会错误地预估大气光的值。

为了解决该问题,文献[11]利用四叉树搜索算法预估大气光的值,但是该算法并不适用于天空区域较小的图像,其预估的大气光值偏小,导致图像的去雾效果不佳。因此,本文从2.1节获得的补偿暗通道中选取前0.1%个像素点的平均值替代最大值进行大气光值的预估,其公式可表示为:

A=mean(Idark(x))

(8)

同时,本文还增设了一个参数maxvalue,表示初始的最大大气光值,其目的是防止计算出的大气光值的取值接近于255(白色)而产生色彩失真的问题,这里的初始最大大气光值相当于是大气光值最终取值的一个判定条件,如果大气光值的取值大于初始最大大气光值,那么就选取初始最大大气光值作为最终的大气光值,否则就选取计算得出的大气光值作为最终的大气光值。本文在实验中发现初始最大大气光值取值为240时,图像的去雾效果较好。

结合式(8)中的大气光值的计算方法,可将本文提出的大气光值预估的公式表示为:

(9)

式中:A′表示优化后的大气光值。

2.3 透射率修正

2.3.1 初始透射率修正

经过2.1节的暗通道补偿后,可将式(4)中的透射率的计算公式修改为:

(10)

由于天空区域的灰度值并不等于0,也就是说,式(2)中暗通道等于0的条件不成立,因此需要对初始透射率进行修正。文献[14]根据边界约束理论将暗通道设置成一个非零的向量Jmin,并在实验中发现Jmin的取值范围在0.1到0.2之间时,复原后的图像去雾效果较好,因此直接选取该范围的平均值来修正初始的透射率,即Jmin=(0.15,0.15,0.15),但是其后续处理需要使用到多正则化约束的变分模型来优化透射率,计算量十分大。

因此,本文引入了一个参数d(x),用来表示像素点到大气光点的距离,其公式为:

(11)

式中:i表示彩色图像的RGB通道;xi表示像素点在i通道的分量;A′表示优化后的大气光值。

当像素点和大气光点的距离越小时,表示像素点与大气光点离得越近,进而说明像素点的值与大气光值越接近,在进行透射率的预估时将会产生误差,需要进一步修正,而像素点与大气光点的距离较大时,透射率的预估值与实际值相差不大,无须修正。因此,本文设置了一个阈值d0,用来衡量需要修正的像素的范围。在式(5)的基础上添加一个修正项,于是初始透射率的修正公式就可以表示为:

进行实验室生化试验,发现该菌具有发酵葡萄糖、蔗糖、麦芽糖等功能,不能发酵阿拉伯糖、甘露醇,在对其进行MR、VP试验后,发现呈阴性,能使明胶液化,但是不具备运动能力,不能对尿毒酶进行水解。

(12)

式中:λ是一个调节因子,用于在景深处保留少量的雾,取值为0.95;α是一个修正系数,取值为1。

2.3.2 快速引导滤波细化透射率

根据2.2节得到的大气光值A′以及修正后的初始透射率,使用式(12)即可计算出图像的透射率,然而,这种方法得到的透射率是相对粗糙的,其细节部分表现得并不清晰直观。因此,文献[9]使用引导滤波对图像的透射率做进一步细化,引导滤波是一种边缘保护的滤波方法,通过使用一幅引导图像I对输入图像p进行滤波,使得输出图像q与输入图像p的差异尽可能小,同时,输出图像与引导图像的纹理特征也基本相似,以达到保护边缘信息的目的。

引导滤波的线性模型可以表示为:

qi=akIi+bk∀i∈wk

(13)

式中:qi为引导滤波的输出图像;Ii为引导图像;ak和bk为线性函数的常数项;wk是以k为像素中心点;半径为r的滤波窗口。

为了使输入图像p和输出图像q之间的差异达到最小,可将它们的代价函数表示为:

(14)

式中:ε是一个正则化因子,其目的是避免ak取值过大。

通过最小化代价函数,即可求出细化后的透射率图像。

由于引导滤波使用的引导图一般是有雾图像的灰度图,其尺寸与原始图像的尺寸一致,当原始有雾图像的尺寸较大的时候,执行引导滤波所消耗的时间也随之增大,而在计算图像的透射率时并不需要很高的分辨率,因此,本文在此基础上提出一种快速引导滤波算法,其步骤可表示为:

步骤1将原始有雾图像缩小为原来的0.25倍,得到缩小后的图像。

步骤2对缩小后的图像进行暗通道以及透射率的计算,得到小图的粗透射率图。

步骤3使用双线性插值法对小图的粗透射率图进行插值,还原为原始图像的尺寸,得到原始图像的粗透射率图。

步骤4对原始图像的粗透射率图进行引导滤波,得到细化后的透射率图。

实验中发现多幅大小为768×1 024的图像经过快速引导滤波处理后所消耗的时间约为普通引导滤波的一半,证明本文算法能够有效地降低引导滤波的耗时。

图3展示了He等[7]提出的算法以及本文算法的透射率图像,可以看出He等的算法的粗透射率图存在块状现象,图像十分模糊,而使用引导滤波细化透射率后,可以大致地看出树叶以及草丛的分布情况,而本文算法的粗透射率图展现了更多的细节,从细透射率图中能够清晰地看出树叶以及草丛的脉络。

(a)He等的算法粗透射率图 (b)He等的算法细透射率图

(c)本文算法粗透射率图 (d)本文算法细透射率图图3 He等的算法和本文算法的透射率图比较

2.4 图像复原

(15)

式中:t0是图像透射率的一个下限阈值,取值为0.1。

2.5 本文算法流程

本文算法流程如图4所示。

图4 本文算法流程

3 实验结果与分析

为了验证本文算法的有效性,本文分别从主观评价和客观评价两个角度对图像去雾领域中较为典型的四幅有雾图像进行了实验。本实验选取的参数如下:均值滤波的窗口尺寸Ω1=3,透射率的下限t0=0.1,引导滤波的半径r=60,调整系数ε=0.000 1。

不同算法的去雾效果对比如图5所示。算法均在Intel Core i7-6700HQ CPU @ 2.60 GHz、8 GB内存的机器上采用MATLAB R2014a开发平台实现。

图5 不同算法的去雾效果比较

3.1 主观评价

经过对比度受限的自适应直方图均衡算法(CLAHE)处理后的图像的清晰度得到了一定程度的提升,可以在图像中获得更多的细节信息,但是图像整体偏向灰色,并不自然。较为明显的是第三幅图像,在经过CLAHE算法处理后,可以清晰地看到天安门周围(包含近景和远景)树木的纹理特征,但是天安门城楼这一建筑整体呈现灰色,十分暗淡。

经过保持色度的多尺度Retinex算法(MSRCP)处理后的图像的亮度得到了明显的提升,可以获得更多的细节信息,但是图像远景处的雾气并没有得到完全的消除。较为典型的是第一幅图像,经过MSRCP算法处理后,其亮度得到了提升,可以更清晰地看到图像近景处树叶的脉络,但是在楼房的墙面处仍然存在着残留的雾气,使得墙面呈现白色。

对于传统的暗通道去雾算法(DCP),从第四幅图像中可以看出该算法能够去除图像远景处的雾气,但是图像亮度整体偏暗,图像中的部分细节并不明显,从第二幅图像中可以看出该算法能够突出图像近景处的细节,人物服饰的颜色以及门板的颜色更加真实,但是从第一幅图像和第三幅图像来看,该算法处理后的图像天空区域的颜色是失真的,说明了传统的暗通道去雾算法在预估大气光值的方法上存在着误差。

对于本文算法,从最后一列图像中可以发现,相比CLAHE算法,本文算法没有偏色的问题,在颜色保真性上表现更好;相比MSRCP算法,本文算法的去雾效果更好,可以消除图像远景中残留的雾气;相比DCP算法,本文算法增强了图像近景处的细节,同时也解决了图像在天空区域出现的颜色失真问题,经过本文算法处理后的图像更加真实,符合人眼观察。

3.2 客观评价

本文采用峰值信噪比(PSNR)[15]、结构相似性(SSIM)[16]、运行时间作为评价图像复原质量的客观指标。二者都是基于原始图像进行比对的,峰值信噪比的值越大,代表图像的抗噪能力越强,而结构相似性分别从亮度、对比度、结构三个方面衡量了图像的相似性,其值越大代表图像的失真越小。峰值信噪比是由均方误差推导而来,均方误差对应的公式如下:

(16)

式中:I(i,j)和K(i,j)表示两个灰度图像;m和n分别对应着图像的高和宽。

而峰值信噪比对应的公式如下:

(17)

结构相似性对应的公式如下所示:

SSIM=[l(x,y)]α×[c(x,y)]β×[s(x,y)]γ

(18)

式中:l(x,y)、c(x,y)和s(x,y)分别反映了图像的亮度、对比度、结构信息;在实际运用中,一般将α、β、γ的值都设置为1。

表1展示了不同算法在峰值信噪比、结构相似性、运行时间这三个客观指标下得到的结果,可以看出,本文算法的峰值信噪比以及结构相似性较其余三个算法而言有一定程度的提升,说明经过本文算法处理后的图像的失真程度较小,能够获得高质量的图像。

表1 不同算法去雾效果的客观比较

续表1

从算法的执行时间这一角度来看,MSRCP算法所消耗的时间最长,并且图像越大,算法执行的时间越长;而DCP算法则通过引导滤波有效地降低了运行的时间,处理不同尺寸的图像所消耗的时间稳定在一定的范围内;本文算法由于使用了下采样以及双线性插值的加速方法,因此执行引导滤波所消耗的时间约为DCP算法的一半,同时,本文算法所消耗的时间基本处于50 ms~80 ms的区间内,在速度上也达到了视频识别的要求。

4 结 语

本文首先利用均值滤波对暗通道进行补偿,利用补偿的暗通道图优化了大气光值的预估方法,接着根据像素点和大气光点距离的远近对图像的初始透射率进行了修正,并使用快速引导滤波细化了图像的透射率,最后通过大气散射模型求出复原后的去雾图像。实验结果表明,本文算法能够有效地解决传统暗通道去雾算法存在的色彩失真和细节缺失的问题。同时,该算法在运行时间上也达到了视频识别的要求。然而,本文算法仍旧属于传统的图像去雾算法,近年来基于深度学习的方法也被广泛地应用于图像去雾之中,因此,未来本文的研究方向将着重于使用生成对抗网络的方法(如CycleGAN)对图像进行去雾。

猜你喜欢
透射率像素点预估
美国银行下调今明两年基本金属价格预估
基于局部相似性的特征匹配筛选算法
基于5×5邻域像素点相关性的划痕修复算法
纯色太阳镜镜片耐日光辐照性能试验研究
基于canvas的前端数据加密
基于逐像素点深度卷积网络分割模型的上皮和间质组织分割
史密斯预估控制在排焦控制中的应用
石墨烯光栅太赫兹透射特性的研究
玻璃长波透射率对普通双层中空玻璃热特性的影响
晶格常数对左手材料的能量透射率及负折射率的影响