唐晓庆,范赐恩,刘鑫
(武汉大学电子信息学院,430079,武汉)
基于边缘保持滤波的单幅图像快速去雾
唐晓庆,范赐恩,刘鑫
(武汉大学电子信息学院,430079,武汉)
为了解决基于暗通道先验的图像去雾算法运行效率低下的问题以及天空等明亮灰白区域去雾后的色彩失真问题,提出一种基于边缘保持滤波的单幅图像快速去雾算法。首先根据暗通道先验规律,得到粗略的透射率图和大气光估计值;然后用边缘保持滤波算法对粗略透射率滤波得到细节平滑、轮廓清晰的精细透射率图;再用阈值法对灰白明亮区域的透射率修正,之后用边缘保持滤波算法对修正后的透射率进行平滑,得到最终的透射率图。根据估计的大气光和透射率,利用大气散射模型即可恢复出无雾图像。经测试,该算法不仅具有很高的运行效率,而且对各种类型的薄雾图像都有较好的去雾效果。客观评测也表明,该算法在对比度增强程度、色调还原程度、结构信息复原程度方面的综合指标都优于其他算法。另外,所提算法还能够实现图像处理器(GPU)像素级的并行运算,对于分辨率为1 280像素×1 024像素的彩色图像,用型号为NVIDIA GeForce 9 800 GT的GPU处理,速度可达10帧/s。
去雾算法;暗通道先验;边缘保持滤波
计算机视觉和数字图像处理技术的飞速发展,使其在智能交通、遥感监测、资源勘查等诸多领域都得到了广泛应用。然而,在恶劣的天气条件下,如雨雪、雾霾等,室外的计算机视觉系统受到大气中随机介质的影响,导致成像传感器采集的景物图像在一定程度上退化和降质。为了提高计算机视觉系统在恶劣天气下工作的鲁棒性和可靠性,研究图像去雾技术具有非常重要的意义。
2008年,Tan通过最大化复原图像局部对比度来获得清晰的图像[1],但是该方法在场景深度突变区域会有“光晕”,并且恢复出的图像过于饱和。Fattal使用基于独立分量分析的方法估计场景的反射率,再利用马尔可夫随机场模型推断图像颜色,恢复无雾图像[2],由于数理统计需要场景结构具有足够多的颜色信息,所以对浓雾天气下颜色暗淡的图像复原效果不好。He经过对大量户外无雾图像统计得出暗通道先验规律[3],利用图像暗通道直接估算环境光和图像透射率,再利用软件抠图算法对透射率进行优化,使得细节更加清楚,最后根据大气散射物理模型恢复无雾图像,但是软件抠图算法复杂度高、内存消耗大。为此,有人提出用双边滤波代替软件抠图[4-5],计算量并没有明显降低。文献[6]使用边缘算子,从粗略透射率图中提取边缘,再用差值抠图法优化透射率,平均计算时间仅降低了近一半。文献[7]采用图像分块的方法估计透射率,以降低算法时间复杂度,但是透射率图的块效应最终也会造成复原图像的块效应。Zhang提出基于图像处理器(GPU)加速的实时图像去雾算法[8],运行速率可达80帧/s,但是需要用户设置部分去雾参数,否则去雾效果很差,尤其是对天空区域,颜色失真很严重。文献[9]采用了图像复原和增强相结合的混合去雾算法,取得了较好的雾霾退化和光照均衡效果,但是仍然存在天空区域变暗的问题。为此,Sun采用减去固定值的方式修正大气光强度[10],但是该方法对不同暗通道亮度的图像具有较差的适应性。文献[11]对图像边缘和非边缘分别采用不同的模板处理得到透射图,并通过分割天空或者雾最浓区域求得准确的大气光值,但该方案对大气光不连续的图像复原效果很差。
本文的主要研究内容是基于大气散射模型的快速图像去雾算法及GPU实现的。首先提出了一种边缘保持滤波算法对粗略透射率进行优化,该算法具有极低的运算复杂度并能够做并行化处理;其次针对接近大气光的区域处理后颜色失真的问题,提出了透射率修正方法,并利用边缘保持滤波算法对修正后的透射率图进行平滑,再利用大气散射模型恢复无雾图像;最后用GPU实现了本文提出的快速去雾算法,极大提高了算法的运行速度,能够满足对效率和实时性要求更高的场合。
1.1 大气光的估计和粗略透射率的估计
目前广泛使用的雾图形成模型是由大气散射模型变形而来,即
I(x)=J(x)t(x)+A(1-t(x))
(1)
式中:I(x)表示设备获取到的图像;J(x)表示场景辐射亮度,也是要恢复的图像;A表示大气环境光;t(x)表示介质传输率,也称透射率。雾霾天气下的图像复原问题就是从I(x)中恢复出J(x)。
暗通道先验规律是通过对大量户外无雾图像进行观察统计得出的,在非天空的很多局部区域,一些像素点有至少一个颜色通道的亮度值很小。因此,对含雾图像在n×n的区域内做3个通道的最小值滤波,即可得到暗通道[12]
(2)
式中:Jc代表J的某一个颜色通道;Jdark代表J的暗通道;Ω(x)表示以x为中心的一块n×n的方形区域。
根据暗通道先验规律,通常无雾图像的暗通道像素亮度很小,趋近于0,所以含雾图像的暗通道像素亮度与雾的浓度非常接近,因此可以利用图像的暗通道估计大气光。选取暗通道中亮度最大的0.1%像素,并在这些像素点所对应位置寻找原始图像中亮度最大的像素点作为大气光的估计值A。
(3)
最小值操作在3个颜色通道中独立进行。将式(3)两边同时除以大气光Ac,即可得到3个颜色通道各自归一化的暗通道像素值
(4)
将式(4)的3个颜色通道取最小值,得到所有通道归一化后的暗通道像素值
(5)
根据暗通道先验规律,在无雾图像中暗通道像素的亮度趋近于0,即
(6)
由于大气光的值为正常数,因而
(7)
将式(7)带入式(5)中,得到图像在Ω(x)区域的透射率估计值
(8)
(a)含雾图 (b)粗略透射率图图1 含雾图及其粗略透射率图
可以看到,由式(8)得到的透射率图有明显的块效应,这是因为在计算暗通道时采用了块操作,为了消除块效应,必须对透射率进行优化。
1.2 边缘保持滤波优化粗略透射率
粗略透射率的优化一直以来都是暗通道去雾的核心内容,理想的优化应该能够在对图像进行平滑的同时也能够有效保持图像边缘[13]。基于这一思想,本文提出了一种边缘保持滤波算法来优化粗略透射率。图像边缘保持滤波器的输入包含待滤波图像p和参考图像I,滤波器输出q表示为加权和的形式
(9)
式中:i、j是像素序号;滤波核Wij是引导图像I的函数,与输入图像无关。边缘保持滤波假设滤波器是关于参考图像和输出图像的一个局部线性变换,在以像素k为中心的局部邻域wk内,输出图像q是参考图像I的一个线性变换
qi=akIi+bk, ∀i∈wk
(10)
式中:ak、bk为线性系数,且在wk内为常数。由于q=aI,即引导图像与输出图像的梯度是线性关系,所以只在引导图像有边缘的地方,输出图像才会有边缘。通过最小化输出与输入图像之间的差得到式(10)的解,即
(11)
式中:ε是防止ak过大的正则参数。用线性回归的方法得到式(11)的解为
(12)
(13)
对输入图像p的所有像素都用上述方法计算,再对wk邻域内的ak和bk取平均,得到线性系数
(14)
(15)
最后滤波器的输出为
(16)
可以证明,用这种方法得到的滤波器输出是满足式(9)的,且滤波核系数的表达式为
(17)
下面分两种情况,可以直观地讨论边缘保持滤波在对图像进行平滑的同时也能够有效保持图像边缘的原理。
(1)如果引导图像I在邻域wk内不存在明显边缘,可认为Ii近似为常数,那么式(11)的解为ak=0,bk=pi。根据式(10)得qi=pi,即输出图像为原来的待滤波图像,体现出平滑的特性。
(2)如果引导图像I在邻域wk内存在边缘,可认为Ii有较大的变化起伏,那么式(11)的解为ak≈1,bk≈0。根据式(10)得qi≈Ii,即输出图像为引导图像,体现出边缘的特性。图2所示为采用边缘保持滤波算法优化图1得到的粗略透射率。
(a)优化前 (b)优化后图2 边缘保持滤波算法优化粗略透射率
1.3 灰白明亮区域的透射率修正
基于暗通道先验的去雾算法对于大部分户外图像都取得了较好的去雾效果,特别是色彩丰富或是有阴影的图像,但是对于灰白明亮区域,去雾图像出现了色彩失真。这是因为暗通道先验去雾算法建立在暗通道假设之上,而明亮区域不满足这一假设,因此必须对透射率进行修正,即
(18)
式中:K是进行透射率修正的门限。只有当某点的亮度与大气光相差不超过此阈值时,才对该点的透射率进行修正。该修正方法能够更好地处理含有大面积灰白明亮区域的含雾图像,同时又没有脱离暗通道先验的假设,而且对原算法的改动很小。
图3为修正前后的透射率图,相应恢复出的去雾图像如图4所示。可以看出,经过透射率修正的算法对天空等明亮区域的处理效果要好很多,颜色没有失真,但是修正后的透射率图中出现了较明显的块效应,在灰白区域面积比较大时尤为明显,这主要是因为利用阈值的方法对透射率进行修正时,对灰白区域的透射率放大了k倍,使得原本平滑的透射率变得不平滑。
(a)修正前 (b)修正后图3 修正前后透射率
(a)修正前 (b)修正后图4 透射率修正前后的复原图
1.4 边缘保持滤波平滑修正后的透射率
为了消除修正透射率图中的块效应,本文仍然采用边缘保持滤波对其平滑。图5、图6给出了用边缘保持滤波对修正后的透射率进行平滑前后的对比图,以及相应复原的对比图像。可以看出,平滑后的透射率图,整体过渡平滑、浑然一体,与实际情景更为接近,复原图的颜色也更明亮。在估计出大气光、场景透射率之后,即可根据式(1)所示的大气散射模型复原无雾图像。
(a)平滑前 (b)平滑后图5 透射率平滑前后对比
(a)平滑前 (b)平滑后图6 透射率平滑前后的复原图
表1给出了本文提出的快速去雾算法主要包括的6个步骤及其主要实现的运算,并分析了最大并行度。根据结果可知,本文提出的算法能够实现像素级的并行运算,且可以通过GPU实现加速。
本文提出的边缘保持滤波算法的另一个重要优势是时间复杂度低,仅为O(N)。因为算法运行时间与滤波半径无关,所以可任意选择滤波半径,再通过式(12)~式(16)得到输出结果。这些式中的所有求和运算都能用box filter实现,box filter可由时间复杂度为O(N)的图像积分技术实现,因此边缘保持滤波的时间复杂度也是O(N)。
表1 本文提出的快速去雾算法的关键步骤及并行度分析
基于上述算法以及实现过程,分别从图像复原质量主/客观评测、算法运行效率评测两个方面对本文算法进行了测试,并给出了测试结果。另外,由于大多数文献都与He算法[3]进行了对比测试,为了有一个统一的参考评判标准,本文也包含了与He算法的去雾效果对比、算法效率对比。
3.1 图像复原质量主、客观评测
为了全面评测本文算法去雾图像的质量,本文选取了4幅具有代表性的图像:不包含天空区域的房屋图像;包含少量天空区域的故宫图像;天空区域占一半的风景图像;包含大片天空区域的公路图像。同时,分别用本文算法、He算法[3]、Zhang算法[8]、Sun算法[10]和Shi算法进行去雾,测试结果如图7所示。
(a)含雾图像 (b)本文算法 (c)He算法 (d)Zhang算法 (e)Sun算法 (f)Shi算法图7 图像复原质量主观评测
主观来看,He算法复原后的图像整体偏暗,而且对天空等灰白区域的处理效果不好,尤其是浓雾情况下,复原图像的天空出现了明显的色彩失真。Shi的算法[6]是基于软件抠图算法的改进算法,即不对整幅图像进行计算,只对梯度变化大的地方进行计算,从而减少了计算量,所以Shi算法的去雾效果和He算法比较接近。Zhang算法复原后的图像整体亮度偏高,但对不含天空的图像去雾处理后色彩过于饱和、浓重,且对包含大面积天空区域的图像去雾处理后略有颜色失真。Sun算法复原后的图像整体泛黄,且有相当高的局部亮度,这是因为该算法中的大气光强度估计值是通过减去固定常数(文献[10]取值30)而得到,因此天空等灰白区域复原的时候容易计算溢出,即为纯白色。综合来看,本文算法对各类型图像都取得了比较好的复原效果,既没有色彩失真,也没有颜色过饱和的问题,比较自然。
参考目前已有的图像质量评价方法,本文从对比度增强系数、色彩还原程度和场景结构信息还原能力3个方面对去雾图像质量进行客观评价,如表2~表5所示。从结果可以看出:He算法对含有大量灰白区域的图像复原后色彩有些失真,色调还原程度为负值;Sun算法对含有天空等灰白区域的图像复原后出现了亮度饱和现象,且在所有的对比算法中,有着过高的对比度增强系数;本文算法在对比度增强系数、色调还原程度和结构相似度上,都没有弱项指标,整体去雾效果和综合指标要优于He算法、Shi算法、Zhang算法和Sun算法。
表2 房屋图像复原质量的客观评测
表3 故宫图像复原质量的客观评测
表4 风景图像复原质量的客观评测
表5 公路图像复原质量的客观评测
3.2 本文算法与其他算法的运行效率对比测试
为了评估本算法运行效率,基于Matlab平台,对多种算法的运行时间进行测试统计。选择4张不同大小的含雾图像,分别用本文算法、Sun算法[10]、Shi算法[6]和He算法[3]去雾。
从图8的测试结果可以看出:本文提出的快速去雾算法相对于He算法,速度提升了15倍以上,且随着图像尺寸增加,速度提升越高;Shi改进了He的软件抠图算法,减少了40%左右的计算量,但是算法本身的复杂度并没有降低。另外,本文算法的效率也比Sun算法的效率高1倍左右,这是因为Sun算法通过灰度膨胀、腐蚀运算得到粗略透射率之后,在其优化过程中需要求解暗通道的联合直方图,这一求解过程占用了大量时间,而且为了保证良好的去雾效果,Sun算法还需要手动调整灰度膨胀、腐蚀的半径,算法缺乏自适应性。
图8 基于Matlab的算法效率比较
图9 基于CPU和GPU联合运算的算法加速测试
为了测试GPU对本文算法的加速效果,需要分别测试基于CPU和GPU的算法运行时间。选择9张不同大小的含雾图像,分别用基于CPU的本文算法、基于CPU和GPU联合的本文算法对其去雾,并且记录运行时间。图9给出了2个版本算法的运行时间和加速比,不包括图像数据读取和写入过程。测试结果可以看出,对于396 kB以上的图像,采用CPU和GPU联合方式相对于传统CPU方式,运行效率有明显提升,并且随着图像分辨率的增加,效率提升愈加明显。因此,GPU在大幅面、高速去雾(甚至视频去雾)方面有着CPU无可比拟的优势。
由于目前采用GPU实现图像去雾的算法只有Zhang算法,因此为了评估本文算法在GPU中的执行效率,将Zhang算法和本文算法在GPU中的运行时间进行了对比测试。选择5张不同大小的含雾图像,分别记录两种算法的去雾时间,对比结果如图10所示,测试时间不包括图像数据的读取与写入。测试结果表明:本文算法与Zhang算法的运行速率随图像尺寸的增加呈大致线性增长趋势;本文算法的运行效率要优于Zhang算法,对同样大小的图像,平均运行速率要比Zhang算法快2~3倍;Zhang算法有5个参数需要人工调整,如果算上人机交互的过程,完成一幅图像的去雾时间至少要在上述结果的基础上增加10倍。综合来看,本文算法的运行效率更高,且由计算机独立完成,无需人工干预。
图10 基于GPU的算法效率比较
本文提出了基于大气散射模型和暗通道先验的单幅图像快速去雾算法。首先针对暗通道先验去雾算法中透射率优化部分计算复杂、运行效率低下的问题,提出了一种边缘保持滤波算法对透射率进行优化,显著降低了计算复杂度;其次,针对暗通道先验去雾算法对灰白明亮区域处理后色彩失真的问题,用阈值方法修正透射率,并对修正后的透射率用边缘保持滤波进行平滑;最后,利用大气散射模型复原出无雾图像。主观评测表明,本文提出的算法能够有效提高处理后的图像质量;客观评测表明,本文提出的算法在对比度增强程度、色调还原程度、结构信息复原程度方面的综合指标都优于He、Shi、Zhang和Sun算法,而且GPU实现的算法速度更高,在1 280像素×1 024像素的分辨率下,处理速度可达10帧/s。
[1] TAN R T. Visibility in bad weather from a single image [C]∥IEEE Conference on Computer Vision and Pattern Recognition. Piscataway, NJ, USA: IEEE, 2008: 1-8.
[2] FATTAL R. Single image dehazing [J]. ACM Transactions on Graphics, 2008, 27(3): 72.
[3] HE K, SUN J, TANG X. Single image haze removal using dark channel prior [J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2011, 33(12): 2341-2353.
[4] ZHANG J, LI L, YANG G, et al. Local albedo-insensitive single image dehazing [J]. The Visual Computer, 2010, 26(6/7/8): 761-768.
[5] 王森, 潘玉寨, 刘一, 等. 提高雾天激光主动成像图像质量的研究 [J]. 红外与激光工程, 2013, 42(9): 2392-2396. WANG Sen, PAN Yuzhai, LIU Yi, et al. Image quality improvement of laser active imaging in fog [J]. Infrared and Laser Engineering, 2013, 42(9): 2392-2396.
[6] 石文轩, 詹诗萦, 李婕. 一种边缘优化的暗通道去雾算法 [J]. 计算机应用研究, 2013, 30(12): 3854-3856. SHI Wenxuan, ZHAN Shiying, LI Jie. Dark channel prior dehazing algorithm based on edge optimization [J]. Application Research of Computers, 2013, 30(12): 3854-3856.
[7] 孙小明, 孙俊喜, 赵立荣, 等. 暗原色先验单幅图像去雾改进算法 [J]. 中国图象图形学报, 2014, 19(3): 381-385. SUN Xiaoming, SUN Junxi, ZHAO Lirong, et al. Improved algorithm for single image haze removing using dark channel prior [J]. Journal of Image and Graphics, 2014, 19(3): 381-385.
[8] ZHANG J, HU S. A GPU-accelerated real-time single image de-hazing method using pixel-level optimal de-hazing criterion [J]. Journal of Real-Time Image Processing, 2012: 1-12.
[9] 李权合, 查宇飞, 熊磊, 等. 雾霾退化图像场景再现新算法 [J]. 西安电子科技大学学报, 2013, 40(5): 99-106. LI Quanhe, ZHA Yufei, XIONG Lei, et al. Novel method for haze degraded image scene rendition [J]. Journal of Xidian University, 2013, 40(5): 99-106.
[10]孙伟, 李大健, 刘宏娟, 等. 基于大气散射模型的单幅图像快速去雾 [J]. 光学精密工程, 2013, 21(4): 1040-1046. SUN Wei, LI Dajian, LIU Hongjuan, et al. Fast single image fog removal based on atmospheric scattering model [J]. Optics and Precision Engineering, 2013, 21(4): 1040-1046.
[11]褚宏莉, 李元祥, 周则明, 等. 基于黑色通道的图像快速去雾优化算法 [J]. 电子学报, 2013, 41(4): 791-797. CHU Hongli, LI Yuanxiang, ZHOU Zeming, et al. Optimized fast dehazing method based on dark channel prior [J]. Acta Electronica Sinica, 2013, 41(4): 791-797.
[12]LEVIN A, LISCHINSKI D, WEISS Y. A closed-form solution to natural image matting [J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2008, 30(2): 228-242.
[13]HE K, SUN J, TANG X. Guided image filtering [M]. Berlin: Springer, 2010: 1-14.
(编辑 赵炜)
A Fast Haze Removing Algorithm of Single Image Using Edge Preserving Filtering
TANG Xiaoqing,FAN Ci’en,LIU Xin
(School of Electronic and Information, Wuhan University, Wuhan 430079, China)
A fast haze removing algorithm of single image is proposed to solve the problem that the image dehazing algorithm using dark channel prior is of low efficiency and the color distortion of the bright grey area happens after dehazing. The algorithm is based on the edge preserving filtering, and first gives rough estimations of the transmittance and the atmospheric light using dark channel prior. Then, these rough transmittances are optimized through using the edge preserving filtering algorithm to get refined transmittances with smooth details and clear outlines. The bright and grey areas in the refined transmittances are corrected using a threshold, and the final transmittance image is generated by using the edge preserving filtering once more to smooth the corrected transmittances. Lastly, the atmospheric scattering model is used to recover the haze image from the estimated atmospheric light and the final transmittance image. Test results show that the proposed algorithm not only has the very high efficiency, but also has a preferable effect in dehazing all kinds of images with thin haze. It follows from the objective evaluation that the algorithm is superior to other existing algorithms in the aggregative indicators including contrast enhancement, color reduction and structural information recovery. Moreover, the proposed algorithm can be realized in pix-level parallel computation using GPU. When the NVIDIA GeForce 9 800 GT GPU is used, the processing speed reaches 10 frames per second for a range of 1 280*1 024 resolutions.
haze removal algorithm; dark channel prior; edge preserving filter
2014-07-14。 作者简介:唐晓庆(1987—),男,博士生;范赐恩(通信作者),女,博士,副教授。 基金项目:国家自然科学基金资助项目(CAST201240)。
10.7652/xjtuxb201503022
TP751.2
A
0253-987X(2015)03-0143-08