石 磊,盖志刚
(山东省科学院 海洋仪器仪表研究所,山东 青岛266001)
有雾图像的对比度和能见度都有所下降,这直接影响航空、水运和公路交通出行,使得各种户外监视系统也无法获得清晰图像。因此,具有鲁棒性的图像去雾算法对提高视觉系统的识别与定位能力具有重要意义。
增加有雾图像的清晰度是一个具有挑战性的问题,雾气本身也与深度信息有关,早期的图像去雾算法多依赖多个输入图像或者是额外的信息。在文献[1]中,作者用多幅偏振光图像来执行去雾。Narasimhan 等人在文献[2]里提出了通过不同天气情况下的图像获得更多的对比度的信息来去雾。Kopf[3]等人的方法则需要来自对应图像或者已知的三维模型的深度信息。
基于单一图像的去雾算法最近几年取得了很大的进步。Tan 等[4]通过扩大复原图像的局部对比度来达到去雾,但他忽视了透射率,结果中的一些色彩经常会出现过饱和。Fattal等[5]假定透射率和表面投影在局部是不相关的,通过估算景物的反射率,来推断景物光的透射率。但该方法需要足够多的颜色信息,当雾气浓度较大的时候效果也不理想。Kim等[6]提出了一个能量函数(Cost function),通过最小化这个能量函数使对比度得到增强来实现去雾。
近来,He 等[7]提出了一种基于暗原色先验的单一图像去雾方法,对户外图像取得了良好的去雾效果;但该算法成立是建立在暗原色先验满足的条件之下,对于不满足先验知识的明亮区域,算法估计的透射率值偏小,恢复结果可能会出现色彩失真,难以达到令人满意的图像视觉效果。本文主要针对这个缺陷,提出了一种改进方法。
描述雾化图像的大气散射模型可见
式中:I(x)是的有雾图像(Haze Image);J(x)是去雾图像(Haze-free Image);t(x)是描述散射光和相机接受的光的媒介透射率;A 是全局大气光;J(x)t(x)代表的是景物光线在媒介中经过衰减后的直接衰减项;A(1-t(x))则表示由前方散射引起的大气光项。
暗原色先验[7]是通过对大约5 000 张户外图像的进行统计得出的先验知识,它假定去除掉天空等明亮区域之后,在绝大多数图像里,像素总会有至少一个颜色通道具有很低的值;取最小值后的图像可被称为暗原色图像JDark。
假设大气光A 给定,且在局部区域的透射率保持不变;则对式(1)应用暗原色先验可得透射率
式中:Ac(c∈R,G,B);Ω(x)是以x 为中心的一块区域。如果彻底地消除雾,图像深度感会丢失,可以通过在方程(2)中引入一个常数ω,保留部分远景处的雾,有
为了提高精度,文献[7]应用一种图像抠图(Image matting)算法[8]来精炼透射率图。精炼透射率函数后,可由式(4)求得去雾后的图像J(x)
式中:文献[7]的方法取to 值为0.1。估计大气光A 的方法为:先选取暗原色图像JDark中亮度较大的前千分之一的像素点,然后取这些像素点对应在原图I(x)中的最大值作为A 的值。注意A 值对应的像素点可能不是最亮的点[7]。也就是说,在图像的明亮区域可能会有某个像素的R,G,B 值大于A的情况。
对于多数户外有雾图像,图像中的大部分像素点都满足暗原色先验。在文献[7]里,何对大约5 000 张图像进行统计,发现大约75%的暗原色图像里的像素值是0,大约90%的暗原色图像里的像素值小于25;即暗原色像素值分布总体偏低,其像素值趋近于0,暗原色假设基本成立,因此恢复效果较好。但是由于是利用图像抠图(Image matting)[8]来进行透射率的精炼,导致速度较慢;随后不久,何提出了一个边缘保持滤波器——导向图像滤波器[9],并将之应用到透射率函数的精炼上,极大加快了速度。该算法是目前比较经典的算法。本文借鉴了这个算法,提出了一个基于暗原色先验与反图像的去雾算法。
当含雾图像包含天空等明亮区域时,基于暗原色先验的去雾算法[7]处理的结果可能会出现色彩失真。通常这些明亮区域偏白色(亮色),像素R,G,B 通道值的差异也不大,都接近于大气光值A;区域内也找不到暗原色点,暗原色假设在这些区域是不成立的。
如果不考虑暗原色先验,由式(1)可得
在某些明亮区域(譬如说天空区域)I(x)值约等于A 值,分母中的这一项不为零值更接近于1,式(5)中分母值也可能会很小,因此实际的透射率总要与远大于根据暗原色先验估计的透射率。这时依据式(3)来计算透射率时所得的值较小,再利用式(4)来恢复无雾图像就不准确。
当取to 值为0.1 时,只能限制透射率不能小于0.1,实际得到的值仍很小;此时,如果I(x)值小于A 值,小到一定程度,就可能会被放大到一个非常大的值,这时的J(x)值会变得很小;尤其是当其他通道值大于A 时,由式(5)所得J(x)值就会大于A,反差将会变得很明显,类似天空的明亮区域就会有色彩失真现象出现。可见若本文选择to=1.0,在明亮区域依据式(3)得到的透射率值过低。
合肥工业大学的蒋建国等[10]人增加了一个可控参数K用以调节透射率,当小于K 时,这个区域可能是明亮区域,重新计算透射率,K 是经验值,蒋令大于K 处,则认为是符合暗原色先验。孙小明等[11]做法和蒋建国的方法类似,也是通过的大小判断是否属于明亮区域,然后调整透射率值,取K=80。王广义等[12]的则是进行基于梯度阈值的天空分割,分割后将天空区域的透射率设定成了一个经验值。邓瑚等[13]的方法也是先将明亮区域从图像中分离出来,然后分别进行直方图均衡。韩国的Kim 等人[6]的算法通过最小化能量函数使对比度得到增强,他们在处理色彩失真时直接设to 等于0.3。这些方法都能在一些场合消除明亮区域的色彩失真,但是这些依赖经验值的方法并不能完全杜绝色彩失真;如果分割出天空区域再分别处理,也会增加计算量。
综上所述,可以看到当图像中的区域满足暗原色先验时,依据式(8)来计算透射率相对比较准确,也不会出现色彩失真现象;当区域像素属于明亮区域,不满足暗原色先验,依据式(3)来计算透射率值较小,就可能出现色彩失真。换句话说,如果能调整明亮区域的像素值使之满足暗原色先验,那就可以按照式(3)来计算透射率,所得到的值相对较为准确,也就较大。依据这个思路,本文提出了一种新方法来克服色彩失真。
算法的流程可描述如下:
1)根据原始输入图像进行图像反色,分别计算原图像、反色图像的暗原色图像,并进行最小值滤波;
2)使用微软研究院何文中[7]的方式分别求取全局大气光值;
3)依据式(3)分别计算初始的透射率图;
4)用导向滤波器(Guided image filtering)[9]分别获取精细的透射率图;
5)求取这2 个透过率图的最大值作为最终的透过率值;
6)通过式(4)计算去雾后的像素值。
流程框图见图1。
本文所有实验图片均来自网络。实验中,最小值滤波模板是9×9,ω 取0.95。透射率精炼都使用导向滤波器(Guided image filtering)[9]的算法;但是为了便于对比算法的效果,最后结果都没有进行增强亮度的处理;编程中直接使用了OpenCV 图像处理库,库版本号为2.4.1。在一台中央处理器(CPU)为2.0G Intel Pentium 4 Processor、4 Gbyte 内存,操作系统为64 位Windows 7 的台式机上处理有雾图像。实验内容验证了本文提出的算法在天空等明亮区域避免色彩失真的作用。
实验分别利用了4 张样本图像,它们都有较大面积天空等明亮区域。用本文提出的算法分别进行处理后,然后再跟用文献[10]的方法及何[7]的方法处理的结果进行对比,结果见图2。从4 个样本图像的结果(图2b)可以看出,当选择有较大面积天空等明亮区域的样本时,使用文献[7]的算法处理会产生色彩失真;使用文献[10]的算法处理(图2c),某些场合可以避免色彩失真,但是在一些场合(诸如第二个样本)还是会发生色彩失真,同时观察这几个处理结果还会发现在天空等处处理结果有些偏亮,也就是说透射率值估算的稍大,可见取经验值来校正透射率不能保证适合所有的情况;用本文的方法(图2d)则可以避免色彩失真现象发生,且去雾后的视觉效果也没有降低。本文算法还有一个缺陷,就是由于还要计算反图像,计算量增加,耗时增多。在实际应用中,可以考虑先将输入图像缩小,然后再进行去雾处理,最后将结果恢复成原先大小,可参考文献[14]做法,此过程本文不再一一赘述。
图1 算法的流程框图
图2 3 种方法处理结果的对比
综上所述,从图2 的实验结果可以看出,相比原算法[7]和文献[10]的算法,改进算法可以有效避免在大面积明亮区域的出现色彩失真现象;算法也不依靠某一个经验值,去雾结果更加符合实际情况,视觉效果更令人满意。
本文对基于暗原色先验的去雾算法进行了理论分析和实验观察,然后提出了一种改进算法。本文首先计算原图像的反色图像,然后再分别计算原图像与反色图像的透射率图,然后取最大值构建新的透射率图,进而恢复去雾图像。该算法可以更加有效地处理包含大面积明亮区域的雾化图像,使用效果较佳。
[1]OAKLEY JOHN P,SATHELEY BENDER L. Improving image quality in poor visibility conditions using a physical model for contrast degradation[J]. IEEE Trans. Image Processing,1998,7(2):167-170.
[2]NARASIMHAN S G,NAYAR S K. Contrast restoration of weather degraded images[J]. IEEE Trans. Pattern Analysis And Machine Intelligence(PAMI),2003(25):713-724.
[3]KOPF J,NEUBERT B CHEN B,et al. Deep photo:model-based photograph enhancement and viewing[C]//Proc.ACM SIGGRAPH 2008.Los Angeles,USA:ACM Press,2008:1-6.
[4] TAN R T. Visibility in bad weather from a single image[C]//Proc.2008 IEEE Conference on Computer Vision and Pattern Recognition(CVPR). Washington DC,USA:IEEE Press,2008:1-8.
[5]FATTAL R. Single image dehazing[C]//Proc. ACM SIGGRAPH 2008.Los Angeles,USA:ACM Press,2008:1-9.
[6]JIN-HWAN K,WON-DONG J,JAE-YOUNG S,et al.Optimized contrast enhancement for real-time image and video dehazing[J].Journal of Visual Communications and Image Representation,2013,24(3):410-426.
[7]HE K M,SUN J,TANG X OU. Single image haze removal using dark channel prior[C]//Proc.2009 IEEE Conference on Computer Vision and Pattern Recognition(CVPR). Miami,Florida,USA:IEEE Press,2009:1956-1963.
[8]LEVIN A,LISCHINSKI D,WEISS Y. A closed form solution to natural image matting[C]//Proc.2006 IEEE Conference on Computer Vision and Pattern Recognition(CVPR). New York:IEEE Press,2006:61-68.
[9]HE K M,SUN J,TANG X OU.Guided image filtering[J].IEEE Trans.Pattern Analysis And Machine Intelligence(PAMI),2013,35(6):1397-1409.
[10]蒋建国,侯天峰,齐美彬.改进的基于暗原色先验的图像去雾算法[J].电路与系统学报,2011,16(2):7-12.
[11]孙小明,孙俊喜,赵立荣,等.暗原色先验单幅图像去雾改进算法[J].中国图象图形学报,2014,19(3):381-385.
[12]WANG Gangyi,REN Guanghui,JIANG Lihui,et al. Single image dehazing algorithms based on sky region segmentation[J].Information Technology Journal,2013,12(6):1168-1175.
[13]邓瑚,王延杰,李静宇,等. 天空区域图像的增强算法的改进[J].激光与红外,2012,42(9):1080-1085.
[14]章郡锋,吴晓红,黄晓强,等.基于暗原色先验去雾的改进算法[J].电视技术,2013,37(23):192-225.