陆 欢
(上海理工大学 光电信息与计算机工程学院,上海 200093)
在计算机视觉系统中,很多应用都需要图像具有一定的鲁棒性,如智能交通,视频监控,智能车辆等领域。然而在现实生活中,由于恶劣天气的影响,尤其在雾霾天气,大气中的悬浮颗粒和水滴会对光进行散射和吸引,导致了很多细节的丢失,使得其可利用价值降低,因此对有雾图像进行去雾处理具有重要意义。
目前的发展阶段,图像去雾的方法主要分为两大类:第一类是基于非物理模型的图像增强方法,例如直方图均衡化算法[1]和基于Retinex理论的增强算法[2-3],这类算法优点是对清晰度图像进行增强,改善图像的质量,缺点会导致部分图像信息的损失,去雾效果不理想。第二类是基于物理模型的图像复原算法,该方法通过分析导致雾化图像降质,算法原理是:基于悬浮颗粒对光的散射作用,建立大气散射模型,在此基础上反验复原图像的真实信息,真正从物理意义上实现去雾效果。
Narasimhan[4]等提出了许多求取场景深度信息的方法,从RGB颜色空间推导出二值散射模型,利用多幅彩色图像求取场景深度信息。孙大宝等人[5]根据雾化图像全局和局部去雾的能量最优化模型,推导出相应的偏微分方程,从而达到图像去雾目的。而在先验图像复原方面,Tan等人[6]利用最大化雾化图像的局部对比度的方法复原雾化图像,但处理后的图像容易出现光晕现象,且颜色通常过于饱和。Fattal[7]假定光的传播和场景表面遮光部分局部无关,在此基础上计算场景的投射和反射率,从而消除图像中的雾气干扰,但是对于浓雾图像,该方法的去雾图像颜色偏暗,失真比较严重。He等人[8-9]提出了暗原色的去雾理论,运用暗通道估计粗糙透射率,再利用软抠图优化透射率,该方法虽然效果较好,但是运算量较大,同时当雾化图像中含有大面积明亮区域,复原区域颜色容易失真。
针对以上的情况,本文提出对基于暗原色原理的去雾算法并对其进行了改进,引入容差参数优化明亮区域透射率的求取,减少去雾图像颜色失真的情况,最大化实现去雾。
大量环境光线可能被散射到摄像头中,二者重叠形成新的图像,最终导致摄像头拍摄失真、对比度降低。
McCartney[10]提出了广泛应用在计算机视觉领域大气散射模型,根据模型可知图像成像光线来自两部分:一是目标物体的反射光线,但其在传播过程中会因为散射而发生大幅度衰减,即衰减模型;另外是来自环境光由于散射而进入摄像头的光线,即大气光模型。式(1)及对物化图像的散射模型进行了描述
I(x)=t(x)J(x)+(1-t(x))A
(1)
式中,t(x)表示光线传输透射率,I(x)表示雾化图像,J(x)表示目标物体反射光的光线强度,即无雾图像,A表示大气光值。
当图像中包含天空区域时,和天空区域的深度相比,可以假定场景中的深度为0,在此基础上对图像场景深度进行归一化处理
J(x)=emx(I(x)-A)+A
(2)
令d=nx,式中n表示归一化系数,m=n,x表示归一化处理后的场景深度。x值较小时,emx变化较为缓慢;x值较大时,emx变化急速增加;令m=x,可推出图像雾化简易模型
I(x)=e-x2(J(x)-A)+A
(3)
由式(3)可知则图像复原公式可化为
J(x)=ex2(I(x)-A)+A
(4)
暗原色先验是基于在统计清晰图像中的绝大部分非天空局部区域,在每个局部区域中都存在着一个或多个颜色通道的某一些像素具有很低的值。换言之,对于图像J,暗通道可以用下式定义
(5)
Jdark(x)是以x像素点为中点的像素区域块的暗原色,针对一个清晰无雾非天空区域的图像,该值都很小,趋近于0。如果用15×15像素将图像划分为区域块,Jc代表J的一个颜色通道,其中c∈{R,G,B},是以x为像素点中心的一块方形区域,经过大量实验观察,在每个方形区域总存在灰度值很低的{R,G,B}通道,抽取出这些块的灰度值,可以得到该图的暗原色图。
通过给定的大气散射场模型,可知图像的雾化物理模型,估计出大气光值A后,假设每个窗口的透射率均为一个常数,即t(x),对式(1)两边同除A操作后,两边分别再进行两次最小值操作可得
(6)
根据暗原色先验理论,即可获得大概的透射率
(7)
(8)
即两透射率和大气光值带入式(1)中,可恢复去雾图像
(9)
暗通道先验的局限性在于会导致包含大面积天空区域的图像出现颜色失真,且求解大气光值易受亮度高的因素干扰。因此本文针对这两种问题提出相应优化。
暗原色先验去雾算法原理简单、易于实现,效果较好,但该算法仍有不足。暗原色求取过程中,窗口的大小会对图像的复原效果产生较大的影响。在透视率的估计运算上,暗原色先验原理不适用于明亮区域。复原图像去雾之后颜色整体偏暗。因此,在本文中,通过暗原色值得自适应估计减小窗口大小对于复原效果的影响,引入容差参数改变明亮区域的透射率,运用改进的线性亮度调节方法调节整体图像亮度。
在暗原色值的估计过程中,He[11]首先求出图像各个像素点R,G,B分量最小值min(Jc(y)),然后再选取局部区域Ω(x)内像素最小值作为次中心点 的暗原色值,逐点替代,其中Ω(x)为以x为中心,15×15的局部区域。一般局部区域越大,暗原色先验去雾的质量就越高,这是因为此时局部区域中含有暗原色像素点的几率会增大;反之,局部区域较小时,复原图像颜色会过度饱和,如图1(b)所示。此外,局部区域越大,透射率在该区域内为常数的设定就越不靠谱。如果Ω(x)过大,那么去雾图像的深度间断点处可能产生光晕现象,如图1(c)所示。
为解决上述Ω(x)过大或过小的问题,本文对局部区域大小的选取进行了改进。以5×5模板作为局部区域Ω(x)最小值,其余的情况选取图像行或列最大值的1%作为局部区域Ω(x)大小。如果一幅图像的尺寸为m×n,则Ω(x)大小为block×block,其中block为
block=max(5,m×1%,n×1%)
(10)
虽然暗原色先验去雾算法在处理自然的雾化场景具有很好的效果,但是通过实验会发现,当雾化图像包含的明亮面积较大时,复原图像容易发生颜色时真现象,如图2所示,其中(a)为雾化图,(b)为透射率图,(c)为去雾图。
按照He的方法估计大气光的值A时,若是雾化图像包含大面积明亮区域,A值对应的像素点落在明亮区域的概率较大。根据计算透射率的公式(7)可知,像素点的值I和大气光的值A的差值越小,相对应的透射率的值也就越小。对于明亮区域,利用式(7)计算出来的透射率趋近于0。
然而对于图像中的明亮区域的像素点,R,G,B3个颜色通道的值普遍偏大,不存在某个通道的值趋近于0的情况,暗原色理论失效,此时式(6)可以化为
(11)
由此可知,在明亮区域,图像像素点亮度值较高,该区域的暗色值也相对较大,并不接近0,则min(min(Ic(x)/Ac))的值小于1,因此明亮区域实际透射率要大于He算法的透射率值,而透射率值过小估计使得明亮区域颜色恢复错误,从而导致严重的色偏。
明亮区域内各像素点3个通道的灰度值普遍偏大,而且差值较小,通常各通道之间的差值小于或等于10。因此,本文定义色彩偏移量
δc(x)=|Ic(x)-A|,c∈(r,g,b)
(12)
由上式可知,δr,δg,δb相差极小,又因为明亮区域根据He算法计算的透射率值要小于真实的透射率值,趋近于0,代入式(9)相除后就会使差值被大幅度放大几倍、十倍、甚至百倍,导致复原图像的颜色产生失真。
为解决这一情况,本文引入容差参数K[12],认为|I-A|
(13)
图3为透射率改进后,图2中两幅雾化图像的去雾效果对比图,从图中可以看出He的方法在天空等明亮区域存在失真现象,而本文改进后的算法在明亮区域颜色失真较少。
雾天情况下,成像设备拍摄的图像整体偏灰白,经过暗原色先验算法处理后,复原图像整体偏暗,如图4所示。为了增强图像的亮度和对比度,本文利用式(14)对去雾图像进行处理,从而达到亮度增强的效果。
(14)
式中,J(x)表示复原图像;R(x)表示亮度增强图像;λ表示亮度增强系数,λ∈[-1,1],亮度调节后如图4(c)所示。
本文的算法流程如图5所示,从模型中获取数据之后,根据|I-A|>K判定是否需要对透射率进行校正。
在硬件配置为CPU双核2.00 GHz,内存 4 GB,软件为Visual Studio 2013, Windows 7操作系统的电脑上,选取20幅1 980×1 080 大小的图像,利用式(3)对图像进行去雾化处理,再分别利用He算法和暗原色优化算法进行图像去雾处理。其中两幅图像的处理结果如图6所示。
图6为He算法和暗原色优化算法的去雾效果对比图,从图中可以看出:He算法和本文暗原色优化算法均能达到去雾的目的,但是相比之下,本文优化算法的去雾效果更好,复原图像更清晰,颜色更加鲜艳。此外,当雾化图像出现大面积明亮区域时,He算法复原图像出现了颜色失真的情况,而本文的优化算法则很好的避免了这一现象。
表1客观评价指标Table 1.Objective evaluation indicators
为进一步比较He的算法和暗原色优化算法的去雾效果,本文采用信息熵、平均梯度、对比度和执行时间对去雾图像进行客观评价,结果如表1所示。从表1的数据可以得出,无论是He算法还是本文的优化算法均能有效增大图像的信息熵、平均梯度和对比度,但是相比之下,本文优化算法的增幅更加明显。此外,从时间复杂度来看,本文算法的运行时间仅是He算法的约1/4。
本文基于雾天大气散射模型和暗原色先验理论,提出了一种改进的去雾算法。先利用统计截断的算法估计大气光值;然后对暗通道算法粗略估计透射率,对于明亮区域进行自适应矫正处理,带入大气散射模型完成去雾处理,并通过调整改善复原图像的亮度。通过改进的方法有效的降低了明亮区域的色彩失真,在细节不丢失的前提下保证了福原图像的亮度。优化算法可以为图像分割,智能分析等图像处理工作提供有效的预处理手段,可作为去雾算法移植到视频图像采集的前端,为减少后台处理的运算和空间提供了支撑。