基于暗通道先验的图像去雾算法改进研究作者:郭云云徐伯庆来源:《软件导刊》2017年第09期摘要:目前,基于暗通道先验原理的图像去雾能够取得较好效果,但仍存在图像景物交界处产生光晕、天空及白色物体区域去雾后色彩失真等问题。
鉴于此,提出改进的基于暗通道先验去雾算法:首先,对暗通道图进行非重叠式滤波,消除最小值滤波导致图像交界边缘产生的光晕;然后,对输入雾霾图像进行直方图分析,能够自适应获得分割天空区域的亮度阈值;再对透射率图天空区域进行像素变换,去雾后可消除颜色失真;最后,采用非线性亮度提高的方法提升去雾图像的视觉效果。
结果表明,改进算法去雾后的图像真实、天空自然。
关键词:图像去雾;暗通道原理;像素变换;天空分割DOI:10.11907/rjdk.171527中图分类号:TP312 文献标识码:A 文章编号:1672-7800(2017)009-0046-04Abstract:Now, image haze removal based dark channel prior principle has acquired good effect, but there still are many problems that halo at the junction of scenery and color distortion of the sky and the white area. The improved algorithm: first compensating the dark channel image could eliminate halo at the junction of scenery caused by min filter; secondly, analysis of the haze image through its histogram could obtain brightness threshold to distinguish the sky self-adaptively;then,the pixels of transmission’s sky area are transformed, after haze removing , color distortion is not there; finally, the nonlinear brightness increase was used to enhance visual effect of the haze removal image. Experiments show that the improved algorithm remove image haze, the image is more real, the sky is more natural.Key Words:image haze removal;dark channel prior; pixels conversion;sky division0 引言随着科技的不断进步,计算机视觉系统在人们的生活中扮演着越发重要的角色,如交通监控、目标追踪、无人机航拍等。
但近年来,由于环境变化,雾霾天气时有发生,视觉系统获得的图像清晰度不高,给社会生活造成极大不便。
因此,图像去雾成为迫切需要研究的问题。
去雾算法大致可分为两类:基于图像成像物理模型的去雾算法和非物理模型的去雾算法。
非物理模型算法主要包括基于颜色恒常性原理的Retinex算法[2]和综合提升图像亮度、对比度的算法[3]。
非物理模型算法只考虑从视觉上增强图像的清晰度和辨识度,物理模型从更加客观可靠的图像成像原理出发,逆推出被雾霾退化的原始图像。
Tan[4]利用无雾图像对比度高于有雾图像,在马尔科夫随机场(MRF)模型的基础上构造边缘代价函数,使去雾图像的局部对比度最大,但复原出来的图像饱和度过高且有光晕效应。
Fattal[5]假设物体表面色度和介质传播局部不相关,使用独立分析的方法估计局部反照率。
由于雾图像的物体表面色度信息量有限,最终该算法复原的图像容易失真。
Tarel[8]假设大气耗散函数在局部区域内可近似估计为最大值,采用中值滤波的变形形式估计大气耗散函数,但去雾后图像易有光晕效应。
He提出暗通道先验规律,先后采用软抠图(Soft Matting)算法[6]和引导滤波[7]细化透射率图,两者都能够取得较好的去雾效果。
然而He算法对不满足暗通道先验规律的天空和白色物体区域,去雾后出现严重失真,并且交界边缘产生光晕现象。
针对上文提到的问题,提出一种改进的基于暗通道先验的去雾算法。
首先对经最小值滤波使交界边缘处暗通道估计不准确之处进行修复,然后对天空等白色区域对应透射率图像作变换,使这些区域满足暗通道先验原理,最后对透射率图细化并增强输出图像亮度对比度。
1 基本介绍1.1 大气散射光照模型在计算机视觉和计算机图像处理中,米氏散射物理模型被用来表示雾天图像的成像原理。
该模型的物理表达式为:I(x)=Aρ(x)e-βd(x)+A(1-e-βd(x))(1)式中:I为输入雾图像,A为大气光值,d为景深,β为大气散射系数,x为输入图像像素点坐标。
将式(1)简化为式(2):I(x)=J(x)t(x)+A(1-t(x))(2)其中:J即为去雾后的图像,t表示透射率图。
1.2 暗通道先验去雾算法1.2.1 暗通道先验He统计了5 000多幅图片发现,彩色图像非白色区域的每个像素点的RGB三通道中至少有一个通道具有很低的灰度值。
根据这一共性,可将输入图像的暗通道定义为:Jdark(y)=minΩ(x)(minc∈{r,g,b}(Jc(x)))(3) Jc为三通道图像,然后以Ω(x)大小的模板对三通道最小值图像进行滤波,得到暗通道图Jdark,Jdark被认为趋于0。
1.2.2 去雾步骤He算法假设大气光值A是定值,透射率在每个窗口内为常数。
基于这些假设及暗通道先验原理,推得透射率如式(4):t(x)=1-minx∈Ω(x)(mincIc(x)Ac)(4)为了保持空间透视,引入参数ω,取ω=0.95。
修正后为式(5):t(x)=1-ωminx∈Ω(x)(mincIc(x)Ac)(5)这即是粗糙的透射率图。
然后对粗糙的透射率进行细化,带入式(2),推得去雾后图像J。
J(x)=I(x)-Amax(t(x),t0)+A(6) t0为防止透射率值偏小而设定的下限值,取0.1。
2 改进算法2.1 暗通道补偿在获得粗糙透射率图的过程中,首先要得到输入图像的暗通道,关键步骤是对三通道最小值图像以Ω(x)大小的卷积模板进行最小值滤波。
He假设一个局部区域内的透射率是恒定不变的,在图像平滑区域内可以这么认为,但在景物交界处,远景的暗通道实际上大于近景的暗通道,因此造成了交界处的光晕效应。
对被估计错误的交界边缘暗通道进行修复,有助于提高透射率图的准确性。
本文在对三通道最小值图像进行最小值滤波时,模板每次移动都以最初三通道最小值图像为基础,这样避免了模板块重叠作用使远近景的暗通道被错误估计。
同时模板不宜太大,否则雾气去除不干净。
输入图像尺寸m×n,卷积模板block=max(7,(m,n)*0.01),以图1为例,观察左上角的树叶。
2.2 天空阈值分割对大量包含天空或者大面积白色区域的图像进行研究发现,其直方图灰度值较高区域都会产生累积峰值,该峰值即是图像天空及白色物体区域的灰度值累积区。
如图2为图1(a)灰度直方图。
天空与景物的交界线是本算法需要分割的区域。
由于景物和天空像素灰度值差别较大,交界线处于景深和像素灰度值突变的边缘地带,因而两者在像素上几乎没有重合。
从灰度直方图上看,两者交界区域会产生一个低谷。
本文采用基于谷底阈值的天空分割法。
Step1:对输入有雾图像进行直方图变换,得到输入图像灰度直方图。
Step2:遍历整个直方图找到所有峰值灰度级a1,a2,a3,…,an。
如果只找到一个峰值,说明图像无天空等明亮区域,直接退出天空阈值分割操作。
Step3:从所有峰值灰度级中找到灰度值最大的峰值灰度级(天空峰值灰度级)。
Step4:对比所有峰值灰度级到天空峰值灰度级的距离,选择距离最小的峰值灰度级,即最近峰值灰度级。
Step5:遍历最近峰值灰度级和天空峰值灰度级之间的灰度级,选择频次对应最少的灰度级作为分隔阈值α。
为检测谷底阈值分割法对天空区域识别的准确性,本文做了大量试验,以图1为输入图,输出天空与景物识别二值图像如图3所示。
2.3 天空去雾无雾图像的天空等明亮区域是不符合暗通道原理的。
图像景物区域像素三通道至少有一个通道值是趋近于0,而天空等白色区域三通道值很大且相近。
利用式(5)求取粗糙透射率图时,需要先获得输入图像的暗通道图。
暗通道图天空区域的灰度值与原图像天空区域的灰度值几乎相等,因此可以使用原图像天空区域分割得到的阈值对暗通道图操作。
本文算法将暗通道图中大于等于阈值的像素,即天空区域改变灰度值为b,b取0~50的定值,这样使天空区域也符合暗通道先验原理。
由于雾图像天空区域像素值和大气光A很接近,根据式(5)求得的透射率值可能趋近于0,导致式(6)得到的无雾图像白场过度,于是设置透射率下限阈值t0。
本文对暗通道图天空区域变换像素,让其符合暗通道原理,避免了透射率值的无限偏低,因此不需要设置透射率下限阈值。
无雾图像的表达式改为:J(x)=I(x)-At(x)+A(7)对于图像上明亮的天空区域,雾气作用在视觉上影响不大。
本文方法其实是对天空去雾的弱化处理[9],b值越大天空去雾越明显,经试验,选b值为20。
以图1(a)天空局部区域为例,从图4可以看出去雾后天空没有色偏。
2.4 大气光值AHe算法中假设大气光因子A是定值,并且与带雾图像天空亮度值接近。
试验检验发现,当A值过大,天空区域去雾后出现严重色偏;当A值过小,天空区域呈现高亮。
He方法在暗通道图中找到前0.1%的像素,然后取这些像素在原图中对应像素最大值作为A值的方法,无法避免白色物体的影响。
如图5所示,星号点为He算法检测的大气光值。
由于白色物体的亮度值接近250甚至更高,本文采取最简单的屏蔽方法。
设置大气光的上限阈值为240,对检测有天空阈值的图像,在其暗通道图中找到位于天空阈值和上限阈值之间的前0.1%的像素,选择这些像素在原图像的最大值作为估计A值;对无天空阈值的图像采用He方法。
实验结果显示,在本文算法基础上,使用He方法估计的大气光值,天空区域不再出现色偏等不良现象,如图4(c)所示。
2.5 亮度提升采用本文算法,在暗通道先验原理的基础上进行去雾后的图像依然整体偏暗。
为提升图像亮度,在幂次变换的基础上设计一种非线性亮度增强表达式。