摘要:为了解决基于暗通道先验的图像去雾算法运行效率低下的问题以及天空等明亮灰白区域去雾后的色彩失真问题,提出一种基于边缘保持滤波的单幅图像快速去雾算法。首先根据暗通道先验规律,得到粗略的透射率图和大气光估计值;然后用边缘保持滤波算法对粗略透射率滤波得到细节平滑、轮廓清晰的精细透射率图;再用阈值法对灰白明亮区域的透射率修正,之后用边缘保持滤波算法对修正后的透射率进行平滑,得到最终的透射率图。根据估计的大气光和透射率,利用大气散射模型即可恢复出无雾图像。经测试,该算法不仅具有很高的运行效率,而且对各种类型的薄雾图像都有较好的去雾效果。客观评测也表明,该算法在对比度增强程度、色调还原程度、结构信息复原程度方面的综合指标都优于其他算法。另外,所提算法还能够实现图像处理器(GPU)像素级的并行运算,对于分辨率为1280像素×1024像素的彩色图像,用型号为NVIDIA GeForce 9800 GT的GPU处理,速度可达10帧/s。
关键词:去雾算法;暗通道先验;边缘保持滤波
中图分类号:TP751.2
文献标志码:A
文章编号:0253-987X(2015)03-0143-08
图3为修正前后的透射率图,相应恢复出的去雾图像如图4所示。可以看出,经过透射率修正的算法对天空等明亮区域的处理效果要好很多,颜色没有失真,但是修正后的透射率图中出现了较明显的块效应,在灰白区域面积比较大时尤为明显,这主要是因为利用阈值的方法对透射率进行修正时,对灰白区域的透射率放大了k倍,使得原本平滑的透射率变得不平滑。
1.4边缘保持滤波平滑修正后的透射率
为了消除修正透射率图中的块效应,本文仍然采用边缘保持滤波对其平滑。图5、图6给出了用边缘保持滤波对修正后的透射率进行平滑前后的对比图,以及相应复原的对比图像。可以看出,平滑后的透射率图,整体过渡平滑、浑然一体,与实际情景更为接近,复原图的颜色也更明亮。在估计出大气光、场景透射率之后,即可根据式(1)所示的大气散射模型复原无雾图像。
2算法的并行度、时间复杂度分析
表1给出了本文提出的快速去雾算法主要包括的6个步骤及其主要实现的运算,并分析了最大并行度。根据结果可知,本文提出的算法能够实现像素级的并行运算,且可以通过GPU实现加速。
本文提出的边缘保持滤波算法的另一个重要优势是时间复杂度低,仅为O(N)。因为算法运行时间与滤波半径无关,所以可任意选择滤波半径,再通过式(12)~式(16)得到输出结果。这些式中的所有求和运算都能用box filter实现,box filter可由时间复杂度为O(N)的图像积分技术实现,因此边缘保持滤波的时间复杂度也是O(N)。
3测试结果及分析
基于上述算法以及实现过程,分别从图像复原质量主/客观评测、算法运行效率评测两个方面对本文算法进行了测试,并给出了测试结果。另外,由于大多数文献都与He算法进行了对比测试,为了有一个统一的参考评判标准,本文也包含了与He算法的去雾效果对比、算法效率对比。
3.1图像复原质量主、客观评测
为了全面评测本文算法去雾图像的质量,本文选取了4幅具有代表性的图像:不包含天空区域的房屋图像;包含少量天空区域的故宫图像;天空区域占一半的风景图像;包含大片天空区域的公路图像。同时,分别用本文算法、He算法、Zhang算法、Sun算法和Shi算法进行去雾,测试结果如图7所示。
主观来看,He算法复原后的图像整体偏暗,而且对天空等灰白区域的处理效果不好,尤其是浓雾情况下,复原图像的天空出现了明显的色彩失真。Shi的算法是基于软件抠图算法的改进算法,即不对整幅图像进行计算,只对梯度变化大的地方进行计算,从而减少了计算量,所以Shi算法的去雾效果和He算法比较接近。Zhang算法复原后的图像整体亮度偏高,但对不含天空的图像去雾处理后色彩过于饱和、浓重,且对包含大面积天空区域的图像去雾处理后略有颜色失真。Sun算法复原后的图像整体泛黄,且有相当高的局部亮度,这是因为该算法中的大气光强度估计值是通过减去固定常数(文献[10]取值30)而得到,因此天空等灰白区域复原的时候容易计算溢出,即为纯白色。综合来看,本文算法对各类型图像都取得了比较好的复原效果,既没有色彩失真,也没有颜色过饱和的问题,比较自然。
参考目前已有的图像质量评价方法,本文从对比度增强系数、色彩还原程度和场景结构信息还原能力3个方面对去雾图像质量进行客观评价,如表2~表5所示。从结果可以看出:He算法对含有大量灰白区域的图像复原后色彩有些失真,色调还原程度为负值;Sun算法对含有天空等灰白区域的图像复原后出现了亮度饱和现象,且在所有的对比算法中,有着过高的对比度增强系数;本文算法在对比度增强系数、色调还原程度和结构相似度上,都没有弱项指标,整体去雾效果和综合指标要优于He算法、Shi算法、Zhang算法和Sun算法。
3.2本文算法与其他算法的运行效率对比测试
为了评估本算法运行效率,基于Matlab平台,对多种算法的运行时间进行测试统计。选择4张不同大小的含雾图像,分别用本文算法、Sun算法、Shi算法和He算法去雾。
从图8的测试结果可以看出:本文提出的快速去雾算法相对于He算法,速度提升了15倍以上,且随着图像尺寸增加,速度提升越高;Shi改进了He的软件抠图算法,减少了40%左右的计算量,但是算法本身的复杂度并没有降低。另外,本文算法的效率也比Sun算法的效率高1倍左右,这是因为Sun算法通过灰度膨胀、腐蚀运算得到粗略透射率之后,在其优化过程中需要求解暗通道的联合直方图,这一求解过程占用了大量时间,而且为了保证良好的去雾效果,Sun算法还需要手动调整灰度膨胀、腐蚀的半径,算法缺乏自适应性。
为了测试GPU对本文算法的加速效果,需要分别测试基于CPU和GPU的算法运行时间。选择9张不同大小的含雾图像,分别用基于CPU的本文算法、基于CPU和GPU联合的本文算法对其去雾,并且记录运行时间。图9给出了2个版本算法的运行时间和加速比,不包括图像数据读取和写入过程。测试结果可以看出,对于396kB以上的图像,采用CPU和GPU联合方式相对于传统CPU方式,运行效率有明显提升,并且随着图像分辨率的增加,效率提升愈加明显。因此,GPU在大幅面、高速去雾(甚至视频去雾)方面有着CPU无可比拟的优势。
由于目前采用GPU实现图像去雾的算法只有Zhang算法,因此为了评估本文算法在GPU中的执行效率,将Zhang算法和本文算法在GPU中的运行时间进行了对比测试。选择5张不同大小的含雾图像,分别记录两种算法的去雾时间,对比结果如图10所示,测试时间不包括图像数据的读取与写入。测试结果表明:本文算法与Zhang算法的运行速率随图像尺寸的增加呈大致线性增长趋势;本文算法的运行效率要优于Zhang算法,对同样大小的图像,平均运行速率要比Zhang算法快2~3倍;Zhang算法有5个参数需要人工调整,如果算上人机交互的过程,完成一幅图像的去雾时间至少要在上述结果的基础上增加10倍。综合来看,本文算法的运行效率更高,且由计算机独立完成,无需人工干预。
4结论
本文提出了基于大气散射模型和暗通道先验的单幅图像快速去雾算法。首先针对暗通道先验去雾算法中透射率优化部分计算复杂、运行效率低下的问题,提出了一种边缘保持滤波算法对透射率进行优化,显著降低了计算复杂度;其次,针对暗通道先验去雾算法对灰白明亮区域处理后色彩失真的问题,用阈值方法修正透射率,并对修正后的透射率用边缘保持滤波进行平滑;最后,利用大气散射模型复原出无雾图像。主观评测表明,本文提出的算法能够有效提高处理后的图像质量;客观评测表明,本文提出的算法在对比度增强程度、色调还原程度、结构信息复原程度方面的综合指标都优于He、Shi、Zhang和Sun算法,而且GPU实现的算法速度更高,在1280像素×1024像素的分辨率下,处理速度可达10帧/s。