一种基于颜色衰减先验及上下文正则化的去雾增强算法
2022-04-18陆金旺王晓凯石亦琨
陆金旺,王晓凯,石亦琨
(1.山西大学 物理电子工程学院,山西 太原 030006;2.北京星途探索科技有限公司,北京 100023)
0 引 言
在水汽充足、大气稳定的情况下,相对湿度达到100%时,空气中的水汽便会凝结成细微的水滴悬浮于空中,使地面的能见度下降,这种天气现象称为雾.种类有辐射雾、平流雾、混合雾、蒸发雾等.雾阻碍光线的传播、影响成像系统、降低图像的对比度、降低物体的分辨度,因此,研究如何去除雾气的影响,对于图像增强具有非常深远的影响.
1 去雾算法概述
根据算法的不同,图像去雾算法一般分为2类.
第1类是无物理模型的去雾算法,直方图均衡化算法就是将原始图像的灰度直方图从比较集中的某个灰度区间变成全部灰度范围内的均匀分布;Retinex图像增强算法[1-2]将接收到的图像信号分为环境光照射分量与目标物体反射分量的乘积,进而在对数域求出目标物体的反射分量;自动色阶算法[3]去掉最高的像素值,去掉最低的像素值,再将图像的其余像素值进行线性映射或者伽马校正至[0, 255]区间;自适应对比度增强算法[4]将一幅图像分成高频和低频两部分,低频图像通过图像的低通滤波(平滑模糊)得到,高频图像是原图和低频图像的差值,算法增强代表细节的高频部分,然后重组得到增强的图像.
第2类是基于物理模型的图像去雾,这一系列方法基本是基于大气退化模型,代表性算法有:Fattal等[5]在原有的大气传输模型上,增加了表面阴影因子这个变量,并假设其与传输函数统计无关;He等[6-7]通过大量的实验发现:在绝大多数非天空的局部区域里,总会有一个颜色通道的像素点具有很低的值,通过这个先验从而求出透射率,这就是著名的暗通道先验理论;孙抗[8]、王燕等[9]在暗通道先验的基础上,通过改变滤波器对透射率进行快速估计;李加元等[10]在暗通道先验的基础上,将天空区域和非天空区域分开处理,从而解决天空区域处理不好的问题;谢伟等[11]通过引导滤波正则项引入权值,克服了引导滤波原本会遭遇的光晕问题;Zhu等[12]发现亮度、饱和度、雾浓度之间的先验关系,又因为雾浓度随场景深度的变化而增加,进而建立场景深度、亮度和饱和度之间的线性模型;Meng等[13]给透射率增加边界约束,并结合加权 L1范数的上下文正则化,将去雾问题建模为一个优化问题来估计未知场景的传输率;Fattal[14]提出了color lines的去雾方法,该方法指出自然场景图像的局部像素值在RGB色彩空间中呈现1维分布的规律,并利用这一规律与初始值的线性偏移量来预估含雾图像的透射图;Berman等[15-16]假设无雾图像的颜色可以很好地近似为数百种不同的颜色,这些颜色在RGB空间中形成紧密的簇,这些簇中包含的像素通常是非局部的,在有雾情况下,每种颜色簇成为一条线,即雾线,利用这些雾线恢复透射率,进而恢复出无雾的图像.
无物理模型的去雾算法没有考虑雾图的成像机制,处理后的图像存在色彩失真、细节丢失等问题,故本文选择基于物理模型的图像去雾方法.
2 去雾原理
2.1 大气散射模型
雾天成像的数学模型[17]为
I(x)=J(x)·t(x)+(1-t(x))·A,
(1)
式中:I(x)是接收到的有雾图像;J(x)是需要恢复出来的无雾图像;A是整幅图像的全球大气光成分;t(x)为光透过介质的透射率.其中的透射率又和场景深度有关,其公式为
t(x)=e-βd(x).
(2)
通过式(1),得到的恢复图像公式为
(3)
2.2 雾天成像模型
对于一幅RGB 3通道的图像,在没有雾的情况下,t(x)≈1,I(x)≈J(x),在雾气的影响下,透射率t(x)减小,说明无雾图像J(x)的成分被衰减了.同理,(1-t(x))的增加,导致(1-t(x))A增加,说明A的成分增加了.因为大气模型是线性模型,所以I(x)会沿着J(x)和A之间的直线向A靠近.去雾的目标就是将I(x)恢复成J(x).
图1 雾天成像模型
3 算法流程
本文根据输入的有雾图像,先利用颜色衰减先验知识求出输入图像的初始透射率,接着通过上下文正则化和改进的引导滤波器的方法对初始透射率进行优化,与此同时,进行大气光估计,进而恢复去雾图像,最后对恢复的图像进行对比度拉伸,得到清晰的去雾图像,算法流程如图2 所示.
图2 本文算法流程图
4 本文算法
4.1 颜色衰减先验
从图3 中可以看出,薄雾图像的像素点一般分布在V-S值为0.4~0.75之间,而浓雾图像的像素点一般分布在0.75~0.85之间.
图3 亮度、饱和度、雾度关系
基于此,Zhu等[12]提出了颜色衰减先验理论.该理论认为:亮度与饱和度的差异和有雾图像中的雾度呈正相关,又由于雾的浓度和场景深度呈正相关,所以认为亮度和饱和度之间的差与场景的深度呈正相关,即
d(x)∝c(x)∝(V(x)-S(x)),
(4)
式中:d是场景深度;c是雾度的浓度;V是场景的亮度;S是饱和度;∝ 是正相关.
Zhu等[12]建立了一个线性模型,更精确地表达亮度、饱和度、雾的浓度之间的关系,即
d(x)=θ0+θ1V(x)+θ2S(x)+ε(x),
(5)
式中:x是像素坐标;V是有雾图像的亮度分量;S是饱和度分量;θ0,θ1,θ2是未知的系数;ε(x)是随机误差系数.
Zhu等[12]通过人工合成场景深度d(x), 再利用式(1)和(2)求出θ0=0.121 779,θ1=0.959 710,θ2=-0.780 245,ε(x)=0.041 337.
4.2 上下文正则化
透射率图的深度跳跃会引发边缘伪影,为了解决这个问题,需要对透射率图进行约束,即
W(x,y)|t(y)-t(x)|,
(6)
式中:x和y是两个相邻的像素点;W(x,y)是权重函数,它的作用是当|t(y)-t(x)|过大时,通过权重函数W(x,y)使|t(y)-t(x)|趋于0,所以权重W(x,y)定义为
W(x,y)=e-‖t(x)-t(y)‖2/2α2,
(7)
式中:t(x),t(y)是相邻的透射率值;α是规定的数值,一般取0.5.
对式(6)进行离散化,即
(8)
式中:T是透射率图的索引集;wij是权重函数的离散形式,在图像领域,微分的作用就是求出像素之间的差值,因此,式(8)可以变为
(9)
式中:Dj是一阶微分算子;⊗是卷积运算符,在图像领域,Dj⊗t表示一阶微分算子对透射率图进行锐化.
式(9)可以简化为
(10)
式中:Wj是微分算子的索引集;∘表示逐元素乘法算子.
因此,式(7)可以变形为
(11)
Sobel算子对于像素位置的影响做了加权,可以降低边缘模糊程度,由于它是滤波算子,在提取边缘方面有重要作用,并且可以利用快速卷积函数,对算法进行加速,本文所用的一阶Sobel微分算子如图4 所示.
(a)
为了将透射率估计得更加准确,还需要将求解透射率问题转化为最优化问题,即求如下目标函数的最小值
(12)
为了求解式(12)的最小值,用到半二次分裂的方法加入辅助变量Hj,即
(13)
式中:Y是常数,依次取20,21,22,…,28.
通过半二次分裂的方法,求得
(14)
所求的透射率函数
(15)
4.3 改进的引导滤波器
经过上下文正则化后的透射率图有效地去除了图像的伪影,但是对于图像的边缘信息仍然有待加强,引导滤波是一种很好的保持边缘的方法,但使用引导滤波无法避免光晕的引入,需要改进,如图5 所示.
图5 透射率对比图
引导滤波函数假设输出和输入在一个二维窗口内满足线性关系
qi=akli+bk,
(16)
式中:q是输出像素的值;I是引导图像的值;i,k是像素的索引;ak,bk是当窗口中心位于K时该线性函数的系数.
对式(16)两边取梯度,可以得到
∇q=ak∇I.
(17)
同时,输出q也可以表示成
qi=pi-ni,
(18)
式中:p是q受到噪声n污染的退化图像.
为了将噪声最小化,即希望拟合函数的输出值q和真实值p之间的差距最小,将问题转化为最优化的问题,即是让式(19)最小
(19)
式中:ε是用来防止ak过大的正则化参数,其值由人为规定.经计算,对应的ak和bk分别为
(20)
(21)
从式(17)可以看出,当引导图像I有梯度时,输出图像q也会有梯度.同时可以看出,ak的大小,控制着q的梯度大小.当ak越小,qi中的梯度信息就越小,说明图像越平滑;当ak越大,qi中的梯度信息就越多,说明图像的边缘信息就越清晰.
从式(20)可以看出,ε不只是简单的参数,它能控制ak的大小.
ε的设计思路如图6 所示:当输出图像q的梯度值小于某一阈值时,说明此时的图像需要平滑,此时将ε拉高,ak将会变小;当输出图像q的梯度值大于某一阈值时,说明此时的图像需要边缘,此时将ε拉低,ak将会变大,输出图像q的梯度将会变大.
图6 ε值曲线
基于此,ε可以表示成如下函数
(22)
式中:ρ是一个常数,一般取40;τ是一个常数,一般去15;Ti表示图像的梯度,即
(23)
4.4 大气光估计
He提出了一种基于全局的大气光估计方法,先从暗通道图像中选最亮的0.1%比例像素点的位置,然后在原始图像中的这些位置上寻找对应的具有最高亮度像素点的值,并将其值估计为大气光值.有人直接选取输入图像中亮度最大像素点的灰度值作为全局大气光估计值.
本文选取图像HSV 3通道中的亮度通道,然后选取亮度通道中亮度值最大的点作为大气光估计值,即
A=max(max(V(x)),
(24)
4.5 对比度拉伸
为了使恢复出来的图像质量更高,需进行对比度拉伸.
(25)
式中:Jc是对比度拉伸后的图像;J是通过式(3)恢复的无雾图像;Jmin是无雾图像J中的最小值;Jmax是无雾图像J中的最大值.
同时,设置两个阈值将Jc中小于Jlow和大于Jhigh的值映射至区间[Jlow,Jhigh],即
Jlow=var·Jmin+(1-var·Jmin),
(26)
Jhigh=var·Jmax+(1-var·Jmax),
(27)
式中:var是图像的方差.
5 实验结果与分析
在Intel i5-1135G7@2.4 GHz,16 GB内存、64 b Win10操作系统的计算机上,通过Matlab 2018b平台,分别采用He[6-7]的暗通道去雾算法、Zhu[12]的颜色衰减先验算法、Meng[13]的边界约束算法、本文算法进行处理,为了方便起见,选择4个典型样本,分别命名为样本1、样本2、样本3、样本4.
5.1 去雾效果主观评价
图像去雾结果如图7 所示,He算法恢复出来的图像物体边缘有白色的伪影,图像的边缘信息没得到增强,且恢复出来的图像偏暗,丢失了色彩饱和度.
图7 实验结果
Zhu[12]的颜色衰减先验算法适合处理雾气浓度空间分布一致的图像,当遇到很明显雾气浓度空气分布不一致的图像(样本3、样本4),去雾效果就会减弱.Meng算法恢复出来的图像,图像的边缘细节得到提升,但是图像的雾气没有完全被消除,颜色不够自然.经过本文的算法处理后,图像的色彩更加自然,图像的的边缘信息得到了增强,图像的去雾效果较好,伪影、光晕效应等现象被有效地抑制,图像质量整体上得到了增强.
5.2 去雾效果客观评价
通过人眼去评价一幅图像带有太多的主观性,时常会因为个人的偏好而产生分歧,所以,需要一些客观的评价方法来对恢复的图像进行评判.常用的客观评价方法有峰值信噪比(PSNR)、结构相似性(SSIM)、平均梯度(AG)、运行速度.
峰值信噪比经常用做图像增强领域中的评价指标,它衡量最大值信号和背景噪声的比值,其值越大,噪声所占比值就越小,图像质量更高.
结构相似性是一种全参考的图像质量评价标准,它分别从亮度、对比度、结构3方面度量图像相似性,其值越大,说明人眼所得到的结构信息越多.
平均梯度用于衡量图像的清晰程度,其值越大,表示图像的清晰度越好.
本文选取4个样本,其中样本1的图像像素大小是376*376,样本2的图像像素大小是512*384,样本3的图像像素大小是600*400,样本4的图像像素大小是768*576.
测试结果如表1~表4.
表1 峰值信噪比对比结果
表2 结构相似性对比结果
表3 平均梯度对比结果
表4 运行时间消耗对比结果
从表1 可知,本文算法得到的峰值信噪比值普遍高于其它3种算法,说明经过本文算法的处理,噪声(雾气)被很好地抑制;从表2 可知,本文算法得到的结构相似性值普遍高于其它3种算法,说明本文算法恢复的图像结构信息更多;从表3 可知,本文算法得到的平均梯度值略高于其它3种算法,说明本文算法恢复的图像清晰度更高;从表4 可以看出,本文算法在处理小图时,算法耗时比其它3种算法更少.
综上所述,在去雾增强效果方面,本文算法在主观视觉上比其他方法有优势,在客观评价体系下,本文算法的评价指标要优于其它算法.说明本文提出的算法在去雾和增强上有很大的改善.
6 结 语
本文先利用颜色衰减验先对透射率进行估计,再利用上下文正则化和改进的引导滤波器对透射率进行优化,在消除雾气的同时,避免引起图像的伪影、光晕效应,同时,通过对比度拉伸对图像进行线性处理,使恢复出来的图像颜色更加自然.对比He,Meng,Zhu的算法,本文算法在视觉效果和客观评价指标方面有着更为优秀的表现.本文算法虽然取得了较好的主观效果,但是在处理大图的速度上和其他算法相比并无优势,这将是下一步工作的重点.