注:本文成于2017年12月,是《小波变换与图像处理》的课程作业
摘要
雾天天气对户外场景图像会造成严重损害,表现为光照不均,色彩饱和度低,细节和对比度差,进而造成图像质量的退化,影响进一步的人眼分辨和机器识别。针对这些特性,文章提出对彩色图像在HSI域与RGB域处理结合、小波域与时域处理相结合的去雾增强方法。在亮度通道I上进行小波分解,对近似分量运用改进的Retinex算法,去雾的同时克服晕影效应;对高频系数进行阈值化改造,增强图像细节和对比度。小波重构后转换到RGB空间,进一步拉伸同态范围,提高人眼可视度。实验证明,该方法对于去除薄雾效果明显,对浓雾下的图像也有较好的增强效果。
雾是秋冬季节频发的自然天气现象,在可见光波段,雾天图像具有明显的质量退化,可视景深小,对比度差,这对图像的进一步处理和识别造成了困扰。因此,无论在目标检测、视频监控、自动导航等应用层面,还是摄影、遥感、军事、交通等行业,研究去除雾层对图像的干扰都具有重要意义。
目前的图像去雾算法主要分为两种,一种是基于物理模型的图像复原,另一种是根据雾天特点所做的图像增强。
基于物理模型的方法需要获知图像的景深信息,并根据雾的散射模型进行图像复原,对成像设备和传感设备要求较高,Oakley、Tan等人对精确的物理模型做了研究,取得了较好的去雾效果,但会造成色彩的过饱和[1,2],何凯明[3]提出了暗通道先验模型,根据无雾图像中总存在幅值较低的颜色通道这一统计规律,可以从单幅图像中估计出雾的浓度,进而根据物理模型滤除,这种方法的计算量极大,标准清晰度图像的处理需要十几秒,限制了实际应用。
图像增强方法不依靠物理模型,根据雾层的特点,在时域或频域对图像细节和对比度进行增强。直方图均衡方法[4]运算量少且可以有效提高对比度,但会减小熵值,处理动态范围小的图像时尤其严重。在小波域处理[5,6]可以分离低频和高频能量,进而提升图像细节,但单纯对小波系数处理没有考虑到雾天图像的特点,对增强可视距离作用不大。孙晓晓[7]利用两幅图像在小波域融合,能提高各种雾天图像的清晰度,但这种方法不适用于只有单幅图像数据的情况。Retinex算法与同态滤波具有类似之处,根据颜色恒常性理论,将成像结果看作是光照和反射能量的组合,光照主要是低频能量,而物体的反射光位于高频[8]。基于Retinex的去雾算法[9]通过高斯滤波器滤除雾的散射光,保留物体本身的反射能量,去雾效果明显,但高斯核的特性使得去雾后的图像在明暗交界处产生晕影。
此外,彩色图像的去雾要求比灰度图像更高,需要在去雾的同时,保持合适全局亮度和各通道效果的平衡,要求色彩自然不失真。文献[10]研究分析了在RGB色彩空间和HIS空间进行图像增强的效果,文献[11]实验了在HIS空间应用小波变换的图像去雾增强。
本文基于小波变换和改进的Retinex算法,提出在HSI和RGB颜色空间混合处理的彩色图像去雾增强算法。首先在HSI空间中对亮度通道进行小波变换以分离高低频率信息,使用改进的Retinex方法对近似系数去雾,并保持能量恒定,在高频系数上阈值化改造,压制噪声的同时提高对比度;小波重构后转换到RGB空间,对各通道拉伸动态范围并恢复颜色。最后通过实际场景的测试和定量指标评价该算法。
小波变换的概念出现于1984年,法国地球物理学家在分析地震波数据时,提出了将地震波按伸缩平移系展开的方法,随后在时频域都正交的小波基被发现。在数学上,小波变换与傅里叶变换类似,都是一种数学变换。不同的是,小波函数是由一个母函数经过伸缩变换和平移而得到的一簇函数,小波域可以体现信号的时间(空间)和频率信息[12]。
Mallat算法:
离散小波变换可以去除连续小波变换中的冗余度,并且具有快速算法。1989年,Mallat提出了多分辨率分析(MRA)的概念,并基于此提出了离散小波变换的快速算法。在某一尺度上的小波分解和合成Mallat算法如下。
分解:
$${a_i}\left( k \right) = \sum\limits_n { {\kern 1pt} h\left( {n - 2k} \right){a_{i - 1}}\left( n \right)} $$
$${d_i}\left( k \right) = \sum\limits_n { {\kern 1pt} g\left( {n - 2k} \right){a_{i - 1}}\left( n \right)} $$
[1]
合成:
$${a_{i - 1}}\left( n \right) = \sum\limits_k { {\kern 1pt} \tilde h\left( {2k - n} \right){a_i}\left( k \right)} + \sum\limits_k { {\kern 1pt} \tilde g\left( {2k - n} \right){d_i}\left( k \right)} $$
其中$\tilde h$、$\tilde g$是重建滤波器。N阶离散小波变换将信号分解为N个各尺度上的高频高频和最大尺度上的低频分量。
一维小波变换可以扩展到二维小波变换,只需要对行和列分别进行独立的一维变换即可。对于图像数据来说,一次小波变换可以分解为3个高频系数,分别代表水平方向、垂直方向和对角线方向的高频信息,以及一个近似分量。下图展示了二维小波分解的流图和,以及分解图像信号后得到的高频、近似分量。
图 11维小波分解的流图,以及分解图像信号后得到的高频、近似分量
小波基的选择:
小波基具有不同的时域和频域特性,选用不同的小波基对同一幅图像进行分解处理会得到不同的结果,因此,对图像进行小波分解时,应当选择合适的小波基。
对图像进行小波变换,主要应考虑紧支性、对称性和正交性3种特性。紧支性决定了小波的时频局部化特征,紧支宽度越窄,小波局部特性越好。小波的对称性与紧支撑小波的线性相位特性等价,对称小波不会造成图像边界数据的失真。正交性反映了图像的冗余程度,正交小波能保持能量,有去除信号的相关性,但不能与对称性同时满足。Db(Daubechies)系小波是光滑紧支撑正交小波,能通过有限脉冲响应共轭镜像滤波器实现.Sym(Symlets)系小波是根据Db系小波改良得到的,差别在于Sym系小波有更好的对称性,重构时相移更少,更适合图像处理。
雾是悬浮在空气中的微小水滴,对可见光具有吸收、散射作用;近年来频发的霾比雾具有更大的粒子直径,同时还含有灰尘等杂质,对光线的衰减更严重。
雾对成像的影响主要在于以下几方面:1.亮度的不均匀。由于雾的散射作用,正对光源时,光源能量会弥散到很大区域,远离光源的地方亮度更低。2.对比度低。被雾遮盖的景物变得朦胧模糊,细节信息被削弱。3.动态范围小。雾气浓重的时候,整幅图像都呈现亮白色,在此之下物体原本的颜色只能占据有限的量化值。
分析不同浓度雾天图像的直方图信息可以支持以上论点。
所以图像的去雾即是要针对以上三个特点,对图像进行增强,均衡整体亮度,提高对比度,增大动态范围。
对彩色图像去雾,需要在提高提高清晰度的同时尽量保持颜色的真实,因此需要选取合适的颜色空间对图像进行处理。HSI颜色空间中,亮度和色调、饱和度分离,对亮度的调整不会影响颜色的准确性,因此适合用于去雾算法。
普通的数码相机通过覆盖了拜尔滤镜的CCD成像,初始输出就是RGB颜色信息。RGB颜色空间是直角坐标系中的一个立方体,而HSI空间是圆柱直角坐标系中的双锥体。两种颜色空间如图所示,两者之间可以容易地相互转换。
31 RGB颜色空间与HIS颜色空间
本文的去雾算法中,首先将原始图像转换到HSI空间,利用小波分解,在亮度分量I中完成主要的去雾增强算。
传统Retinex算法:
Retinex算法描述了颜色恒常性模型,它具有两层含义:物体的颜色是由物体对不同波长光线的反射能力决定的,而不是由光线的反射强度决定的;物体的色彩不受光照非均匀性的影响,具有一致性。人眼对看到颜色的分辨不是客观的,识别到的物体色彩会受到光照不均匀的影响。这一表述可以用数学公式表示为:
$$I\left( {x,y} \right) = L\left( {x,y} \right) \times R\left( {x,y} \right)$$[2]
其中,I(x,y)为被观察到的图像信号;L(x,y)为环境光的照射分量,主要体现为高频信息;R(x,y)为携带图像细节信息的目标物体的反射分量,属于低频信息。要校准光照的不均匀,就应当滤除照射分量L(x,y),以获得图像反射信号R(x,y). 使用低通滤波器F(x,y)可以估计出L'(x,y). 由于[2]式是乘性关系,两边取对数可以转换成加性关系,即
$$\log \left( {I\left( {x,y} \right)} \right) = \log \left( {L\left( {x,y} \right)} \right) + \log \left( {R\left( {x,y} \right)} \right)$$
使用F(x,y)估计L'(x,y),进而得到对反射信息的估计,这是消除了雾影响后的物体真实反射信息,即
$$R'\left( {x,y} \right) = \exp \left( {\log \left( {I\left( {x,y} \right)} \right) - \log \left( {F(x,y)*I(x,y)} \right){\kern 1pt} } \right)$$[3]
传统的Retinex算法中,F(x,y)选用高斯滤波器。高斯滤波的低通效应会削弱图像的边缘信息,处理后的图像在明暗相间的位置会产生光晕效应。
改进的Retinex算法:
改进的Retinex算法使用双边滤波器,可以克服光晕的产生。相比高斯滤波器,双边滤波器同时考虑了位置距离信息和图像相似度信息。以(x,y)为中心,$$\left( {x',y'} \right) \in \Omega $$的邻域内,双尺度滤波器系数w表示为:
$${\left. {w\left[ {\left( {x,y} \right),\left( {x',y'} \right)} \right]} \right|_{\left( {x',y'} \right) \in \Omega }} = {w_s}\left[ {\left( {x,y} \right),\left( {x',y'} \right)} \right]*{w_R}\left[ {\left( {x,y} \right),\left( {x',y'} \right)} \right]$$
其中,$${w_s}\left[ {\left( {x,y} \right),\left( {x',y'} \right)} \right] = {e^{ - \frac{ { { {\left( {x - x'} \right)}^2} + { {\left( {y - y'} \right)}^2}}}{ {2\sigma _{_s}^2}}}}$$为空间邻近度因子,$$\sigma _{_S}^2$$为邻近度可调参数;
$${w_R}\left[ {\left( {x,y} \right),\left( {x',y'} \right)} \right] = {e^{ - \frac{ { { {\left| {I\left( {x - x'} \right) - I\left( {y - y'} \right)} \right|}^2}}}{ {2\sigma _{_R}^2}}}}$$为相似度因子,$$\sigma _{_R}^2$$为相似度可调参数。
双边滤波器可以在低通滤波的同时,保持边缘的锐利,这是因为在边缘处由于像素差异大,相似度因子W_R极小,差异像素对中心点的贡献权重得以降低。
小波域Retinex去雾:
将亮度分量I使用小波分解后,在近似分量上运用Retinex算法,滤除光照不均的干扰。使用sym4小波对亮度分量进行分解,得到近似分量cA(x,y). 使用双边滤波器Retinex算法从中估计照射分量信息:
$$c{\tilde A_L} = \frac{ {\sum\limits_{\left( {x',y'} \right) \in \Omega } {w\left[ {\left( {x,y} \right),\left( {x',y'} \right)} \right]cA\left( {x',y'} \right)} }}{ {\sum\limits_{\left( {x',y'} \right) \in \Omega } {w\left[ {\left( {x,y} \right),\left( {x',y'} \right)} \right]} }}$$
从原始图像 $cA$ 中减去 $c{\tilde A_L}$,可以得到反射分量 $c{\tilde A_R}$的估计,但了保留一定的层次信息,不完全减去$c{\tilde A_R}$,而是减去$k \cdot c{\tilde A_R}$,其中0 $$c{\tilde A_R} = \exp \left( {\log \left( {cA} \right) - \log \left( {c{ {\tilde A}_L}} \right)} \right)$$[4] 亮度保持: 小波变换后,图像的主要能量集中在近似分量$cA$中,使用[4]式中的方法去雾后,近似分量系数幅值会发生变化,进而影响重构后图像的亮度,所以需要对$c{\tilde A_R}$进行补偿。这里使用线性补充方法:$c{\tilde A_R} = mean(cA)/mean(c{\tilde A_R}) \cdot c{\tilde A_R}$,以获得与原始图像相同的亮度。 亮度不均问题已经在上一小节中使用Retinex算法进行了调整,雾天图像还存在细节模糊的问题,通过对高频系数的阈值化改造可以增强细节,提供对比度。为了增强细节的同时抑制噪声的影响,使用双阈值方法改造高频分量。双阈值方法是一种非线性的补充,其变换函数为: $${W_{out}} = \left\{ {\matrix 其中为${W_{in}}$输入系数幅值,${W_{out}}$为输出系数幅值。 阈值门限${T_1}$根据系数的统计值自适应确定,${T_1} = \sigma \sqrt {2\left( {\log n} \right)/n} $,$\sigma $为系数的均方值,n为图像大小。T2和增益G需要根据具体情况调整,参考值为T2=3T1,G=5. 亮度和低频分量处理完后,进行小波重构,恢复亮度信号I. 雾天图像往往具有色彩饱和度较低的特点,灰蒙蒙不够艳丽,因此在HSI颜色空间对饱和度分量S进行微调,对饱和度低的区域予以提升,对饱和度过高的区域进行压制。下面的分段对数变换可以达到这一目的。 取变换关系f: $$f\left( {S\left( {x,y} \right)} \right) = \left\{ {\matrix 将归一化到[0,1], $$S'(x,y) = f\left( {S(x,y)} \right)/f(1)$$. w1、w2、w3、w4是可调系数,参考值取1.5, 1.3, 0.7, 0.6. 去雾和细节增强处理完成之后,从HSI颜色空间转换回到RGB空间,此时RGB数值仍是小数表示形式。对量化值拉伸使其尽可能宽地分布在0-255范围内,已获得更大的动态范围,包含最大化的信息量。拉伸方法为[13]: $${I_{out}}\left( {x,y} \right) = 255*\frac{ {R\left( {x,y} \right) - \min \left( {R,G,B} \right)}}{ {\max \left( {R,G,B} \right) - \min \left( {R,G,B} \right)}}$$ 最后还需要对每个颜色通道的独立像素乘以一个颜色恢复因子$${C_i}(x,y) = \log \left( { { {b{I_i}\left( {x,y} \right)} \mathord{\left/ 以上描述的整个去雾增强算法用流程图描述如下: 图 32 去雾算法的框图 利用Matlab 2012,实现前文描述的去雾算法并对样片进行处理。小波变换时采样sym4小波基函数,分解级数为3级;双边滤波时选用3*3邻域,$\sigma _{_S}^2$取3,$\sigma _{_R}^2$取1. 选取2幅雾浓度不同的图像进行处理,比较本文算法与直方图均衡方法和传统Retinex算法的差异,其中所谓传统Retinex算法也按照图3-2所示的框图进行,唯一不同的是使用高斯滤波估计照射分量。 从处理结果可见,局部直方图优化方法可以通过提升图像的动态范围获得一定的可视效果提升,但对于去雾基本没有效果,也无法改善光照不均的现象;传统Retinex算法使用高斯滤波估计照射分量,配合整套算法流程可以获得不错的去雾效果,第一张图像树林中的薄雾去除明显,但在明暗变化剧烈的边缘会产生光晕(见第二张松树的中间部分);改进使用双边滤波后,克服了明暗变化边缘的光晕效应,整体效果更佳自然,并且通过小波域高频系数的增强,RGB空间上的动态拉伸,图像对比度和动态范围均有所提高,人眼可视度佳。 图表 1 第一幅测试图像,薄雾 图表 2 第二幅测试图像,浓雾 信息熵可以定量描述图像所含的信息量,统计两张样片的原始信息熵,以及不同算法处理后的信息熵。结果显示,用本文提出的算法进行处理后,图像信息没有减少,相比于传统Retinex算法,本文处理结果的信息熵略有提升。值得注意的是,虽然局部直方图均衡算法获得了更大的信息熵,但这是以追求最大动态宽带为准则获取的,没有考虑到实际处理结果的质量,这直接造成了图像中某些区域色块的过饱和(见松树的直方图均衡处理结果)。 图表 3 不同方法处理后的熵 熵 图像序号 原图 本文算法 局部直方图均衡 传统Retinex 1薄雾 21.0675 21.0878 21.9183 21.0687 2松树 20.3652 22.1306 22.6657 22.0028 基于小波变化和Retinex算法,利用HSI与RGB颜色空间的特点,本文提出对HSI空间的亮度信号作小波分解,在近似分量上进行去雾处理,使用了改进的Retinex算法,对高频系数进行阈值化改造,以提升细节和对比度。频域处理完后,在RGB空间上对图像进行动态范围拉伸,提高图片可视度。通过实际样片的处理测试,该方法对薄雾去除效果明显,在浓雾环境下可以提升图像对比度,提高人眼可分辨度,同时又克服了传统Retinex方法产生光晕的问题。 张秀琼, 刘直芳, 袁红照. 基于多尺度Retinex和小波变换的彩色图像融合方法[J]. 四川大学学报(自然科学版), 2009, 46(2):329-333.高频系数增强
{ {W_{in}} + {T_2}(G - 1) - {T_1}G} \hfill & { {W_{in}} > {T_2}} \hfill \\
{G({W_{in}} - {T_1})} \hfill & { {T_1} < {W_{in}} \leqslant {T_2}} \hfill \\
0 \hfill & { - {T_1} \leqslant {W_{in}} \leqslant {T_1}} \hfill \\
{G({W_{in}} + {T_1})} \hfill & { - {T_2} < {W_{in}} \leqslant - {T_1}} \hfill \\
{ {W_{in}} - {T_2}(G - 1) + {T_1}G} \hfill & { {W_{in}} < - {T_2}} \hfill \\
\endmatrix } \right.$$ 饱和度增强
{ {w_1} \times \log \left[ {1 + S\left( {x,y} \right)} \right]} \hfill & {0 < S\left( {x,y} \right) \leqslant 0.25} \hfill \\
{f\left( {S = 0.25} \right) + {w_2} \times \log \left[ {1 + S\left( {x,y} \right) - 0.25} \right]} \hfill & {0.25 < S\left( {x,y} \right) \leqslant 0.5} \hfill \\
{f\left( {S = 0.5} \right) + {w_3} \times \log \left[ {1 + S\left( {x,y} \right) - 0.5} \right]} \hfill & {0.5 < S\left( {x,y} \right) \leqslant 0.75} \hfill \\
{ {w_4} \times \log \left[ {1 + S\left( {x,y} \right) - 0.75} \right]} \hfill & {0.75 < S\left( {x,y} \right) \leqslant 1} \hfill \\
\endmatrix } \right.$$ 动态范围拉伸与颜色恢复
{\vphantom { {b{I_i}\left( {x,y} \right)} {\sum\limits_{i = 1}^3 { {I_i}\left( {x,y} \right)} }}} \right.
\kern-\nulldelimiterspace} {\sum\limits_{i = 1}^3 { {I_i}\left( {x,y} \right)} }}} \right)$$,其中b是增益因子,I_i(x,y)为第i通道的数值。到此为止,所有的处理步骤已经完成,将RGB值取整量化,作为最后的输出。算法框图
验证与分析
结论
参考文献