一种基于嵌入式多核处理器的实时图像去雾方法
2018-04-11廖晓波朱建公
周 军 廖晓波 朱建公
(西南科技大学制造过程测试技术省部共建教育部重点实验室 四川绵阳 621010)
当前,随着空气中灰尘、霾等微粒的不断增多,驾驶员在行驶过程中很容易因视觉模糊或眩晕导致不必要的交通事故发生。随着科技的不断进步,汽车都加装有嵌入式控制系统和一个可以显示汽车前后方向图像的显示屏。然而,户外的图像因雾、霾、烟等原因而使图像质量变差,这些模糊的图像在被送往显示器进行显示前需进行图像去雾处理。在图像去雾处理算法中,算法的实时性一直是困扰其得到广泛应用的重要原因。本文提出了一种适合在嵌入式多核处理器平台下快速对图像进行处理的算法。
1 图像去雾概述
按照图像去雾是否基于一个物理模型来看,去雾基本分为两种方法:物理模型和非物理模型。物理模型方法以大气透射系数为模型,通过分析大气中能够影响图像质量的因子,反解透射系数而达到恢复图像的目的。这种方法理论上并不精确,因为其包含3个未知参数,所以求解这类问题需要使用一些假设和估计成分,或者使用同场景的多幅图片来求解以达到恢复图片的目的。基于这种理论,Tan[1]提出最大化带雾图片局部对比度的方法,这种方法能带来很大程度上的视觉冲击,但并不能按照大气投射理论恢复出真实的场景图像,最终恢复出的图像呈现过饱和、不真实的特点。Fattal[2]利用统计学原理,采用估计物体反照率的方法来解决投射系数问题,取得了良好效果,但一旦出现大雾天气就不能很好地处理,甚至违反统计学原理。He[3]通过观察户外的大量图片,提出暗通道先验原理,这个方法能够优良地作用于户外绝大多数图像,但是暗通道先验原理对天空区域或者与天空相似的区域来说没有用处。
非物理模型方法并不关心场景光在介质中的投射情况,换句话说,这些方法是通过一些简单的图像增强或者主观视觉感受来达到去雾的目的。传统图像增强的方法有对数变换、指数变换、直方图均衡、空域滤波等。其他包括主观视觉感受的方法有颜色恒常知觉计算理论,比如视网膜增强算法、改进的视网膜增强理论、多规模视网膜增强理论、带色彩恢复的多尺度视网膜增强算法等[4]。
在上述方法中,能够达到很好去雾效果的物理模型方法依赖于物理模型的正确性和相关假设理论的合理性,这些假设理论在最近几年正在被持续完善。其中,基于暗通道先验原理的图像去雾方法能够很好地处理雾霾较大的情况,这也适合应用在嵌入式系统领域中。但是这个方法有一个致命的缺点是在计算过程中会花费大量时间,导致该算法不能直接应用于实时图像处理环境中。白林亭等[5]针对这个问题利用数字信号处理器(DSP)在He的去雾算法上做了一定强度的优化,能够达到基本的实时性要求。不过由于其未对去雾后的图像进行颜色校正,使得去雾后图像容易在天空区域出现光晕和颜色失真等现象,一定程度上影响了可视性,由于其实现是基于DSP处理器,在嵌入式手持设备中应用受到了限制。为了解决这一问题,本文提出一种基于ARM内核的快速图像去雾方法。
2 暗通道先验原理
广泛应用于计算机视觉和计算机图形学的大气透射模型如式(1):
I(x)=J(x)t(x)+A(1-t(x))
(1)
其中,I(x)表示在带雾图像中像素x的像素值(强度值),J(x)表示在不带雾图像中像素x的像素值(强度值),t表示场景光在穿透介质(大气)后到达摄像头的部分,A表示全球大气光的值。上式中右边第一项表示直接衰减项,表示场景的辐射和它在介质中的衰减。第二项表示大气光成分,它是由大气散射所导致的。
正如上面所描述的,暗通道先验原理表达式为:
(2)
式中,c表示RGB 3个颜色通道中的任意一个,Ω(x)表示以像素x为中心的局部区域。式(2)中,如果J表示无雾图像,对除天空部分的决大多数局部区域而言式(2)得出的结果趋近于0。进一步假设在局部区域中t为常量,A的值已知,这时能够得出:
(3)
正如暗通道先验原理表述的那样,上式右边第一项趋近于0,所以能够计算出t的值。为了使去雾得出的图像自然一些,需要引入一个常量因子:
(4)
(5)
使用式(5)能够直接计算出去雾后的图像。但是在去雾的过程中,求解投射系数t时隐含了一个严重的问题,那就是在直接利用式(5)求得的无雾图像里,会出现非常严重的快效应。为了解决这个问题,He提出了一种叫做“软抠图”[3]的算法来细化求解的投射系数t。该方法使用的理论非常复杂,并且要求解一个非常庞大的稀疏矩阵。算法所用时间太多,以至于完全不能用于实时性处理,需要研究一种能够替代这种算法的方法。
3 实时图像去雾算法
为了解决“软抠图”算法所带来的时间和空间上的不足,本文提出了一种改进的实时图像去雾算法。为了达到实时的目的,多核处理的并行处理能力是本文算法的核心。算法流程如图1。
图1 实时去雾算法流程Fig.1 The algorithm flow of real-time haze removal
首先,要将输入的待去雾图像进行分辨率降解处理(下采样)。这样做是为了能够加快投射系数t的求解过程。投射系数t在局部范围内可以将其看作一个不变的常量,因此在求解的过程中将高分辨率的输入图像通过缩放变换为一个低分辨率的图像。这样做既保证了投射系数t的精确性,也在一定程度上减少了计算时间。然后,根据暗通道先验原理就可以求出投射系数t在整张图片的分布。不过这时求得的t带有很严重的快效应,于是使用导向滤波方法来优化投射系数t,使得到的t更为精细。这时,由于t与原图像的分辨率不同,无法直接通过式(5)得到去雾后的图像,于是直接使用临近插值法对低分辨率的投射系数t分布图进行上采样得到与原图同样大小的投射系数分布图。最后,因得到的无雾图像会导致向暗色过渡,因此还需要对其进行颜色校准,然后输出得到最终的恢复图像。
3.1 下采样
对于一个分辨率很高的图片,下采样在保证了图像细节的同时,还能够大大降低图像的像素数,这样也会使图像处理的速度得到很好的改善。这个步骤的关键点在于如何选择采样的百分比来平衡图像处理时间和采样时间之间的冲突。如果采样率过大,会导致大量时间花费在采样上,并且图像的细节也不能得到充分的保障;如果采样率过小,仍然会导致在图像处理过程中耗费大量时间,使去雾达不到实时效果。
3.2 求暗通道
计算图像暗通道的过程由式(2)直接给出,这一步的时耗主要在于最小值滤波。如果使用一个w×w大小的模板对一张M×N的图片进行最小值滤波,使用常规方法实现的算法时间复杂度为O(M×N×w×w)。
能够证明,如果使用线性阵的方式来实现最小值滤波,那么在最坏的情况下每个元素至少会比较1.5次。也就是说,如果有N个元素,那么算法的时间复杂度会变成O(N×1.5)。Daniel[6]提出了一个名叫基于流的最大最小值滤波方法(SMMF),这个算法在实际运行过程中每个元素最多比较次数不超过3次。基于SMMF,对一个矩阵D进行最小值滤波的流程如图2。
图2 最小值滤波算法流程Fig.2 The algorithm flow of mini-value filtering
在这个步骤结束后,对于在D中(x,y)位置处的像素p,在w×w范围内的最小值被保存在M3中的(x-w,y-ω)位置。
3.3 导向滤波
在文献[3]中,作者使用软抠图的方法来对透射系数t进行优化滤波,这种方法无论是从时间上还是空间上耗费巨大。为了解决这个问题,许多用来代替软抠图的方法被陆续提出。文献[7-8]中使用双边缘滤波算法通过计算局部均值和方差法估计出透射系数t。He提出了一种名叫导向滤波[9]的算法,这个算法的关键就是求均值,所以它能够在完成优化透射系数的基础上节约大量时间和空间。考虑到均值滤波和计算机的并行运行,本文采用导向滤波算法代替软抠图算法对透射系数t进行优化。
导向滤波算法流程如图3所示。其中,p是输入图像,I是导向图,p是输出图像。在这个算法中函数f_mean()表示对图像进行均值滤波。
图3 导向滤波算法Fig.3 The algorithm of guided filtering
3.4 上采样
在经过上采样的步骤后,会得到一张与原图等大的高分辨率透射系数t的图像。而上采样的最为常规的方法便是插值法,如双边缘差值、双三次插值和样条插值法等。这些方法速度较快并且容易编程实现,但是这些方法在插值点增多后就会使得结果图出现模糊效应。Shan等[10]人提出了一个快速单一的图像上采样方法,这种方法的实现依赖于去卷积和再卷积,当然最后结果也是优良的。
考虑到上采样和实时性需求,本文使用双线性插值的方式对透射系数t进行上采样得到高分辨率的投射系数t分布图。
3.5 颜色校正
通过上述步骤进行图像去雾后,得到的图像全局亮度值会偏低,对比度也会有所下降。所以有必要对最后的图像进行颜色值或亮度值校正。直方图处理法在实时应用中应用最为广泛,并且算法实现简单,也能达到提升对比度的目的。因此本文采用直方图处理[11]方式来校正颜色值。表达式如式(6):
(6)
这里,c表示输入图像I的某个颜色通道,Max()和Min()分别表示求输入图像I的某个颜色通道的最大和最小的颜色亮度值。Max-Val表示输入图像通道c的最大亮度值,通常这个值被设定为255。事实上,像素的亮度值通常会小于255,因此添加了一个参数ω(0<ω<1)来调整最大和最小亮度值。
3.6 多核ARM处理器的并行处理
Advanced RISC Machines(高级精简指令集机器)简称ARM,是一个32位精简指令(RISC)的处理器架构,广泛应用于众多嵌入式系统设计中。目前其按应用分为cortex-M,cortex-R,cortex-A等多种架构,其中cortex-M架构的处理器主要用于低成本、低功耗的低端控制系统中,如一些工业控制领域、家庭自动化、消费、智能计量等方向。Cortex-R主要针对高性能实时应用,如硬盘控制器(或固态驱动控制器)等。Cortex-A处理器通常用于需要操作系统或高性能支持的应用程序系统中,主要面向手持设备、多媒体消费类电子设备等场合,手机、Ipad、小型平板电脑、汽车多媒体设备等都是cortex-A架构的ARM处理器,由于能够运行大型操作系统,因此可以在一个设备上运行各种各样的应用软件供用户使用。
考虑到图像去雾将来多用于添加到车载视频中,因此本文选择多核ARM处理器来实现实时去雾算法,这样在一个设备上就可以完成多种功能了,免去了携带众多设备的麻烦。三星公司的Exynos 4412处理器采用了32 nm HKMG工艺,是三星的第一款四核处理器,每核主频达1.4 GHz,可为并行图像处理提供方便。
在本文中,通过OpenMP提供的API实现了处理器的并行处理能力。在本文图像处理算法中,其耗时的过程有暗通道求解过程中最小值滤波、导向滤波中的均值滤波等需要遍历图片的操作。在暗通道求解过程中,每行的最小值滤波是独立的,可以将计算分到几个不同的处理器上同时进行,只需要在程序的相关位置加上“#pragma omp parallel for”。在导向滤波算法中,图3所示的每一步都是独立的,因此也可以使用并行处理的方式来减少时耗。其他的优化指令还有“#pragma omp parallel section”。
4 实验结果
在本文实验验证中,对每一张待去雾图像,如果分辨率小于600×600时,下采样因子设置为2,而大于这个分辨率时设置为3。在求解暗通道时局部区域的大小设置为15×15;在导向滤波过程中,局部区域大小设置为30或者更高。基于此,使用C++和OpenCV在gcc环境中实现了本文算法。
图4是几个算法的结果比较,可以看到本文算法与其他算法[7]相比在去雾效果方面明显较优,尤其是在亮度和清晰度方面。这表明优化透射系数的方式是有效的,上采样和下采样因子也是影响其结果的一大原因。其他算法的结果看起来与本文算法的结果不同,主要是其去雾后的图片看起来整体偏暗,其实结果图中的景深是完全相同的。在对比度方面,本文算法的结果看起来更清晰明朗,并且在场景较远的地方保留了一些雾,这使得去雾后的图片看起来更真实。
图5展示了一些使用本文的算法去雾的其他例子,这些图片大小都介于400×500到600×600之间。表1列出了计算这些图片所花时间。
图4 算法结果Fig.4 Comparison of algorithm results
图5 算法的一些其他例子Fig.5 Other examples of our algoritmh
序号优化前算法用时[7]/s优化后算法用时/s提高百分比10.67850.072689.30%20.56480.051190.95%30.76530.089488.32%40.55860.051490.80%50.67520.072289.31%60.55960.072886.99%70.79410.074490.63%80.65890.066389.94%90.96350.091190.54%100.78380.069591.13%110.89540.091889.75%
从图5和表1可以看出,通过本文优化的算法来进行单张图像去雾,算法运行时间可以平均提高89%左右。测试所用开发板为友善之臂Tiny4412开发板,处理器主频为1.4 GHz 4核,并开启处理器并行处理能力,使用操作系统为嵌入式Linux。以上结果表明,如果视频分辨率在700×700左右时,可以很流畅地处理视频数据。
5 结论
本文基于暗通道先验原理,提出了一种优化的实时去雾算法。算法的实质是在求解透射系数时,通过下采样的方式降低输入图像的分辨率,并打开多核处理器的并行能力,从而加快算法的运行速度。通过测试,在处理的图像分辨率不超过700×700时,处理速度可达70 ms,这意味着本文算法可以应用到许多实时应用场景。
不过,本文算法仍有不足的地方。如果图片分辨率过高,那么处理速度仍然很慢,达不到实时效果。虽然可以通过增加处理器的核心数来减轻每个处理器的计算能力,但成本会大大增加。
[1]TAN R T. Visibility in bad weather from a single image[C]//Computer Vision and Pattern Recognition, 2008. CVPR 2008. IEEE Conference on. IEEE, 2008: 1-8.
[2]FATTAL R.Single image dehazing[C] // ACM Transactions on Graphics (TOG).ACM,2008, 27(3): 72.
[3]HE K,SUN J,TANG X.Single image haze removal using dark channel prior[J].IEEE Transaction on Pattern Analysis and Machine Intelligence,2011,33(12):2341-2353.
[4]张石,佘黎煌,葛欣.基于曲波变换的视网膜血管图像增强算法[J].东北大学学报(自然科学版),2016,37(7):922-926.
[5]白林亭,武永卫,谢建春,等.多核DSP图像去雾优化方法[J].电光与控制,2015,22(10): 14-18.
[6]LEMIRE D. Streaming maximum-minimum filter using no more than three comparisons per element[J]. RXiv Preprint Cs, 2006:0610046.
[7]石文轩,詹诗萦,李婕.一种边缘优化的暗通道去雾算法[J].计算机应用研究,2013,30(12):3854-3856.
[8]SUN K, WANG B, ZHOU Z Q, et al. Real time image haze removal ssing bilateral filter[J]. Transactions of Beijing Institute of Technology,2011, 31(7): 810-814.
[9]HE K,SUN J,TANG X.Guided image filtering[M] //Computer Vision-ECCV 2010. Springer Berlin Heidelberg, 2010:1-14.
[10] SHAN Q, LI Z, JIA J, et al. Fast image/video upsampling[C]//ACM Transactions on Graphics (TOG). ACM, 2008,27(5):153.
[11] 田军委,黄永宣,于亚琳.基于直方图偏差约束的快速模糊C均值图像分割法[J].西安交通大学学报,2007,41(04):430-434.
[12] 王森,潘玉寨,刘一,等.提高雾天激光主动成像图像质量的研究[J].红外与激光工程,2013,42(9):2392-2396.
[13] 褚宏莉,李元祥,周则明,等.基于黑色通道的图像快速去雾优化算法[J].电子学报,2013,41(4):791-797.
[14] 孙伟,李大健,刘宏娟,等.基于大气散射模型的单幅图像快速去雾[J].光学精密工程,2013,21(4):1040-1046.
[15] 李权合,查宇飞,熊磊,等.雾霾退化图像场景再现新算法[J].西安电子科技大学学报,2013,40(5):99-106.
[16] 唐晓庆,范赐恩,刘鑫.基于边缘保持滤波的单幅图像快速去雾[J].西安交通大学学报,2015,49(3):144-149.
[17] LANG E H. An alternative technique for the computation of the designator in the retinex theory of color vision[J].Proceedings of the National Academy of Sciences,1986,83(10):3078-3080.