2. 视觉合成图形图像技术国家重点学科实验室, 成都 610065
2. National Key Laboratory of Fundamental Science on Synthetic Vision, Chengdu Sichuan 610065, China
在雾霾天气下,室外拍摄的数字图像受到空气中悬浮粒子的影响会出现对比度降低、模糊不清、颜色失真等降质现象,给后续处理带来影响。因此,雾天图像的清晰化处理技术具有十分重要的研究意义[1]。目前的图像去雾技术主要分为图像增强方法和图像复原方法两大类。图像增强方法不考虑图像退化的原因, 仅通过提高雾天图像的对比度,突出图像细节从而实现去雾,但该类方法可能会造成图像部分信息损失而导致图像失真,以Retinex算法为代表[2-3]。图像复原方法通过建立雾天图像降质的物理模型,求解雾天图像降质的逆过程来获得无雾图像或其最优估计值,其处理的关键部分在于物理模型中参数的估计,此类方法针对性强,得到的无雾图像颜色较为自然且一般不会出现信息损失。总体上,使用图像复原方法进行去雾更具优势。
近年来,图像复原方法中基于先验信息的单幅图像去雾取得了重要突破。2008年,Tan[4]通过最大化复原图像的局部对比度来达到去雾的目的,但该方法易造成图像颜色过饱和而不够自然。Fattal[5]基于独立分量分析的方法来估计场景的反射率进而推导出无雾图像,该方法基于数理统计,参数较多而不易调整,在处理薄雾图像效果较好,浓雾时会出现严重失真。Tarel等[6]使用一种对比度增强的逼近方法并结合中值滤波进行去雾,但中值滤波边缘保持性较差,复原后易引发方块效应。2009年,He等[7]使用暗原色先验规律来实现去雾,在大多数情况下得到的复原后图像颜色逼真、清晰度高,是目前最有效的单幅图像去雾方法之一。可暗原色方法在天空等接近大气光值的明亮区域会失效而产生严重色偏,此外为了解决边界Halo效应,He等[7]使用软抠图算法来细化介质透射率,但该算法具有很高的时间复杂度。因此有学者提出对应的改进算法,如使用双边滤波[8-9]等来代替软抠图,从而降低了图像修补时的时间损耗但并未解决图像失真问题。
本文针对暗原色先验算法的不足,提出了一种对景深突变区的暗原色值进行重计算并结合引导滤波的算法来细化透射率,同时使用一种自适应的容差算法对明亮区域的透射率进行动态修正,从而既可克服图像边界处的Halo效应以及明亮区域的颜色失真问题,又降低了算法计算量,提高了运行速度。
1 暗色先验去雾 1.1 大气散射模型在计算机视觉领域中,通常使用大气散射模型[10]来描述雾天图像的退化过程,即:
$I(x) = J(x)t(x) + A(1 - t(x))$ | (1) |
式中:x为空间坐标;I(x)为成像设备捕获到的有雾图像;J(x)为场景反射率即清晰的无雾图像;A为全局大气光强;t(x)为介质传输率也称为透射率。雾天图像的复原即根据估计出的参数A和t(x),从I(x)复原出J(x)的过程。
1.2 暗原色先验去雾过程文献[7]提出的暗原色先验去雾算法基于一个统计规律。该规律表明,在晴天图像中绝大部分非天空的局部区域里,总会存在一些像素点在至少一个颜色通道上的强度值很小并趋近于0[11],即:
${J^{dark}}(x) = \mathop {\min }\limits_{y \in \Omega (x)} (\mathop {\min }\limits_{c \in \{ r,g,b\} } ({J^c}(y))) \to 0$ | (2) |
式中:Jc表示彩色图像的三个通道;Ω(x)表示以像素x为中心的一个窗口。Jdark称为图像J的暗原色,Jdark(x)→0的像素点称为暗像素。
假设在局部区域Ω(x)内透射率是恒定不变的并记为(x),Ac是大气光强度A在c颜色通道的值,对式(1) 稍作变换得到:
$\frac{{{I^c}(x)}}{{{A^c}}} = t(x)\frac{{{J^c}(x)}}{{{A^c}}} + 1 - t(x)$ | (3) |
再对式(3) 两边同时取两次最小值后得:
$\begin{array}{l} \mathop {\min }\limits_{y \in \Omega (x)} \left( {\mathop {\min }\limits_{c \in \{ r,g,b\} } \frac{{{I^c}(y)}}{{{A^c}}}} \right) = \\ \tilde t(x)\mathop {\min }\limits_{y \in \Omega (x)} \left( {\mathop {\min }\limits_{c \in \{ r,g,b\} } \frac{{{J^c}(y)}}{{{A^c}}}} \right) + 1 - \tilde t(x) \end{array}$ | (4) |
而根据暗原色的定义式(2) 可知,无雾图像的暗原色值Jdark趋近于0,即:
$\mathop {\min }\limits_{y \in \Omega (x)} \left( {\mathop {\min }\limits_{c \in \{ r,g,b\} } \frac{{{J^c}(y)}}{{{A^c}}}} \right) \to 0$ | (5) |
将式(5) 代入式(4) ,则:
$\tilde t(x) = 1 - \mathop {\min }\limits_{y \in \Omega (x)} \left( {\mathop {\min }\limits_{c \in \{ r,g,b\} } \frac{{{I^c}(y)}}{{{A^c}}}} \right)$ | (6) |
实际情况下,一定程度的雾可让观察者感受到景深的存在,因此为了保留一定的视觉朦胧感,引入系数w(0 <w≤1,通常取0.90~0.97) ,得到:
$\tilde t(x) = 1 - w\mathop {\min }\limits_{y \in \Omega (x)} \left( {\mathop {\min }\limits_{c \in \{ r,g,b\} } \frac{{{I^c}(y)}}{{{A^c}}}} \right)$ | (7) |
最终根据式(1) ,由t(x)、A、I(x)恢复出J(x),即:
$J(x) = \frac{{I(x) - A}}{{\max (t(x),{t_0})}} + A$ | (8) |
式中:max(t(x), t0)是为了避免t(x)趋近于0时引入大量噪声,对透射率t(x)设定下限值t0(通常取0.1) 。而大气光强度A的估计方法为,先求出暗通道图Jdark(x)中强度值最大的前0.1%像素,再取这些像素对应在I(x)中的最大值作为大气光A值。
由式(7) 得到的透射率过于粗糙,会造成复原之后边界处出现明显Halo效应。文献[7]针对此问题使用软抠图算法对透射率进行优化,其效果虽然很好但其时间复杂度很高,影响去雾算法的实时性。另外该算法对色彩鲜艳的雾天图像复原可取得很好效果,但在复原含有大面积天空等明亮区域的图像时会出现较严重的失真,本文针对这两点缺陷提出相应的改进算法。
2 本文算法 2.1 暗通道的求取及优化由暗原色的定义式(2) 可知,在求暗通道图时需先求取每个像素点3通道最小值构成的暗图像再对其进行最小值滤波。滤波时,若局部区域选取得越大,则越能满足暗原色规律,但暗通道的边缘外溢现象就越严重,这是因为在景深不同的区域求取暗原色时,会选取暗原色值更小的近景点进而导致暗区域扩张;若局部区域选取得越小,则暗通道图层次越丰富但又可能导致区域内不存在暗像素而增加错误。因此细节与错误二者需要折中考虑。文献[7]中采用固定的块大小来求取暗通道图,不利于广泛适用。本文采用自适应分块,如式(9) :
$block = max\left( {width,{\rm{ }}length} \right)/k + 1$ | (9) |
其中:width和length分别指图像的宽度和长度;k为尺度系数(根据实验统计结果,k取40~60) 。此外,为了减弱分块对边界保持带来的不良影响,本文使用形态学开运算来代替文献[7]中使用的最小值滤波。图 1是使用两种方式分别得到的暗通道图,可见使用开运算能更好地保持图像边界。
图像边界处的景深变化往往较大且容易引发Halo效应。因此,为了进一步增强复原之后图像的边缘细节,本文先求取每个像素点3通道的最小值构成的暗色图d,接着求取d的局部方差并引入阈值n来标记景深突变区域(实验中n取λ×vmax,vmax为暗色图d的最大方差值,λ=0.1) ,在这些突变区域使用3×3小块再次求解暗原色值。实验结果如图 2所示。
从图 2(e)可看出,若直接用开运算后的暗通道图进行复原,在树叶边缘处会产生明显的Halo效应;而使用本文方法优化暗通道图后,复原得到的图 2(f)边界信息更准确、丰富,Halo效应明显减弱。
优化暗通道图后,可由式(7) 得到粗略透射率,接着使用引导滤波来进行透射率的细化。引导滤波[12]是一种快速保边滤波,相比软抠图,引导滤波能在视觉效果无明显差异下大幅度降低时间复杂度。
引导滤波的输入参数为引导图像I(雾天原图的灰度图)以及需要被优化的图像p(粗略透射率图),输出为优化后的图像q(精细化的透射率图)。它由局部线性模型引出,首先在局部邻域内,通过最小化代价函数来确定线性系数ak、bk的值,代价函数如式(10) :
${\rm E}({a_k},{b_k}) = \sum\limits_{i \in {\omega _k}} {({{({a_k}{I_i} + {b_k} - {p_i})}^2} + \in a_k^2)} $ | (10) |
根据线性回归求出:
$\left\{ \begin{array}{l} {a_k} = \frac{{\frac{1}{{|w|}}\sum\limits_{i \in {\omega _k}} {({I_i}{p_i} - {u_k}{{\bar p}_k})} }}{{\sigma _k^2 + \varepsilon }}\\ {b_k} = {{\bar p}_k} - {a_k}{u_k} \end{array} \right.$ | (11) |
其中:uk和σk2为图像I在局部邻域ωk中的均值和方差;|w|为邻域内的像素个数;k为邻域内p的均值;ε为避免a过大引入的规范化参数。
最终得到线性输出模型:
${q_k} = {\bar a_k}{I_k} + {\bar b_k}$ | (12) |
其中ak和bk分别指在局部邻域ωk中a和b的平均值。从此线性模型可以看出,在引导图像I中有边缘的地方,对应式(9) 的解为ak≈1、bk≈0,即输出的图像q中也会相应地保留边缘,因此引导滤波具有较好的边界保持性。
2.3 灰白明亮区域的透射率修正由式(2) 可知,暗原色定律对天空等明亮区域并不适用,会造成这些区域的透射率被低估以至在复原后产生明显色差。为了修正这些明亮区域的透射率,某些算法尝试对天空等明亮区域进行分割[13-14],但后期仍需进行图像修补且该类方法对分割的精度要求较高,容易引入明显的时间损耗。
本文使用一种自适应容差机制来对明亮区域的透射率进行修正。在雾天图像的天空等明亮区域,由于未含像素值趋于0的暗像素,导致该区域的暗原色值很高,对应的透射率值很低,且受到景深及雾气浓度的影响,这些明亮区域的透射率会在一定范围内变化。通过观测和曲线拟合,发现这些明亮区域对应的低透射率部分,近似分布在透射率直方图左侧第一个极小值处以左的范围内,则可借助该极值点将明亮区域粗略划分出来。因此,将透射率转化到灰度空间并进行曲线平滑,取平滑后曲线的第一个极小值处的横坐标作为容差U的值。如图 3(d),该图对应的容差U为76。为防止透射率被过度增强而影响去雾,可设定容差U最大值,如80。
由式(7) 可知,t相近于0的程度,可由I相近于A的程度来衡量。因此,若|I-A|小于或等于对应的容差U,则认为该区域是不满足暗原色先验规律的明亮区域并对其进行透射率增强;若|I-A|大于容差U,则认为是满足暗原色先验规律的区域并保持其透射率不变,即:
$\begin{array}{l} T(x) = \min (\max (\frac{U}{{|{I^c}(x) - {A^c}|}},1)\\ \begin{array}{*{20}{c}} {\begin{array}{*{20}{c}} {} \end{array}}&{} \end{array}\begin{array}{*{20}{c}} {} \end{array} \times \max (t(x),{t_0}),1),C \in \{ r,g,b\} \end{array}$ | (13) |
其中:C∈{r, g, b};T(x)为对明亮区域进行修正后的透射率图。
若对每幅雾天图像都进行透射率修正,则会导致有些图像去雾不彻底,造成模糊,因此,需要先对天空等明亮区域的存在性进行判断。本文中,若透射率t<0.2的部分超过阈值η,则认为图像存在大面积明亮区域,经大量实验发现,η取0.1时适用性较强。实验结果如图 4所示。
实验结果表明,在对含有灰白明亮区域的雾天图像进行复原时,该方法可对图像明亮区域的透射率进行动态修正,进而抑制噪声产生并得到更好的复原效果。
2.4 色调调整暗原色先验方法中,物体的光线一般小于大气光强度,因此求得的复原图像一般亮度偏暗。图像亮度及对比度增强的方法有很多[15],本文采用白平衡算法里的white patch算法[16]来增强复原图像的亮度同时矫正色偏。
3 实验结果及性能分析为了验证本文算法的有效性和可靠性,将本文算法与暗原色先验算法[7]、暗原色先验结合引导滤波算法[7, 12]、Tarel算法[6]进行对比实验。实验结果如图 5~7所示,有雾图像选自于文献[7]及其他一些去雾领域的经典图像。
从图 5可以看出,在一般情况下,暗原色先验算法的去雾能力强但整体图像偏暗。Tarel算法去雾程度较弱且由于使用保边效果较差的中值滤波,复原后图像会存在明显的块效应。相比之下本文算法结果图 5(d)的去雾程度更彻底、海面和建筑色彩鲜明且轮廓清晰,图像整体对比度更高。
从图 6可以看出,对于含有天空等大面积明亮区域的图像,经暗原色结合引导滤波算法和Tarel算法处理后,由于天空区域的透射率估计过小,复原时均引入了大量噪声而出现严重色偏,如图 6(b)和图 6(c),Tarel算法在天空和建筑的连接处还出现了明显的Halo效应。而本文算法由于对天空区域进行了自适应的透射率增强,复原后天空部分自然明亮,噪声得到明显抑制且近处地面和远处楼房的边界更清晰。
图 7为4种算法的实验结果对比图,可以看出暗原色先验法、暗原色结合引导滤波算法和Tarel算法在对原图 1和原图 2处理后,白色建筑处均出现了不同程度的色偏,即偏淡黄色。Tarel算法得到的复原图像整体对比度不高,且边界较模糊。此外,这3种算法在大面积的天空区域处均出现了不同程度的失真,而经本文算法处理后的天空区域明亮(如图 7(e)中对图像1的处理效果),白色建筑的颜色无失真且轮廓更清晰,图像的整体色彩更明亮自然、景深更丰富、立体感更强。
为给出4种算法处理结果的客观评价,本文使用熵、标准差、平均梯度三个指标来评价去雾后的图像质量,同时也列出了计算所需时间,具体如表 1所示。本文程序是在Intel酷睿i5 CPU,6 G内存,Win 7操作系统的PC机上运行的。仿真程序由C++编写,计算使用的图片为图 7中的图像1、图像2。
从表 1可看出,在熵和平均梯度方面,本文算法均优于其他算法;在标准差方面,本文算法对图像2的处理稍次于使用了软抠图的暗原色先验算法,但相比于原图仍有显著改善;在处理时间上,本文算法相对于暗原色结合引导滤波算法并未引入明显的时间开销,且相比暗原色先验和Tarel算法都有所减少,因此仍具有优势。总的来说,本文算法在保证去雾效果的同时,得到的图像细节丰富且处理速度较快。
本文提出了一种基于暗原色先验单幅图像快速去雾算法,使用开运算以及在景深突变处重计算暗原色值来得到更精确的暗通道图,同时结合引导滤波来优化透射率,显著降低了算法的计算复杂度;使用一种自适应的容差方式对天空等灰白明亮区域的透射率进行动态修正,克服了暗原色先验算法在明亮区域复原后颜色失真的缺点。实验表明,本文算法具有较快的处理速度,同时得到的复原图像细节突出、色彩丰富。但本文对大气光照估计的准确性并未作改进,下一步将对此继续深入研究。
[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] | JOBSON D J, RAHMAN Z, WOODELL G A. Properties and performance of a center/surround retinex[J]. IEEE Transactions on Image Processing, 1997, 6 (3) : 451-462. doi: 10.1109/83.557356 |
[3] | 马时平, 张明, 毕笃彦, 等. 一种细节保持的Retinex图像增强算法[J]. 西安电子科技大学学报(自然科学版), 2010, 37 (3) : 541-546. ( MA S P, ZHANG M, BI D Y, et al. Novel detail preserving Retinex algorithm for image enhancement[J]. Journal of Xidian University (Natural Science), 2010, 37 (3) : 541-546. ) |
[4] | 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. Piscataway, NJ:IEEE, 2008:1-8. |
[5] | FATTAL R. Single image dehazing[J]. ACM Transactions on Graphics, 2008, 27(3):Article No. 72. |
[6] | TAREL J P, HAUTIÉRE N. Fast visibility restoration from a single color or gray level image[C]//Proceedings of the 2009 IEEE 12th International Conference on Computer Vision. Piscataway, NJ:IEEE, 2009:2201-2208. |
[7] | 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 |
[8] | ZHANG J W, LI L, YANG G Q, et al. Local albedo-insensitive single image dehazing[J]. The Visual Computer, 2010, 26 (6/7/8) : 761-768. |
[9] | 孙伟, 李大健, 刘宏娟, 等. 基于大气散射模型的单幅图像快速去雾[J]. 光学精密工程, 2013, 21 (4) : 1040-1046. ( SUN W, LI D J, LIU H J, et al. Fast single image fog removal based on atmospheric scattering model[J]. Optics and Precision Engineering, 2013, 21 (4) : 1040-1046. doi: 10.3788/OPE. ) |
[10] | 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 |
[11] | 张晶晶, 陈自红, 张徳祥, 等. 基于暗原色先验原理的偏振图像浓雾去除算法[J]. 计算机应用, 2015, 35 (12) : 3576-3580. ( ZHANG J J, CHEN Z H, ZHANG D X, et al. Polarized image dehazing algorithm based on dark channel prior[J]. Journal of Computer Applications, 2015, 35 (12) : 3576-3580. ) |
[12] | 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 |
[13] | WANG G Y, REN G H, JIANG L H, et al. Single image dehazing algorithm based on sky region segmentation[J]. Informatio Technology Journal, 2013, 12 (6) : 1168-1175. doi: 10.3923/itj.2013.1168.1175 |
[14] | JUNG S W. Image contrast enhancement using color and depth histograms[J]. IEEE Signal Processing Letters, 2014, 21 (4) : 382-385. doi: 10.1109/LSP.2014.2303157 |
[15] | TRIPATHI A K, MUKHOPADHYAY S. Single image fog removal using anisotropic diffusion[J]. IET Image Processing, 2012, 6 (7) : 966-975. doi: 10.1049/iet-ipr.2011.0472 |
[16] | 王丛.自动图像白平衡技术的研究[D]. 北京:北京工业大学,2012:22-28. ( WANG C. Automatic image white balance technique[D]. Beijing:Beijing University of Technology,2012:22-28. ) |