0 引言
目前关于雾景图像的处理技术已有许多研究结果,但大多数去雾算法要么是基于多幅图像或融合其他信息进行去雾,这大大限制了算法的使用范围。而基于单幅图像的去雾算法,如广泛使用的暗通道方法,大部分还是应用于PC环境,处理方法复杂,处理速度慢,需要多次遍历图像。以暗通道方法为例,文中使用3.0GHz的奔4处理器对600×400分辨率雾景图像进行处理时亦需要10~20秒,难以在嵌入式环境下进行实时处理。
但是以上的去雾算法的处理目标是为了完全去除图像中的雾气效果以提高肉眼的观感,而在如军事、监控等实时应用中往往无需全部去除雾气来提高观感,而仅仅是为了提高感兴趣区域的辨识度,以发现隐藏在雾景中的目标物。所以,如何提高原始图像中受雾气影响较严重区域的物体辨识度成为在这些应用场景下进行实时去雾处理的关键点。
本文所采用的快速算法的处理目标就是利用雾景图像的亮度分布特点,通过采用基于图像增强的方法来提高原始图像中被雾气影响的远景物体的辨识度。算法复杂度低,优化后的FPGA实现可以做到ns级的延时。
1 算法介绍
室外多雾环境由于空气中的雾气改变了大气散射条件,使得采集到的物体图像发生了对比度退化。广泛使用的雾景图像数学模型如式(1)所示。
I(x)=J(x)t(x)+A[1-t(x)] 式(1)
式(1)中:I是观察到的雾景退化图像,J是无雾时的景物图像,A是大气光照,t是透射率。所以要进行完全的去雾就是要通过I和某些先验条件反算出J、t、A。
本文算法主要关注大气光照参数A对图像所产生的影响,令t=0,可得I=A,可见A指代当场景中没有物体时所观察到的大气光照图像。而由于物体的视觉信息都是由大气光照下由物体反射得到,在反射中物体会吸收部分光线,造成亮度损失。所以A通常为整幅雾景图像的亮度最高值,所以有如下示意图来进一步表述退化作用的原理。
由式(1)结合图1易见,雾景图像实际可看成由原始无雾图像上按比例半透明地叠加上一层高亮白色图像得到的结果,而其叠加比例参数决定于透射率t,透射率越高,雾气对于成像的影响越小,得到的图像越接近真实。而在室外场景中,雾气浓度分布均匀情况下,物体距离相机越远,透射率越低,即采集到的物体图像的退化程度越高。而由于A通常为整幅图像的亮度最高值,所以雾景中物体的亮度也会随着退化程度的提高而变高。
所以,由理论模型我们可以得到以下结论:在通常的雾景图像中,物体距离相机越远,图像的退化程度越高,其亮度也随之变高。即雾景图像的亮度和退化程度具有一定程度的正相关性。
基于以上的分析,我们可以通过增强高亮度区域图像的对比度来提高雾景图像中退化较严重区域物体的辨识度。我们使用式(2)来进行亮度的映射以实现对高亮度区域的对比度增强。式(2)所对应的亮度映射曲线如图2对比度曲线应具有随亮度提升平滑需要使用如式(2)所示的函数进行对比度调节得到的亮度映射曲线如图2所示。
式(2)中参数p为增强强度,取值范围[0,1)。当p=0时Yout=Yin即没有增强。
图2中的p=0时的平直线为标准对比度曲线,可以看出当亮度较低时算法的曲线斜率小,随着亮度变高,斜率逐步变大。并且斜率变化连续,曲线平滑,以降低由对比度调节所带来的图像失真。同时,随着p增大,曲线的曲度变得剧烈。
2 FPGA实现
基于FPGA的硬件处理,需要将原[0,1)的浮点数对应到[0,255]的定点整数域进行处理。所以此算法对FPGA来说只需建立并维护一个8bit 256的亮度映射表即可,适合在FPGA中实现。
2.1 硬件结构
由FPGA为核心搭建的硬件平台框图如图3所示。模拟标清PAL视频经过AD芯片转换为数字视频输入到FPGA中,在FPGA内对视频进行去雾处理,处理完的数字视频输出到DA芯片中再转换成PAL输出给显示器显示。
数字化后的PAL信号符合BT.656标准,为内嵌同步码的YUV数字视频,其中Y分量为亮度分量,FPGA即针对此分量进行去雾处理。
BT656视频格式以及Y分量的提取方法如图4所示。
根据BT.656码流中的内嵌同步头对数据定位,再对定位后的流数据进行计数,计数中如图4所示的第偶数个数据为Y分量,将其提取出使用本算法进行处理。
2.2 算法优化
由于真实场景中采集的图像往往亮度无法达到饱和,如果直接运用式(2),大量像素都映射到低亮度部分曲线,反而压低了整个对比度所以不会得到太好的效果。所以原公式中需要加入最大亮度Ymax参数,将(Ymax,255)作为曲线的收敛点,同时将式(2)的计算处理成定点整数域计算以利于硬件实现,最后得到优化后的公式:
式(3)中的Yin,P,Ymax,Yout有效位数均为8bit,取值范围为[0,255),即变量的归一化值变为255。其中,Ymax为一帧图像像素中的最大亮度。当Ymax=210时,式(3)所得到的亮度曲线如图5所示。
由图5可见,优化后的亮度映射曲线与图2基本一致,但收敛点变为(Ymax,255),从而提高亮度变换的有效性。
由于要统计图像中的亮度最大值,所以需要遍历一遍图像,这样会增加40ms(一帧PAL图像的传输时间)延时。实际处理时可以利用视频帧间差异较小这一特点,取上一帧的Ymax作为当前帧处理的参数。由于Ymax是上一帧的最大值,所以算法处理时可能出现当前帧的Yin大于Ymax从而其映射得到的Yout值可能溢出(大于255)。因此,建立和更新映射表时需要将计算结果大于255的值进行钳位,使其等于255,由以上方法得到FPGA逻辑原理框图如图6所示。
图6中的Y分量提取模块将输入视频流中的Y分量提取出来分支到两路处理,一路进行最大值搜索,当一帧结束时得到Ymax输出给亮度映射表生成模块生成新一帧的亮度映射表;分支的另一路查询当前亮度映射表,得到增强后的Yout,最后和UV分量再次复合成标清视频流输出到AD芯片进行PAL编码。
2.3 去雾效果和性能
针对几张雾景样图的处理效果如图7所示。
处理的效果由图7可以看出,雾气弥漫的图像上部区域在增强处理后对比度有所提升,原图区域中的物体模糊一团,随着增强强度的提升其纹理特征基本可识别。
但此种提升效果是以降低图像整体亮度为代价的,当参数升高时,整体亮度逐渐下降。所以在不同的光照条件下,选取不同的P值可以得到更好的感官效果。
在处理的性能方面,由于在映射表的建立和更新中使用上一帧图像的Ymax,对当前帧处理时,表已在上一帧图像结束后的消隐时间中更新完毕。所以,当Yin输入时直接进行查表得出增强后的Yout,延时仅为一个时钟周期,本文所完成的设计中使用27MHz时钟作为系统时钟,即延时约为37ns。
算法使用Xilinx公司低端系列Spartan3的XC3S400AN实现,仅占用402Slices,3个乘法器以及54Kbit块ram,最高可以运行到142MHz,并且不需任何片外存储资源,所实现系统的成本低,功耗小,实时性高。
3 小结
针对室外多雾环境下,雾中景物亮度高,但对比度低的特点,本文提出了一种使用亮度映射的图像增强算法。基于此算法可以快速建立亮度映射表,对输入图像的亮度使用查表法处理即可完成图像多雾区域的对比度增强,可以有效提高多雾场景中物体的辨识度。在FPGA中实现的逻辑电路复杂度低,实时性强,资源占用少。