2. 哈尔滨工程大学 信息与通信工程学院, 黑龙江 哈尔滨 150001
2. College of Information and Communication Engineering, Harbin Engineering University, Harbin 150001, China
中国已建成各类水库97 721座,占世界大坝总量的50%以上。不过大坝存在的问题同样严重[1]。中国大坝大多建于上世纪50~70年代,土石结构的大坝占据主要部分。1954-2005年,中国平均每年有68座大坝毁坝。中国大坝的年均溃坝率是世界平均溃坝率的4倍多。为了对大坝进行有效防治处理,视频监控必不可少。然而在大雾等极端天气下,大坝图像的能见度很低,不能有效地进行人工的监控。因此,完成对大坝图像去雾处理具有重要的意义。
去雾算法基于去雾原理可以分为图像复原与图像增强两种。基于图像增强的图像去雾算法,通过对图像本身进行一系列的处理从而达到提升对比度的效果。而基于图像复原的图像去雾算法,通过建立雾天的成像模型,研究雾天成像的机理。充分利用图像退化的知识和假设对图像进行复原。
当前的图像去雾算法已经有诸多成果。汪荣贵等[2]提出基于照度分割的局部多尺度Retinex算法。该算法通过LIP模型将图像分解成4个照度区域, 然后对各区域根据照度的差异采用相应尺度的Retinex算法进行增强, 最后通对各增强后子图进行照度融合。陈炳权等[3]提出了基于全变分Retinex及梯度域的雾天图像增强算法。算法通过迭代算法对基于Retinex的全变分能量泛函数进行求解, 从而有效地保持颜色恒常性; 采用相对梯度与绝对梯度相结合的方式拉伸雾天图像较亮处的梯度, 在全变分Retinex理论下重建增强后的雾天图像, 并将该增强算法应用到彩色图像; 最后, 加权融合基于全变分Retinex增强算法与梯度域增强算法的增强结果。分析水下成像过程提出了一种水下图像清晰化算法。孙小明等[4]提出了暗原色先验单幅图像去雾改进算法,方法通过分块思想, 完成透射率的空间自适应估计; 通过判断大气光强度和暗通道差值绝对值大小来判断雾图中是否含有明亮区域。张登银等[5]提出了一种基于暗通道先验的快速图像去雾算法。用“边缘替代法”代替原算法中的抠图处理降低了计算复杂度; 范新南等[6]提出了基于模糊集分类的单幅图像去雾算法,结局高亮度区域导致大气光强度A计算不准确以及复原图像颜色失真影响图像去雾效果的问题。宋颖超等[7]提出了尺度自适应暗通道先验去雾方法。窦智等[8]提出了内容相关的分块处理自适应图像对比度增强算法,可以自适应地处理降质图像。胡伟等[9]提出了基于暗通道优先的单幅图像去雾新方法。周雨薇等[10]利用双边滤波提出了新的去雾方法。
本文提出了基于暗通道的图像去雾改进算法,该算法可以对光学相机采集到的大坝图像进行去雾处理,有效地完成对图像中雾气的去除。并且在处理的速度上与常用的Retinex等算法相比有了很大的改进。
1 雾天退化模型雾的定义通常有下面这两种:第一,在水汽充足、微风及大气层稳定的情况下,相对湿度达到100%时,空气中的水汽便会凝结成细微的水滴悬浮于空中,使地面水平的能见度下降,这种天气现象称为雾;第二,凡是大气中因悬浮的水汽凝结,能见度低于1 km时,气象学称这种天气现象为雾[11]。
雾天情况下,空气中充满大量的悬浮小水滴以及其他的杂质颗粒。而物体的成像是景物的反射光经过大气介质各种折射之后入射到成像设备中的过程。因此,雾天空气中的介质会导致成像信息的损失,导致最后成像呈现出的雾化效果。空气中的杂质成分越多,对成像信息损失造成的影响越大。
该过程可以用式(1)来表达:
$ {E_{dt}}\left( {d, \lambda } \right) = \frac{{{E_0}\left( \lambda \right){{\rm{e}}^{-\beta \left( \lambda \right)d}}}}{{{d^2}}} $ | (1) |
对式(1)进一步进行数学推导简化,简化为
$ {E_{dt}}\left( {d, \lambda } \right) = {E_0}{{\rm{e}}^{-\beta \left( \lambda \right)d}} $ |
上述成像信息衰减过程描述了景物的反射光线在空气介质散射后入射到成像设备的过程,该过程考虑了空气介质对景物反射光的影响。然而实际中,成像光路的周围的环境光也会和空气介质发生散射作用入射到成像设备中,导致环境光也会影响到最终的成像结果。这部分影响到最后成像的环境光由于是大气产生的光,又被称为大气光。大气光对最后成像的影响可以模型化为
$ {E_a}\left( {d, \lambda } \right) = A(1-{{\rm{e}}^{-\beta \left( \lambda \right)d}}) $ | (2) |
式中A为环境光,表示的是无穷远点处的大气光,这是物理上的概念。该数学表达式表明:大气光随着d的减少而减小,随着d的增加而增加。基本呈现正相关的趋势。由上述分析的成像信息衰减模型以及大气光模型可知,空气中存在的介质以及大气光都会对最终的结果产生影响。最终成像信息也由这两部分组成,一部分是物体经空气介质散射后入射到成像设备中的光线,还有一部分是大气光和空气中介质作用后入射到成像设备中的光线,如式(3)所示:
$ E\left( {d, \lambda } \right) = {E_{dt}}\left( {d, \lambda } \right) + {E_a}\left( {d, \lambda } \right) $ | (3) |
式中:Edt(d, λ)为衰减模型,Ea(d, λ)为大气光模型。本文所用雾天成像复原算法是下面这种的简化形式
$ I\left( x \right) = J\left( x \right)t\left( x \right) + A\left( {1-t\left( x \right)} \right) $ | (4) |
式中:I(x)为输入的有雾图像I在像素点x处的值,J(x)为无雾图像,t(x) = e-βd(x)为场景点的透射率,表示的是光线透过雾的能力,由于场景越远所受雾的影响就越大,光线被空气中悬浮的粒子散射掉的就越多,因此透射率t(x)的值随着场景深度的增加而递减,当景深为0的时候,t(x)的值为1,即表示光线没有受到雾的影响而全部到达成像设备;当景深为无穷大时,t(x)为0,表示无穷远点处的光线全被空气中悬浮的粒子散射掉,该点处没有光线到达成像设备,由于现实场景景深一般介于0到无穷之间,因此t(x)的取值范围为[0, 1]。A为环境光,也是场景中无穷远点的大气光亮度;A(1-t(x))为简化后的大气光项。
通过上述对物体雾天成像原理的阐述以及表达式的推导,要完成去雾操作,可以对图像进行雾天成像的逆操作,以取消空气中介质以及大气光对物体成像造成的信息损失。算法的关键在于准确地求取表达式中各个参数的值,利用表达式求取最后的无雾图像。
2 改进的暗通道去雾算法暗通道去雾算法[9-11]是2009年在CVPR上发表的算法。算法实现可以起到很好的去雾效果。由于算法的实现复杂度很高,执行速度比较慢。算法在使用范围上有一定的限制,对实时性以及其他要求高速处理的场景不能满足要求。
在绝大多数非天空的局部区域里,某一些像素总会有至少一个颜色通道具有很低的值。换言之,该区域光强度的最小值是个很小的数。
给暗通道一个数学定义,对于任意的输入图像J,其暗通道可以用式(5)表达:
$ {J^{{\rm{dark}}}}\left( x \right) = {\rm{mi}}{{\rm{n}}_{y \in \mathit{\Omega} (x)}}({\rm{mi}}{{\rm{n}}_{c \in (r, g, b)}}{J^c}\left( y \right)) $ | (5) |
式中:Jc表示彩色图像的每个通道,Ω(x)表示以像素x为中心的一个窗口, r、g、b指3个通道。如上所述,上标c表示r、g、b三个通道。暗通道先验理论指出Jdark→0。
传统的暗通道去雾算法主要的问题就是有太多的浮点计算,速度还是不够快,考虑到基于暗通道去雾算法实现的处理精度已经很高了,在速度和精度之间如果可以做一个trade off,可以适当降低精度以提高速度,综合看会达到很好的效果。
上述的雾天退化模型表达可表示为
$ I\left( x \right) = J\left( x \right)t\left( x \right) + A\left( {1-t\left( x \right)} \right) $ | (6) |
对式(6)进行进一步的数学推导可以得到
$ \frac{{{I^C}\left( X \right)}}{{{A^C}}} = \frac{{{J^C}\left( X \right)}}{{{A^C}}}t\left( x \right) + 1-t\left( x \right) $ |
上述的C指的是r、g、b三通道。
首先假设在每一个窗口内透射率t(x)为常数,并且A值已经给定。
对上述的表达式进一步进行变形推导,可得
$ \begin{array}{c} {J^{{\rm{dark}}}}\left( x \right) = {\min _{y \in \mathit{\Omega} (x)}}({\min _c}{J^C}\left( y \right)) = 0\\ {\min _{y \in \mathit{\Omega} (x)}}({\min _c}\frac{{{J^C}\left( y \right)}}{{{A^c}}}) = 0\\ \tilde t\left( x \right) = 1-{\min _{y \in \mathit{\Omega} (x)}}({\min _c}\frac{{{J^C}\left( y \right)}}{{{A^c}}}) \end{array} $ |
这就是透射率的预估值。
实际中空气中存在着一些颗粒,看远处的物体还是能感觉到雾的影响。另外,雾的存在让人类感到景深的存在,因此,有必要在去雾的时候保留一定程度的雾,这可以通过在式中引入一个在[0, 1]之间的因子,则表达式为
$ \tilde t\left( x \right) = 1-\tilde \omega {\min _{y \in \mathit{\Omega} (x)}}({\min _c}\frac{{{J^C}\left( y \right)}}{{{A^c}}}) $ |
可以借助于暗通道图来从有雾图像中获取该值。具体步骤为:
1) 从暗通道图中按照亮度的大小取前0.1%的像素。
2) 在这些位置中,在原始有雾图像I中寻找对应的具有最高亮度点的值,作为A值。当投射图t的值小时,会导致J的值偏大,从而使图像整体向白场过度,因此一般可设置阈值T0,当t值小于T0时,令t=T0,T0默认为0.1。
因此,最终的恢复公式为
$ J\left( x \right) = \frac{{I\left( X \right)-A}}{{\max (t\left( x \right), {t_0})}} + A $ |
在实际的操作过程中,为了得到更快的图像处理速度。算法的核心思想是先快速地得到参数的值,然后利用图像信息对得到的参数进行修正。同时在求取透射率的时候不是对原图进行求取,而是先对原图进行下采样,缩小为原图的1/4,计算出小图的透射率,并将小图的透射率近似为原图的透射率。
传统暗通道去雾算法在对一个m×n大小的图像求透射率时,假设所采用的滑动窗口大小为k×k。在进行暗通道求取时需要找出3个通道的最小值,需要比较2次。求取以该像素为中心,大小为k×k的区域需要比较k3-1次。整个过程的时间复杂度为O(mnk2)。本文提出的算法在求取小图透射率时,采用空间换时间的方法,建立一种分区最小表的数据结构,通过比较表中滑动窗口对应位置的4个角的值得到该像素的暗通道。于是透射率的时间复杂度降为O(mn)。
在快速求取图像的透射率后需要利用图像信息对透射率进行一次修正增强。利用图像的边缘信息对透射率进行优化。常用的边缘检测算法如Canny算子等通常用于灰度图处理。而彩色图像到灰度图的转化会丢失大量边缘信息使得优化效果大大减弱,因此不使用。选择使用数学形态学的方法提取图像的边缘信息,进行膨胀化处理,得到图像的二值信息图。在确定最终透射率时,中心像素的透射率为周围像素透射率的加权和。权值为中心像素到周围像素欧式距离的倒数。利用图像的空间信息进一步优化。传统的暗通道去雾算法通过软抠图的方法计算优化透射率。在优化透射率的过程中需要计算大量的拉普拉斯矩阵,使得时间复杂度很高。本算法在相比传统的软抠图方法时间消耗上有了明显下降。
本算法的步骤为:
1) 快速获取图像的大气光值(取前0.1%的像素值以及设置阈值)以及透射率值(图像先下采样为原图1/4,建立分区最小表的数据结构以空间换时间);
2) 利用数学形态学提取图像边缘信息得到二值信息图;
3) 利用图像的空间信息通过加权和的方式对二值信息图进行最终的优化得到最终的透射率;
4) 利用去雾模型代入各个参数求得最终图像。
3 实验仿真与结果分析本次实验结果都是基于C++代码进行仿真实现的。使用计算机为Win10 64位操作系统,Intel I7, 2.6 GHZ处理器。
为了验证本文的算法,选择了一幅雾气下大坝的图片。同时,采用多尺度Retinex、算法暗通道去雾算法、模糊去雾[12]算法以及自适应对比度直方图算法与本文提出的算法在时间消耗以及峰值信噪比与均方方差上进行对比。
图 1为雾气下的大坝,可以看出能见度很低,大坝被雾气环绕,很难看清大坝。
Download:
|
|
图 2为使用自适应对比度直方图方法对大坝进行去雾后的效果图。可以看出经过处理后,原图中亮的地方变得更亮,暗的地方变得更暗。图像的对比度不高,均方误差值较高,峰值信噪比不高。同时算法的耗时较高。
Download:
|
|
图 3为暗通道图像去雾算法对大坝进行去雾处理。算法完成了去雾功能,均方误差较小同时峰值信噪比较高,整个图像对比度也较高,可是耗时严重,同时整体亮度值偏暗。
Download:
|
|
图 4为本文提出的改进暗通道去雾算法,算法完成了图像去雾功能,且算法耗时大幅减少,同时其他算法均方误差以及峰值信噪比也处于相近的水准。
Download:
|
|
图 5为多尺度Retinex方法去雾,图像的对比度不高,去雾效果不是很明显,同时均方误差较高,峰值信噪比较低。
Download:
|
|
图 6为模糊去雾算法,算法的耗时较低,图像的均方误差较低,可是图像的峰值信噪比也较低,同时图像整体亮度值偏暗,对比度不高。
Download:
|
|
从表 1中可以看出,本文提出的改进暗通道算法在耗时方面,远远优于常用的暗通道去雾算法、模糊去雾算法、多尺度Retinex算法以及自适应对比度直方图算法。而在表现图像质量的峰值信噪比(PSNR)以及均方误差(MSE)上,也达到了较高的水准,和常用的其他几种算法差距不大。综合时间消耗和图像去雾质量效果来说,本文提出的改进暗通道去雾算法优于常用的去雾算法,不仅能快速完成去雾操作,还能保证图像的质量。直观上来说,自适应对比度直方图算法使得去雾后图像区域亮的地方更亮暗的地方更暗。暗通道去雾与模糊去雾图像整体偏暗,使得图像整体亮度下降。多尺度Retinex去雾算法直观上去雾效果不理想,去雾后的图像仍然存在雾。而改进后的暗通道去雾算法整服图像亮度均匀,且去雾效果明显。
文中提出的改进的暗通道大坝图像去雾算法,通过雾天成像模型,利用图像退化的机理从根本上对图像进行复原。采用了先快速求参再优化求解的思想来进行图像去雾以减小时间开销。通过建立分区最小表的数据结构快速得到初步透射率,接着利用数学形态学提取图像边缘信息,以及图像的空间信息对透射率进行优化。最后运用暗通道模型得到无雾图像。实验结果表明,本文提出的改进暗通道大坝图像去雾算法在大幅度减小时间消耗的情况下,将噪声以及图像的均方误差抑制在了一个较低的水平。
改进的暗通道大坝图像去雾算法由于实现快速时间成本低,可以满足实时性要求。算法可用于大坝图像视频监控中,避免多雾天气下,大坝图像的难以识别的情况。本算法集中优化了图像的透射率,而在大气光值优化方面还是比较欠缺。如何快速地优化大气光值,是算法研究的改进方向。
[1] | 彭虹. 大坝安全监测自动化30年历程回顾与展望[J]. 水电自动化与大坝监测, 2012, 36(5): 64-68. (0) |
[2] | 汪荣贵, 朱静, 杨万挺, 等. 基于照度分割的局部多尺度Retinex算法[J]. 电子学报, 2010, 38(5): 1181-1186. (0) |
[3] | 陈炳权, 刘宏立. 基于全变分Retinex及梯度域的雾天图像增强算法[J]. 通信学报, 2014, 35(6): 139-147. (0) |
[4] | 孙小明, 孙俊喜, 赵立荣, 等. 暗原色先验单幅图像去雾改进算法[J]. 中国图象图形学报, 2014, 19(3): 381-385. (0) |
[5] | 张登银, 鞠铭烨, 王雪梅. 一种基于暗通道先验的快速图像去雾算法[J]. 电子学报, 2015, 43(7): 1437-1443. (0) |
[6] | 范新南, 陈伟, 史朋飞, 等. 基于模糊集分类的单幅图像去雾算法[J]. 光电子·激光, 2016, 27(8): 876-885. (0) |
[7] | 宋颖超, 罗海波, 惠斌, 等. 尺度自适应暗通道先验去雾方法[J]. 红外与激光工程, 2016, 45(9): 0928002. (0) |
[8] | 窦智, 韩玉兵, 胡静, 等. 内容相关的分块处理自适应图像对比度增强算法[J]. 计算机科学, 2014, 41(10): 110-112, 138. DOI:10.11896/j.issn.1002-137X.2014.10.025 (0) |
[9] | 胡伟, 袁国栋, 董朝, 等. 基于暗通道优先的单幅图像去雾新方法[J]. 计算机研究与发展, 2010, 47(12): 2132-2140. (0) |
[10] | 周雨薇, 陈强, 孙权森, 等. 结合暗通道原理和双边滤波的遥感图像增强[J]. 中国图象图形学报, 2014, 19(2): 313-321. (0) |
[11] | 张小曳, 孙俊英, 王亚强, 等. 我国雾-霾成因及其治理的思考[J]. 科学通报, 2013, 58(13): 1178-1187. (0) |
[12] | HE Kaiming, SUN Jian, TANG Xiaoou. Single image haze removal using dark channel prior[C]//Proceedings of 2009 IEEE Conference on Computer Vision and Pattern Recognition. Miami, FL, USA, 2009: 1956-1963. (0) |