在雾霾天气拍摄的图像, 由于空气中的悬浮粒子对光线的散射、吸收等作用, 会出现清晰度降低、色调偏移等退化现象, 直接影响了许多图像处理算法和户外视觉采集系统的效果[1];因此, 雾天图像的清晰化处理对于图像处理和机器视觉等领域具有较高的研究价值[2]。
目前, 针对雾天降质图像的处理方法主要可以分为两类:一类是基于图像增强的方法, 通过提高图像的对比度使图像清晰化[3], 如直方图均衡化(Histogram Equalization, HE)方法[4]、Retinex算法[5]等。该类方法虽能在一定程度上提高图像的清晰度, 但缺少对图像降质原因的分析, 容易造成图像部分信息的丢失。另一类是基于图像退化模型的复原方法, 首先分析大气散射规律并建立物理模型, 再补偿图像退化造成的信息损失, 复原出的无雾图像较为自然, 同时减少了信息丢失。Tan等[6]通过提高有雾图像的局部对比度, 在一定程度上恢复了图像的纹理和结构。Fattal[7]根据物体表面反射与介质传输的局部统计无关性的约束, 利用独立成分分析(Independent Component Analysis, ICA)和马尔可夫随机场(Markov Random Field, MRF)进行图像复原, 该方法的效果取决于输入数据的统计特性, 对于浓雾图像的去雾能力不足。He等[8]通过对大量户外无雾图像的研究统计, 提出了暗通道去雾算法, 取得了很好的去雾效果, 但其仍存在缺陷:该方法对透射率进行细化时采用的软抠图算法复杂度较高, 难以实现图像的实时去雾;由于图像的天空区域不满足暗通道先验, 复原图像在天空区域容易出现噪声和色彩失真;此外, 经过暗通道先验算法去雾后的图像色调偏暗, 降低了部分视觉效果。为解决上述问题, 王一帆等[9-10]分别提出了快速双边滤波和引导滤波来代替软抠图方法, 提高了暗通道算法效率, 但易出现去雾不彻底现象。Wang等[11]用引导滤波与最小值滤波相结合的方法来改进透射率的细化处理, 复原后的图像色彩丰富, 但在处理含大量天空的有雾图像时仍易产生Halo效应。李加元等[12]提出了一种天空识别算法, 通过改进对天空区域的透射率估计方法, 较好地抑制了噪声, 但提出的亮度阈值计算公式需要手动调节, 且运行效率较低。
针对暗原色先验算法的不足, 本文提出了一种基于天空分割的去雾方法。首先基于边缘检测的方法分割出有雾图像中的天空和非天空区域, 再分别采用改进的基于引导滤波的暗通道去雾算法和基于代价函数的对比度增强算法对两区域进行去雾处理, 从而有效避免天空区域的Halo现象和色彩失真, 去雾后图像整体细节清晰, 色彩更真实, 同时算法保持了较高的运行效率。
1 暗通道先验去雾算法 1.1 大气散射模型在机器视觉以及计算机图像处理领域, 常用以下方程[13]来描述有雾环境下大气光散射的物理模型:
$I(x)\; = \;J(x){\kern 1pt} t(x) + A{\kern 1pt} (\;1 - t(x)\;)$ | (1) |
其中:I (x)为雾天条件下采集到的图像;J (x)为景物表面的反射光, 即期望得到的无雾图;A表示大气光强度;t (x)表示雾气的通透程度, 即透射率。若能从预先假设的先验信息中估计出A和t, 代入式(1) 即可得到去雾后的图像J。
1.2 暗通道先验理论He等[8]通过大量的统计研究, 发现在户外图像非天空区域的任一局部小块中, 某些像素点至少有一个颜色通道的亮度值很低, 且近似于0。基于此提出了暗通道先验模型, 即对于任意一幅无雾图像J, 定义暗通道Jdark满足如下规律:
${J^{{\rm{dark}}}}{\rm{(}}x{\rm{)}}\;{\rm{ = }}\;\mathop {\min }\limits_{y \in \Omega (x)} \;\left( {\;\mathop {\min }\limits_{c \in \{ r,g,b\} } ({J^c}(y))\;} \right) \to 0$ | (2) |
其中:Jc表示彩色图像J的RGB通道;Ω(x)是以像素x为中心的局部邻域。
将式(1) 变形为:
$\frac{{{I^c}(x)}}{{{A^c}}}\; = \;t(x)\frac{{{J^c}(x)}}{{{A^c}}} + 1 - t(x)$ | (3) |
假设在每一个局部小块内的透射率为固定值, 定义为$\tilde t(x)$。对式(3) 的两边求两次最小值, 得到式(4) :
$\begin{array}{l} \mathop {\min }\limits_{y \in \mathit{\Omega }(x)} \;\left( {\mathop {\min }\limits_{c \in \{ r,g,b\} } \frac{{{I^{\rm{c}}}(y)}}{{{A^{\rm{c}}}}}} \right)\; = \\ \quad \quad \quad \tilde t(x)\mathop {\min }\limits_{y \in \mathit{\Omega }(x)} \;\left( {\mathop {\min }\limits_{c \in \{ r,g,b\} } \frac{{{J^{\rm{c}}}(y)}}{{{A^{\rm{c}}}}}} \right) + 1 - \tilde t(x) \end{array}$ | (4) |
根据前述的暗通道先验理论, 可知:
$\mathop {\min }\limits_{y \in \mathit{\Omega }(x)} \;\left( {\;\mathop {\min }\limits_{c \in \{ r,g,b\} } \frac{{{J^{\rm{c}}}(y)}}{{{A^{\rm{c}}}}}\;} \right)\;\;{\rm{ = }}\;0$ | (5) |
代入式(4), 可得:
$\tilde t(x)\;{\rm{ = }}\;1\; - \mathop {\min }\limits_{y \in \mathit{\Omega }(x)} \;\left( {\mathop {\min }\limits_{c \in \{ r,g,b\} } \frac{{{J^{\rm{c}}}(y)}}{{{A^{\rm{c}}}}}} \right)$ | (6) |
为保留图像深度感, 有必要保留一定程度的雾, 引入系数ω(0<ω<1) 将式(6) 重新表述为:
$\tilde t(x)\;{\rm{ = }}\;1\; - \;\omega \mathop {\min }\limits_{y \in \mathit{\Omega }(x)} \;\left( {\mathop {\min }\limits_{c \in \{ r,g,b\} } \frac{{{J^{\rm{c}}}(y)}}{{{A^{\rm{c}}}}}\;} \right)$ | (7) |
此时I、A和t都已知, 即可求出J:
$J(x) = \frac{{I(x) - A}}{{\tilde t(x)}}\; + A$ | (8) |
若$\tilde t(x)$的值太小, 会使J偏大, 因此可加入下限阈值t0(通常取0.1), 得到最终的恢复公式如下:
$J(x)\; = \;\frac{{I(x) - A}}{{\max \left( {\tilde t(x),{t_0}} \right)}}\;\; + \;A\;$ | (9) |
本文方法步骤如下:1) 天空区域识别与分割, 将图像分为天空和非天空两部分;2) 采用改进的暗通道先验算法处理非天空区域;3) 对于天空区域, 采用基于成本函数的对比度增强算法去雾;4) 结合两区域的去雾结果, 获得最终的去雾图像。
2.1 天空区域分割通常情况下, 若图像中包含天空, 则天空一般位于图像上方, 其灰度较为平坦, 而且面积较大、亮度较高。针对以上特点, 采用一种边缘检测方法对图像进行分割。如图 1所示, 分割方法如下:
1) 将彩色图像灰度化, 并进行直方图均衡化操作, 提高图像中的边缘信息量;
2) 利用Canny算子获得灰度图像的边缘特征, 并进行高斯羽化处理;
3) 对边缘检测后的图像采用形态学膨胀与腐蚀操作, 获得二值图像, 从中提取出天空区域和非天空区域。
2.2 暗通道先验算法改进 2.2.1 大气光A的获取大多数暗通道先验算法都采取求最大值的方法来估计大气光A, 即对暗通道图的亮度值进行排序, 提取亮度值最大的前0.1%的像素, 将这些像素在原图像I (x)中对应点的最大值作为A的值。但该方法存在问题: 若非天空区域存在大块白色的物体, 则该方法求得的大气光A明显偏大, 影响最终的去雾效果。
因此, 本文对大气光A的获取方法为:统计整幅图像中亮度最大的前1%的像素灰度值的平均值, 设为A的估计值。这种方法不仅能够避免图像中可能存在的噪声干扰, 还可以在一定程度上抵消白色物体所造成的估值偏差。
2.2.2 透射率t的获取大多数暗通道先验去雾算法采用从像素点x周围的局部邻域Ω(x)中求R、G、B通道的最小值的方法来求取暗通道, 即对图像采用局部最小值滤波。在进行局部滤波处理时, 局部块中可能存在近远景交界, 造成暗通道图存在一定的块效应, 从而导致透射率的过估计而出现边缘白边现象[14]。
此外, 在局部滤波的过程中, 可能存在某些较暗或色彩特别鲜艳的像素点, 由于其暗通道值极低, 直接影响了相邻区域的滤波结果, 造成透射率图的块效应, 继而影响复原图像的处理效果。针对该问题, 需增大暗通道Jdark的估计值以适当减少透射率, 因此本文把式(2) 的前一个求最小值操作改为求中值操作:
${J^{{\rm{dark}}}}{\rm{(}}x{\rm{)}}\;{\rm{ = }}\;\mathop {{\rm{med}}}\limits_{y \in \mathit{\Omega }(x)} \;\left( {\mathop {\min }\limits_{c \in \{ r,g,b\} } ({J^c}(y))} \right)\;\;$ | (10) |
由式(1) 、式(7) 可得改善后的透射率:
$\tilde t(x)\;{\rm{ = }}\;1 - \omega \mathop {{\rm{med}}}\limits_{y \in \mathit{\Omega }(x)} \;\left( {\mathop {\min }\limits_{c \in \{ r,g,b\} } \frac{{{J^{\rm{c}}}(y)}}{{{A^{\rm{c}}}}}} \right)$ | (11) |
最后, 采用文献 [10]中提出的导向滤波算法对透射率进行细化处理。
2.2.3 色调调整在雾霾天气中, 大气光的作用会导致图像总体像素值偏大, 表现为图像偏灰、发白, 则去雾后得到的图像通常会变暗。因此, 需要对去雾后的图像进行色调调整, 以提高亮度, 增强细节信息。本文采用如下步骤调整复原图像:
1) 将复原图像J转换到HSV颜色空间;
2) 使用对比度有限的自适应直方图均衡化(Contrast Limited Adaptive Histogram Equalization, CLAHE)算法[15], 增强亮度分量;
3) 将HSV图像转换回RGB空间, 得到调整后的图像。
2.3 基于成本函数的对比度增强算法为了避免天空区域因为过分增强而出现噪声和颜色失真等现象, 对天空区域采用一种基于成本函数的对比度增强算法[16], 该方法同样基于式(1) 中的大气散射模型。通常有雾图像的对比度较低, 因此提高对比度可以起一定的去雾效果。但对比度得到增强的同时, 可能会导致部分像素的调整值偏差过大, 这样就会造成图像细节的损失以及视觉上的瑕疵。通过设置一个关于对比度和细节信息损失的成本函数, 可以在尽可能减少信息损失的同时, 最大限度地提高对比度, 实现图像去雾。算法的步骤如下:
1) 大气光值的获取。
将输入图像等分成四块, 并选择像素值最大的区域继续分为四块, 重复上述过程直到被选定区域的面积小于预设的阈值。在被选定的区域内计算像素点与纯白点的距离‖(R, G, B)-(255, 255, 255) ‖, 将距离值最小的像素点作为大气光A值。
2) 估计透射率。
设分块后的某一图像块为B, 则将每个图像块B的RGB通道的均方误差对比度和的相反数即为对比度成本:
$\begin{array}{l} {E_{{\rm{contrast}}}}{\rm{ = }}\;\; - \sum\limits_{c \in (r,g,b)} {\sum\limits_{p \in B} {\frac{{{{({J_c}(p) - {{\bar J}_c})}^2}}}{{{N_B}}}{\rm{ = }}\;} } \\ \;\;\;\quad \quad \; - \sum\limits_{c \in (r,g,b)} {\sum\limits_{p \in B} {\frac{{{{({I_c}(p) - {{\bar I}_c})}^2}}}{{{t^2}{N_B}}}} } \; \end{array}$ | (12) |
其中:Jc、Ic分别是Jc(p)和Ic(p)的均值;NB是图像块B中像素的个数;t表示透射率。通过最小化对比度成本Econtrast就可以使对比度得到最大化提升。
对比度提升的同时, 会造成信息损失Eloss:
$\begin{array}{l} {E_{{\rm{loss}}}}{\rm{ = }}\sum {} \{ {\left( {\min \left\{ {0,{J^c}(p)} \right\}} \right)^2} + \\ \quad \quad {\left( {\max \left\{ {0,{J^c}(p) - 255} \right\}} \right)^2}\} \end{array}$ | (13) |
其中:c∈r, g, b; p∈B。
定义成本函数:
$\;{E_{{\rm{cost}}}}{\rm{ = }}\;{E_{{\rm{contrast}}}} + {\lambda _{\rm{L}}}{E_{{\rm{loss}}}}$ | (14) |
其中:λL为设定的阈值, 用于衡量对比度成本和信息损失之间的相对重要性。给定适当约束, 对成本函数进行最小化处理即可得到最优化的透射率t:
$\begin{align} & t\ \ \text{=}\ \\ & \max \left\{ \underset{c\in (r,g,b)}{\mathop{\min }}\,\underset{p\in B}{\mathop{\min }}\,\left\{ \frac{{{I}^{c}}(p)-{{A}^{c}}}{-{{A}^{c}}} \right\}\ ,\underset{c\in (r,g,b)}{\mathop{\max }}\,\underset{p\in B}{\mathop{\max }}\,\left\{ \frac{{{I}^{c}}(p)-{{A}^{c}}}{255-{{A}^{c}}} \right\} \right\} \\ \end{align}$ | (15) |
在此基础上, 可采用边缘保留滤波器对t进行细化。
3) 图像去雾。
将上述方法得到的大气光A和透射率t代入式(1), 可计算获得去雾图像J。
3 实验与分析为验证本文算法的效果, 从网络中选取多张去雾领域包含天空的经典雾霾图像进行仿真实验, 并将本文算法与文献 [8]的暗通道先验算法以及文献 [10]的暗原色先验结合导向滤波算法进行比较。实验平台为64位Windows 10操作系统的计算机, 处理器为Intel Core i5-6300HQ, 主频为2.3 GHz CPU, 内存为8 GB。软件平台为Matlab 2012a。实验结果如图 2~3所示。
由去雾图像主观视觉上可以看出, 文献 [8]算法和文献 [10]算法在图像的非天空区域均取得了一定的去雾效果, 图像的清晰度、对比度都有明显的提升, 但是两种算法在天空区域的处理效果较差, 局部放大图如图 3所示。从图 2中的图B可看出, 文献 [8]算法去雾后的图像在天空区域出现了色彩失真, 并且在图像景深较大的情况下去雾效果不明显;文献 [10]算法采用的导向滤波虽然提高了去雾的速度, 但同时也扩大了边缘白边现象, 导致去雾图像在天空和景深突变处出现了Halo效应。此外, 从图 2中的图C、图D和图E还可以看出, 两种算法去雾后的图像总体色调偏暗, 在一定程度上降低了视觉效果。
与上述方法相比, 本文算法不仅能有效消除天空区域的Halo效应和色彩失真现象, 并且在非天空区域能够获得更好的清晰度和对比度;此外, 由于采取了色调调整, 去雾后的图像色彩更接近真实场景, 提高了视觉效果。如图 3所示, 本文算法处理后的图片在天空区域并未出现偏色, 同时避免了文献 [10]算法处理后产生的边缘白边。对比图 2中的图B~E可以看出, 本文算法处理后的图片在远景处的去雾效果更明显, 在近景处的色彩也更接近于原始的景物色彩, 说明本文算法的色彩还原效果也优于其他算法。因此, 本文算法去雾图像的主观视觉效果好于对比算法。
3.2 客观评价为进一步证实本文算法的有效性, 本文选取方差、平均梯度、信息熵等图像质量评价指标对图 2各种算法的去雾结果进行定量分析, 各评价指标数据如表 1所示。方差的大小对应图像各个像素灰度相对于灰度平均值的离散情况, 方差越大, 说明图像灰度分布范围越丰富, 场景中目标更容易识别;平均梯度反映了图像细节, 平均梯度越大, 则图像的轮廓越清晰;信息熵反映图像平均信息量, 信息熵值越高, 则图像内含有的信息量越多[17]。
从表 1中可以看出, 在平均梯度和信息熵指标数据上, 本文算法均高于其他算法;在方差数据上, 本文算法仅在对图C的处理略次于文献 [10]算法, 但仍优于文献 [8]算法。各个评价指标的提升, 说明了本文算法去雾后的图像对比度和清晰度更高, 图像细节信息更加明显, 色彩更加饱和。在算法效率上, 本文算法和文献 [10]算法的运行时间远远少于文献 [8]算法, 处理速度较快。本文算法在天空分割和天空区域去雾两个阶段并未引入太多时间开销, 因此在总运行时间上稍高于文献 [10]算法, 但仍具有较高的运行效率。
实验结果同时表明, 所提算法也可用于不含有天空区域的图像去雾。从图 2中的图D和图E可看出:在主观视觉上, 本文算法获得的去雾图像在清晰度上高于文献 [8]算法, 在色彩还原度方面更优于文献 [10]算法;从表 1所示的评价指标上, 本文算法所得数据也是最优。实验结果说明, 应用本文算法进行图像去雾时, 无需先判断原始图像中是否包含天空, 对两种类型的雾化图像均有良好的去雾能力。
4 结语本文提出了一种基于天空分割的去雾算法, 通过对分割后的天空区域使用基于成本函数的对比度增强算法去雾, 有效地避免了Halo效应;使用改进的暗通道算法处理非天空区域, 保留了暗通道算法较好的去雾效果, 同时避免了噪声和边缘白边现象, 实现了去雾图像亮度的提升。实验结果表明, 该算法具有较高的运行效率, 复原后的图像具有较好的清晰度和色彩还原度。
[1] | 吴迪, 朱青松. 图像去雾的最新研究进展[J]. 自动化学报, 2015, 41(2): 221-239. (WU D, ZHU Q S. The latest research progress of image dehazing[J]. Acta Automatica Sinica, 2015, 41(2): 221-239.) |
[2] | 宋颖超, 罗海波, 惠斌, 等. 尺度自适应暗通道先验去雾方法[J]. 红外与激光工程, 2016, 45(9): 1-12. (SONG Y C, LUO H B, HUI B, et al. Haze removal using scale adaptive dark channel prior[J]. Infrared and Laser Engineering, 2016, 45(9): 1-12.) |
[3] | 代书博, 徐伟, 朴永杰, 等. 基于暗通道先验的遥感图像去雾方法[J]. 光学学报, 2017, 37(3): 0328002. (DAI S B, XU W, PU Y J, et al. Remote sensing images defogging based on dark channel prior[J]. Acta Optica Sinica, 2017, 37(3): 0328002.) |
[4] | 杨骥, 杨亚东, 梅雪, 等. 基于改进的限制对比度自适应直方图的视频快速去雾算法[J]. 计算机工程与设计, 2015, 36(1): 221-226. (YANG Y, YANG Y D, MEI X, et al. Fast video dehazing based on improved contrast limited adaptive histogram equalization[J]. Computer Engineering and Design, 2015, 36(1): 221-226.) |
[5] | 马忠丽, 文杰. 融合边缘信息的单尺度Retinex海雾去除算法[J]. 计算机辅助设计与图形学学报, 2015, 27(2): 218-225. (MA Z L, WEN J. Single-scale Retinex sea fog removal algorithm fused the edge information[J]. Journal of Computer-Aided Design & Computer Graphics, 2015, 27(2): 218-225.) |
[6] | TAN R T. Visibility in bad weather from a single image[C]//CVPR 2008: Proceedings of the 2008 IEEE Conference on Computer Vision and Pattern Recognition. Washington, DC: IEEE Computer Society, 2008: 1-8. |
[7] | FATTAL R. Single image dehazing[J]. ACM Transactions on Graphics, 2008, 27(3): Article No. 72. |
[8] | HE K M, SUN J, TANG X O. Single image haze removal using dark channel prior[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2011, 33(12): 2341-2353. DOI:10.1109/TPAMI.2010.168 |
[9] | 王一帆, 尹传历, 黄义明, 等. 基于双边滤波的图像去雾[J]. 中国图象图形学报, 2014, 19(3): 386-392. (WANG Y F, YI C L, HUANG Y M, et al. Image haze removal using a bilateral filter[J]. Journal of Image and Graphics, 2014, 19(3): 386-392.) |
[10] | HE K M, SUN J, TANG X O. Guided image filtering[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2013, 35(6): 1397-1409. DOI:10.1109/TPAMI.2012.213 |
[11] | 王卫星, 肖翔, 陈良琴. 结合最小滤波和引导滤波的暗原色去雾[J]. 光学精密工程, 2015, 07(7): 2100-2108. (WANG W X, XIAO X, CHEN L Q. Image dark channel prior haze removal based on minimum filtering and guided filtering[J]. Optics and Precision Engineering, 2015, 07: 2100-2108.) |
[12] | 李加元, 胡庆武, 艾明耀, 等. 结合天空识别和暗通道原理的图像去雾[J]. 中国图象图形学报, 2015, 20(4): 0514-0519. (LI J Y, HU Q W, AI M Y, et al. Image haze removal based on sky region detection and dark channel prior[J]. Journal of Image and Graphics, 2015, 20(4): 0514-0519.) |
[13] | NARASIMHAN S G, NAYAR S K. Contrast restoration of weather degraded images[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2003, 25(6): 713-724. DOI:10.1109/TPAMI.2003.1201821 |
[14] | 王雅婷, 冯子亮. 基于暗原色先验的单幅图像快速去雾算法[J]. 计算机应用, 2016, 36(12): 3406-3410. (WANG Y T, FENG Z L. Single image fast dehazing method based on dark channel prior[J]. Journal of Computer Applications, 2016, 36(12): 3406-3410. DOI:10.11772/j.issn.1001-9081.2016.12.3406) |
[15] | 郑林涛, 俞卫华, 董永生. 基于暗通道先验和CLAHE的红外图像增强算法[J]. 计算机工程与设计, 2015, 36(12): 3297-3301. (ZHENG L T, YU W H, DONG Y S. Infrared image enhancement algorithm based on dark channel prior and CLAHE[J]. Computer Engineering and Design, 2015, 36(12): 3297-3301.) |
[16] | KIM J H, JANG W D, SIM J Y, et al. Optimized contrast enhancement for real-time image and video dehazing[J]. Journal of Visual Communication and Image Representation, 2013, 24(3): 410-425. DOI:10.1016/j.jvcir.2013.02.004 |
[17] | 郭璠, 蔡自兴. 图像去雾算法清晰化效果客观评价方法[J]. 自动化学报, 2012, 38(9): 1410-1419. (GUO F, CAI Z X. Objective assessment method for the clearness effect of image defogging algorithm[J]. Acta Automatica Sinica, 2012, 38(9): 1410-1419.) |