雾、霾等天气是由于大气中的水滴、颗粒等的散射形成的一种自然现象,这种自然现象的存在, 导致一些成像系统得到的图像对比度和能见度显著下降, 可视度受到了严重影响, 同时对于图像研究形成了障碍。去雾不但可以增强图像的能见度, 而且可以消除大气散射光造成的色移。无雾图像可视度比较好, 从而图像去雾在目标检测和计算机视觉等领域有很多应用, 比如交通视频监测、遥感成像、地质勘测等。
现今, 国内外学者已经提出了许多经典的去雾算法。雾天图像的修复主要有以下两类。一类是基于雾天图像的图像增强方法[1]。文献[2]利用马尔可夫随机场中的代价函数来最大化局部对比度的方法来增强雾天图像, 从而消除了雾影响。这类方法不考虑图像降质的主要原因,适用范围广,但是很难得到较好的恢复图像,往往造成恢复图像的对比度过强,或部分区域细节丢失等现象。另一类就是从物理模型入手, 通过一些先验方法估计模型参数。这类方法以物理模型为依据,反演退化过程,补偿退化过程造成的失真,从而获得未经干扰退化的无雾图像或无雾图像的最优估计值。这种方法恢复的图像比较自然,但需要的条件比较苛刻。文献[3]利用介质传输和场景表面阴影是局部无关假设, 估计了场景反射率, 但不能很好处理浓雾, 并在假设不成立时可能失效。文献[4]利用暗原色先验估计了反映场景深度的透射率, 并使用软抠图消除了块状效应, 算法简单有效, 但复杂度比较高, 后面提出的引导滤波[5]降低了时间复杂度,但复原图像依然存在着残晕。文献[6]利用局部均值和标准差的差值估计了大气散射光, 能有效去除图像中的雾气, 且处理速度较快,但去雾效果不彻底且恢复图像偏暗。文献[7]利用暗原色值和邻域暗色值的差值来判断边缘, 取颜色最近点的暗色值为新的暗原色值, 可以有效去除雾气对图像的影响。文献[8]通过边界约束图像复原方法,增加物理模型中参数约束条件,恢复无雾图像。这类方法以牺牲少量细节而获取较好的无雾图像,方法有效,但后处理操作依然耗时。
本文根据暗原色先验理论, 提出了一种改进的去雾方法, 利用高斯函数不仅解决了暗原色先验对白色对象等的估计误差, 同时消除了块状效应。对于一些常见的去雾算法,往往由于大气光的简单估计造成恢复的图像出现明亮不适应现象, 针对这一问题, 本文提出准确获取大气光描述区域的方法, 使得到的大气光准确性较大提升。
1 暗原色先验理论在计算机视觉和计算机图形学中, 对有雾图像的物理描述[9]如下:
$I\left( x \right) = J\left( x \right)t\left( x \right) + A\left( {1 - t\left( x \right)} \right)$ | (1) |
其中:I是相机捕获的有雾图像, J是场景的辐射强度, A是全局大气光, t是透射率。若图像I含有N个像素, 则包含RGB通道的3N个约束条件以及4N+3个未知量, 因此基于物理模型的图像去雾本质上是一个病态问题。式中J(x)t(x) 称为直接衰减, 反映场景和其在介质中的衰减程度;A(1-t(x)) 是大气散射光, 使得场景的颜色发生色移。
假设大气均匀且同质, 透射率t可描述为:
$t\left( x \right) = {{\rm{e}}^{ - \beta d(x)}}$ | (2) |
其中:β为大气散射系数, d为场景与相机之间的距离。式 (2) 表明t随景深d的增加指数衰减。
He等[4]通过观察无雾图像发现:除大片天空区域外的大部分局部区域的像素至少在一个颜色通道 (RGB) 强度非常低, 通过最小滤波腐蚀掉局部亮区, 使得暗原色更暗且接近于零。暗原色先验通过式 (3) 描述:
${{J}^{\rm{dark}}}\left( x \right)=\underset{y\in \mathit{\Omega }\left( x \right)}{\mathop{\rm{min}}}\,\left( \underset{c\in \left\{ r,g,b \right\}}{\mathop{\rm{min}}}\,{{J}^{c}}\left( y \right) \right)\to 0$ | (3) |
式 (3) 表明, 暗原色先验是两个最小操作。其中,
假设大气光A已知, 因此可以得到粗略透射率
$t\left( x \right) \approx 1 - \omega \mathop {{\rm{min}}}\limits_{y \in \mathit{\Omega }\left( x \right)} \left( {\mathop {{\rm{min}}}\limits_{c \in \left\{ {r,g,b} \right\}} \frac{{{I^c}\left( y \right)}}{{{A^c}}}} \right)$ | (4) |
其中:为了保持恢复图像的真实性,从而在景深较深的区域保留少量雾,ω=0.95。式 (4) 所得透射率只是一个粗略估计。恢复图像在深度交替的边缘区域产生了光晕现象, He等[4]采用软抠图算法进行处理, 但是运行速度慢, 不能适用于实时处理系统。He等[5]又提出引导滤波算法, 大大改进了时间问题, 但图像去雾效果不彻底。
2 基于暗原色先验去雾的改进算法 2.1 基于高斯函数的透射率估计一般情况下, 暗原色先验是成立的, 但是当部分区域不满足暗原色先验时 (比如白色对象和天空区域), 就不能一概而论, 因此存在一定误差。当无雾图像J在比较明亮的区域 (比如天空区域, 白色物体区域等) 时, 暗原色值远远大于0, 因此, 暗原色先验在该区域失效。因为大气散射模型是一个病态方程, 因此最好的办法就是通过先验知识来评估参数。针对这一问题, 本文提出一种基于高斯函数的透射率估计方法, 可以准确地估计明亮区域。
首先, 根据式 (1), 可以得到:
$\tilde t\left( x \right) = \frac{{1 - {I^{{\rm{dark}}}}\left( x \right)/{A^c}}}{{1 - {J^{{\rm{dark}}}}\left( x \right)/{A^c}}}$ | (5) |
因为唯一已知的是输入雾图I,式 (5) 中可以找一个关于I的函数来近似的评估J,使其在满足暗原色先验的区域Jdark→0,这些区域包括:1) 暗物质及表面;2) 色彩鲜艳的物体;3) 阴影区域。相反在明亮区域Jdark有较大的值。高斯函数具有通过调整标准差使得函数快速衰减的属性,因此本文采用 (1-Idark/A) 的高斯函数来近似表示Jdark, 数学表示如下:
${J^{{\rm{dark}}}}\left( x \right) = {w_2}{\rm{exp}}\left( { - \frac{{{{(1 - {I^{{\rm{dark}}}}\left( x \right)/A)}^2}}}{{2{\sigma ^2}}}} \right)$ | (6) |
其中:因为Jdark/A比Idark/A小,因此参数w2是为了防止获得的Jdark过大。除白色和明亮区域外, Jdark非常小并接近于0, 满足暗原色先验, 因此选择较小的σ值;相反, 在明亮区域和天空区域选择较大的σ值, 就可以消除暗原色先验评估不足的区域。
结合式 (5) 和式 (6), 透射率可以通过式 (7) 得到:
$\tilde t\left( x \right) = \frac{{1 - {w_1}({I^{{\rm{dark}}}}\left( x \right)/A)}}{{1 - {w_2}{\rm{exp}}( - {{(1 - {I^{{\rm{dark}}}}\left( x \right)/A)}^2}/2{\sigma ^2})/A}}$ | (7) |
其中:参数w1是为了使恢复的图像在景深较深的区域保留少量的雾,使复原的图像更加自然。通过大量的实验测试,本文取w1∈[0.85, 0.95],w2∈[0.4, 0.6]。根据高斯函数的性质,标准差越小,函数衰减得越快。为了使获得透射率在天空和明亮区域具有较大的σ值,在满足暗原色先验的区域取较小的σ值,可以采取一个折中的办法,即选择一个恰当的σ值,通过大量实验测试,取σ=0.15。图 1(b)图像显示, 文献[4]得到的透射率在天空区域和薄雾区域估计过小, 因此恢复的图像在该区域会过度饱和。图 1(c)可以看出式 (7) 得到的透射图在天空区域相对较好, 但是都包含块状效应, 这是由于在取得暗原色时将图像分成小块, 而透射率t在局部区域是常值的假设在深度发生突变的区域不成立, 这就导致了块状效应的产生, 并且导致光晕产生, 如图 1(e)。针对这一问题, 本文利用式 (8) 来消除块状效应[8], 并利用引导滤波进行细化透射图, 但是由于滤波的原因, 最终恢复的图像去雾效果不是很彻底。
$t\left( x \right) = \mathop {{\rm{min}}}\limits_{y \in w\left( x \right)} \;\mathop {{\rm{max}}}\limits_{z \in w\left( y \right)} \tilde t\left( z \right)$ | (8) |
其中:w(x) 与w(y) 分别以x、y为中心的滤波窗口,分别对
大气散射模型中另一个未知的参数大气光A需要从输入图像I中获得。大多数的单幅图像去雾算法中, 大气光A通常是从含雾的图像中简单获得。文献[4]首先获取暗原色中亮度最大的前0.1%的像素, 然后将这些像素对应到输入图像上, 选取输入图像中对应像素最高强度的像素值作为大气光A。文献[8]选取RGB三个通道最小的像素的最大值作为通道对应的A值
本文提出一种准确获取大气光描述区域的方法, 该方法可以很好地确定天空区域或雾浓度比较高的区域, 从而选择该区域的像素作为大气光值, 消除了白色物体等的影响。首先, 根据文献[11]提出的晕光算子, 可以检测到晕光和白色物体, 数学表达如下:
$r\left( x \right) = w\frac{{\mathop {{\rm{min}}}\limits_{y \in \mathit{\Omega }\left( x \right)} \{ \mathop {{\rm{min}}}\limits_{c \in \left\{ {r,g,b} \right\}} \{ {I^c}\left( x \right)\} \} }}{{{\rm{max}}(\mathop {{\rm{min}}}\limits_{c \in \left\{ {r,g,b} \right\}} \{ {I^c}\left( x \right)\} ,I_0^c)}}$ | (9) |
其中:为了防止大气光的选取受白色对象的影响,参数w∈[1, 1.2],当w>1.2时,获取的大气光值过大。参数I0c是为了避免
$\left\{ \begin{array}{l} {r_1}(x) = \mathop {\min }\limits_{y \in \mathit{\Omega }\left( x \right)} \left\{ {\mathop {\min }\limits_{c \in \left\{ {r,g,b} \right\}} \left\{ {{I^c}\left( x \right)} \right\}} \right\}\\ {r_2}(x) = \mathop {\min }\limits_{c \in \left\{ {r,g,b} \right\}} \left\{ {{I^c}\left( x \right)} \right\} \end{array} \right.$ | (10) |
其中:由于r1≤r2, 则r(x)≤1。当r(x)=1时, 说明透射率的值在局部区域Ω内是恒定不变的; 当r(x)<1时,说明在块状区域Ω内不是恒定的, 导致暗原色先验算法局部透射率是常量的前提假设不成立,则式 (3) 失效。而对于无雾区域或雾可视为无时, r1足够小, 即满足暗原色先验, 因而r(x)=0。一般小块白色区域往往与周围像素差值很大, 因而利用晕光算子可以很好地检测到该区域[11], 然后利用膨胀操作就可以消除白色区域的影响, 如图 2(c)图像所示。
图 2(b)图像显示, 虽然检测到了白色对象和光晕, 但是依然存在白色对象, 这对大气光的选取依然存在威胁, 为了很好地解决这一问题, 本文采用膨胀操作来消除这一威胁, 得到
最后, 在大气光描述区域对应的输入图像中, 将这些像素求均值即得最终的大气光。
$A = \left( {\sum\limits_{y \in A\left( x \right)} {I\left( y \right)} } \right)/n$ | (11) |
其中:n表示大气光描述区域的像素个数, A(x) 表示大气光描述区域。利用式 (11) 获得的大气光值消除了干扰, 准确性明显提高, 但算法可能受到大片白色对象的影响, 从而使得获得的大气光有所出入。
2.3 图像复原当获得了大气散射模型中的未知参数之后, 大气散射模型就是一个可解方程, 因此就可以复原雾天图像。
$J(x) = \frac{{I(x) - A}}{{\max (t(x),{t_0})}} + A$ | (12) |
式 (12) 中为了防止分母趋于零, 设定下限值t0=0.1。
2.4 本文算法流程本文算法通过对透射率和大气光的选择进行改进,最终恢复清晰的无雾图像,算法流程如图 4所示。本文算法主要分为两部分:第一部分是对透射率的评估,第二部分是对大气光描述区域的确定。两部分都用到了暗原色操作,因此暗原色理论是本文算法的基础。最终复原的无雾图像细节清晰,恢复的图像更自然。
本文方法利用Matlab语言实现, 在Matlab R2014a环境下运行, 硬件环境为Intel Core i3-3110M CPU 2.40 GHz, 6.0 GB RAM。为了验证本文方法的有效性, 下面对有雾图像进行实验测试, 并从视觉效果和客观方面进行对比。视觉效果对比可从图 5~8观察, 对于客观评价可从表 1观察, 其中粗体表示效果比较好。
本文对薄雾图像和浓雾图像进行处理,分别同文献[4]和文献[6]算法进行对比。结果显示, 本文算法去雾效果相对比较好, 其中大气光的选择准确性更好, 消除了明亮不适应现象, 如图 5所示。对于浓雾图像,恢复的图像细节更多,明亮更适宜,如图 6所示。由于本文算法对明亮区域透射率和大气光进行改进,恢复的图像相对于文献[4]算法处理效果有所提升,如图 5、图 6所示。
其次,通过与现有的经典去雾算法[2-3]进行对比,本文算法复原的图像更接近真实的情况,天空区域和明亮区域获得的效果更好,去雾效果彻底。
3.2 客观评价本文客观分析主要从可见边[13]、峰值信噪比、信息熵和运行时间几个方面进行对比。其中,可见边、峰值信噪比和信息熵的值越大,代表恢复的图像效果越好。从表 1的客观评价数据可以看出, 本文算法处理的结果比文献[4]算法和文献[6]算法信噪比和信息熵都比较大, 反映了本文算法恢复的图像质量相对较好, 尤其对浓雾图像。由于文献[4]采用了耗时的软抠图的后处理操作,本文采用快速引导滤波算法,因此处理效率相对文献[4]算法也有了很大的提升。
4 结语本文通过准确获取大气光描述区域和利用高斯函数来估计透射率的方法改进暗原色先验的去雾方法。实验结果表明, 本文算法能够准确地获取大气光的描述区域且去雾效果相对不错, 尤其对浓雾处理效果更好, 运行时间较短, 可用于实时处理系统。但算法存在一定的不足, 例如大气光描述区域的确定对于大面积的白色区域存在一定的偏差等。今后, 将进一步展开对这些问题的研究, 以达到更好的效果。
[1] | 王萍, 张春, 罗颖昕. 一种雾天图像低对比度增强的快速算法[J]. 计算机应用, 2006, 26(1): 152-154. ( WANG P, ZHANG C, LUO Y X. Fast algorithm to enhance contrast of fog degraded images[J]. Journal of Computer Applications, 2006, 26(1): 152-154. ) |
[2] | TAN R T. Visibility in bad weather from a single image[C]//Proceedings of the 2008 IEEE Conference on Computer Vision and Pattern Recognition. Piscataway, NJ:IEEE, 2008:1-8. |
[3] | FATTAL R. Single image dehazing[J]. ACM Transactions on Graphics, 2008, 27(3): Article No. 72. |
[4] | 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. doi: 10.1109/TPAMI.2010.168 |
[5] | HE K, SUN J, TANG X. Guided image filtering[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2013, 35(6): 1397-1409. doi: 10.1109/TPAMI.2012.213 |
[6] | 李娟, 张有会, 王志巍, 等. 基于局部均值和标准差的图像去雾算法[J]. 计算机工程与应用, 2016, 52(5): 215-219. ( LI J, ZHANG Y H, WANG Z W, et al. Fog-degraded image restoration using local mean value and standard deviation[J]. Computer Engineering and Applications, 2016, 52(5): 215-219. ) |
[7] | 郭珈, 王孝通, 胡程鹏, 等. 基于邻域相似性的暗原色先验图像去雾方法[J]. 计算机应用, 2011, 31(5): 1224-1226. ( GUO J, WANG X T, HU C P, et al. Image dehazing method based on neighborhood similarity dark channel prior[J]. Journal of Computer Applications, 2011, 31(5): 1224-1226. ) |
[8] | MEANG G, WANG Y, DUAN J, et al. Efficient image dehazing with boundary constraint and contextual regularization[C]//Proceedings of the 2013 IEEE International Conference on Computer Vision. Piscataway, NJ:IEEE, 2013:617-624. |
[9] | NARASIMHN S G, NAYAR S K. Vision and the atmosphere[J]. International Journal of Computer Vision, 2002, 48(3): 233-254. doi: 10.1023/A:1016328200723 |
[10] | VAN HERK M. A fast algorithm for local minimum and maximum filters on rectangular and octagonal kernels[J]. Pattern Recognition Letters, 1992, 13(7): 517-521. doi: 10.1016/0167-8655(92)90069-C |
[11] | 刘冬冬, 陈莹. 基于暗原色先验的区域自适应图像去雾方法[J]. 计算机工程与应用, 2016, 52(7): 166-170. ( LIU D D, CHEN Y. Regional adaptive image haze removal method based on dark channel prior[J]. Computer Engineering and Applications, 2016, 52(7): 166-170. ) |
[12] | GONZALEZ R Z, WOODS R E. 数字图像处理 (Matlab版)[M]. 阮秋琦, 等译. 北京: 电子工业出版社, 2005: 305-309. ( GONZALEZ R Z, WOODS R E. Digital image processing (Matlab version)[M]. RUAN Q Q, translated. Beijing:Publishing House of Electronics Industry, 2005:305-309.) ) |
[13] | HAUTIERE N. Blind contrast enhancement assessment by gradient ratioing at visible edges[J]. Image Analysis & Stereology Journal, 2008, 27(2): 87-95. |