一种基于幂指数拉伸的去雾算法

2022-02-18 06:44李忠国吴昊宸付启高席茜吴金坤
数据采集与处理 2022年1期
关键词:饱和度亮度分量

李忠国,吴昊宸,付启高,席茜,吴金坤

(1.江苏科技大学机械工程学院,镇江 212000;2.贵州风雷航空军械有限责任公司,安顺 561000)

引 言

近年来由于空气污染加剧,雾霾天气出现越来越频繁,对交通构成较大安全隐患[1]。由于大气薄雾导致图像清晰度降低,甚至模糊[2],各类计算机视觉应用,包括监视、目标分类、跟踪和识别等都会受到影响[3],研究应用于便携装置的去雾算法具有一定的工程意义。

现有的图像去雾技术大致可分为两类:一类是基于大气散射的物理模型,另一类是基于图像的增强[4]。常规的图像增强方法有Gamma校正、直方图均衡、同态增析以及基于小波的多尺度增强等,这些方法主要增强图像的边缘等高频信息,针对图像对比度低、视觉效果差的问题,通过增强模糊图像的颜色和对比度,使处理后的图像具有良好的视觉效果[5]。基于图像成像物理模型的算法是基于大气成像模型,有基于暗通道的图像去雾以及导向滤波去雾等方法,涉及到透射率估计、雾浓度及景深估计等,用时较长[6]。该方法对大多数室外图像具有良好的去雾效果,但对于未建立暗区的明亮区域,如天空或白色物体,则会造成颜色失真[7]。基于深度学习的方法去雾也是一个新的思路,但需要建立大量的样本训练学习,并且能否满足不同浓度、不同光照等的自适应去雾要求尚未可知。

近年来图像去雾研究较多。邢世宏等[8]在海上薄雾条件下研究了快速去雾增强方法,对亮度通道进行了高斯卷积,对饱和度进行拉伸得到了增强图像,针对海上图像背景相对简单的场景取得了较好的效果。郭青山等[9]基于大气散射模型采用Dehaze Net与边缘检测引导滤波图像去雾,效果较好;但由于涉及到网络的卷积运算等,计算量较大,实时性得不到保证。林宇轩等[10]选择现场可编程门阵列(Field⁃programmable gate array,FPGA)作为去雾计算的处理器。辛佳佳[11]利用FPGA驱动网口完成4路图像信息同步传输,利用浮点数字信号处理器(Digital signal processor,DSP)完成复杂运算实现图像去雾。Ju等[12]分析了大气散射模型的固有缺陷,提出了一种改进的大气散射模型的快速图像去雾算法。图像去雾处理在航空、航海等交通领域有较大的应用需求[13]。在交通领域的去雾应用都有较高的实时性和去雾质量的要求,使得许多有效的去雾算法,如暗原色、暗通道理论等遇到困难[14]。

目前图像去雾算法的硬件实现大致可以分为基于PC机的实现方案、基于DSP的实现方案和基于FPGA的实现方案。基于PC机的图像去雾处理成本高、功耗大,且PC机体积较大,不适用于车载场合;基于DSP的实现方案应用较多,开发难度稍大;基于FPGA的方案由于通信带宽有限,容易出现速度瓶颈。

树莓派是一款运行Linux系统的微型电脑主板,采用了一个4核处理器,具备所有PC的基本功能,并且芯片性能好、功耗小、体积小以及性价比高[15],适合车载使用。同时,树莓派是开源硬件,可以运行开源的Python软件,而Python软件又可以使用功能强大的OpenCV图像处理库,适用于当前交通领域的需要。因此,本文以树莓派作为处理器,研究一种基于幂指数拉伸的图像去雾算法,实现简单、速度快、效果好。

1 有雾图像和无雾图像差异比较

景物的图像受到雾的影响,会发生哪些变化是增强去雾算法设计的依据。为了寻找有雾图像和无雾图像的差异,在有雾和无雾两种情况下采集了相同的操场场景的图像,如图1所示,图像分辨率为550像素×650像素。图1中有雾和无雾图像顶部都是天空区域,色彩较为单一;下面是树木和塑胶场地,色彩较为丰富;后面有建筑物和汽车等,层次较多。为了统计天空区与和下方景物区域的数值差异,在无雾图像楼顶上方某一位置划一横线(图像纵轴像素坐标为280像素),见图1(a)中间位置。以图1两幅图像为例,从上到下统计每1行图像在RGB(Red⁃green⁃blue)空间三分量数值的区别,如图2所示,图1中横线为图2中垂直的点画线。

图1 操场场景的无雾和有雾图像Fig.1 Fog⁃free and foggy images of the play⁃ground scene

由图2可见:在天空区域,无雾图像的R和G两分量数值小于有雾图像,B分量各有大小;在下面景物的大部分区域中,无雾图像R、G、B三分量均小于有雾图像;而横线下方近距离区域内,无雾图像R、G、B三分量大于有雾图像,这是由于横线下方有从左到右的云层。分别从云层和天空无云区域取像素坐标为(150,150)和(450,150)两点,其R、G、B数值分别为(215,225,231),(87,158,210),因而有云层的情况下三分量数值较高,没云层时R、G分量下降较大,B分量稍有下降。在有雾图像天空区域取一个点,其R、G、B三分量为(36,48,36)。有雾区域的三分量的数值较小,并且三分量数据之间差距较小。

图2 无雾和有雾图像R、G、B三分量的比较Fig.2 Comparison of three components R,G and B of fog⁃free and foggy images

将图像从RGB空间转换到HSV(Hue⁃saturation⁃value)空间。同样统计每一行的色度、饱和度和亮度的均值,如图3所示(图像数据为Double型)。

图3 无雾和有雾图像H、S、V三分量比较Fig.3 Comparison of three components H,S and V of fog⁃free and foggy images

由图3可见,有雾图像相对无雾图像色度H分量总体上数值稍有降低,但差异不明显,且无规律性。有雾图像的饱和度S分量在整个统计范围内均明显小于无雾图像,且无雾图像色度S分量的最小值是云层区域。有雾图像在景物区域的亮度V分量大于无雾图像,而在划线区域周边无雾图像V分量高于有雾图像,其原因是云层亮度较高。无雾图像和有雾图像亮度V分量的差异曲线和RGB空间中B分量的差异曲线高度类似。无雾图像和有雾图像的原图和H、S、V三分量图如图4所示。

由图4可以看出,无雾图像的云朵饱和度S分量较低,和有雾图像天空的S分量接近;无雾图像的蓝色天空区域亮度V分量和有雾图像接近,云朵的亮度大于有雾图像天空的亮度。无雾图像云朵中取1点,其H、S、V分量为(0.576 9,0.056 3,0.905 9);蓝色天空中取1个点,其H、S、V分量为(0.570 5,0.585 7,0.823 5)。有雾图像天空中取1点,其H、S、V三分量为(0.533 3,0.023 7,0.827 5)。根据上述数据特点可对有雾图像的天空区域做出大致判断。为了验证变化规律的普遍性,现选取另一对高楼场景的无雾图像和浓雾图像,如图5所示。对图5中的高楼、天空、草坪和路灯4个物体分别取点A、B、C、D,比较这4个点的RGB和HSV空间分量在无雾与有雾时的区别,如表1所示。

表1 高楼场景不同点的RGB和HSV空间分量值Table 1 Values of RGB and HSV space components of different points in the building scene

图4 无雾图像和有雾图像的H、S、V分量效果比较Fig.4 Effect comparison of H,S,V components of fog⁃free and foggy images

图5 高楼场景的无雾图像和浓雾图像Fig.5 Fog⁃free image and dense fog image of the building scene

比较有雾图像和无雾图像的R、G、B分量可以发现,B分量变化不大,但高楼和天空的R和G分量在有雾时增加,草坪和路灯R和G分量在有雾时减小(无雾时有光照)。因而R、G、B三分量在去雾算法设计中的信息规律性小。而在HSV空间中H的变化呈无规律性,有雾图像S和V两分量低于无雾图像,所以含有较多可以恢复的信息。本文在HSV空间通过变换S和V分量设计去雾增强算法。

2 幂指数拉伸的图像去雾增强算法

从图2中可以看出,在HSV空间,有雾图像和无雾图像的H分量差异不明显,说明颜色基本保持不变。饱和度S在有雾图像中受距离影响较大,近距离的饱和度较大,距离远的饱和度较小,同时也和景物的原始饱和度有关。亮度V分量和RGB空间中三分量变换相似,有雾图像的亮度由远到近(雾由浓到薄)数值降低,且受景物影响较小。而且有雾图像相对无雾图像其饱和度和亮度分量的变化斜率变小,即相邻行间差异变小。若要复原成原来的无雾图像,需要增加2个分量的变化斜率。由于2个分量都小于1,故将2个分量作幂指数运算可以增加分量之间的差异。本文基于幂指数拉伸原理提出一种图像去雾增强算法,算法流程如图6所示。

图6 幂指数拉伸增强去雾算法流程图Fig.6 Flow chart of power exponential stretching based dehazing enhancment

算法具体步骤如下:

(1)颜色空间转换。将采集的RGB有雾图像转化为HSV图像,提取色度分量H、饱和度分量S和亮度分量V,除以255转换为双精度数据,计算图像饱和度的均值S1,记录当前时间t1。

(2)幂指数拉伸。对景物区域的饱和度分量S和亮度分量V分别作幂运算Si和Vi,饱和度幂指数i和j从1到3变化,然后调整饱和度和亮度数值分布区间拉伸为[0,1](后面三分量数据都按照[0,1]区间描述);接着将每个饱和度和亮度拉伸组合分别结合原色度分量H,乘以255恢复到原来区间,生成HSV图像,再转换为RGB图像,得到去雾后图像。

(3)拉伸去雾评价和寻优。本文采用信息熵、对比度、饱和度均值和亮度指标的累加和作为标准评价去雾质量的好坏。

信息熵可以用来表示图像所含的信息量多少。所含信息多,则熵值往往越大;反之,所含有的信息少则熵值较小。雾天图像,物体的轮廓边缘信息会变得模糊不清,各像素的亮度值更接近于大气光值,整幅图像的亮度值会更加集中,图像的信息熵熵值小。相反,无雾图像,图像的熵值较大。信息熵计算公式为

式中:L为亮度值的个数;pi为第i个亮度值在图像中出现的概率。

图像对比度指的是一幅图像中最暗的黑和最亮的白之间的级别数。级别越多代表黑白之间的等级越多;相反,级别越少则代表黑白之间的分级越少。通常来说,黑白差异越大,分级越多,则整幅图像的清晰度越高,即对比度数值越大,图像就拥有更高的清晰度。去雾后的图片相较于雾图的对比度应该要得到提升。对比度的计算公式为

式中:δ(i,j)表示相邻像素间的灰度差;Pδ(i,j)表示相邻像素间的灰度差为δ的像素分布概率。

图像亮度均值太大或太小都不合适,因此求取亮度均值为0.5(使得图像不太亮也不太黑,后续更加便于处理得到精确清晰的图像)、亮度方差为0.157的正态分布函数值HS作为亮度指标,然后将每个指标分别进行归一化,相加后作为每个组合去雾效果的评价指标。饱和度均值也反映去雾效果。

因为寻优参数为整数,组合数有限,为了提高算法速度,最优幂指数的选取采用栅格寻优方法。将饱和度拉伸幂指数和亮度拉伸幂指数都从1变化到3,共9种组合拉伸。从这9种组合中根据去雾评价指标选取最优的一组幂指数组合,得到亮度拉伸的幂指数n和饱和度拉伸幂指数m。

(4)新采集RGB有雾图像转化为HSV图像,提取色度、饱和度和亮度分量,并计算饱和度的均值S2。如果S2-S1大于规定阈值δ(本文选择δ为0.039),则针对新采集的RGB有雾图像重复步骤(2~5),即重新计算最优幂指数;如果S2-S1≤δ,则利用步骤(3)所得最佳亮度拉伸的幂指数n和饱和度拉伸幂指数m完成新采集图像的去雾。记录当前时间t2,如果t2-t1超过规定时间间隔(本文选择时间间隔为30 s),也启动寻找最优参数组合程序。

3 数据处理和分析

3.1 去雾效果分析

为验证幂指数组合算法的去雾效果,将图1(b)浓雾图像的饱和度分量进行S3运算后作imadjust调整,亮度进行V2运算后作imadjust调整,去雾效果如图7所示。

由图7可见,去雾后图像在天空区稍有马赛克效应,下方的景物区色度和清晰度都有较大提升。为了检验算法的适应性,采用该方法和暗通道去雾算法及导向滤波去雾算法对树林图像进行去雾处理,结果如图8所示,可见本文方法去雾效果有提升。

图7 图1(b)幂指数拉伸后去雾效果图Fig.7 Dehazing image of Fig.1(b)after power exponent stretching

图8 3种去雾方法效果比较Fig.8 Dehazing effect comparison of three methods

因为图8层次较多,将其作为典型图像进行效果分析,去雾后的评价指标如表2所示。从表2可以看出,相对暗通道去雾算法和导向滤波去雾算法,本文算法亮度指标有所减小,但衡量图像鲜艳程度的饱和度均值、信息熵和对比度都有明显提高,证明本文算法具有一定的优越性和适应性。如果对亮度有较高的要求,可增加评价指标中的亮度指标的权系数,筛选出满足要求的幂指数来实现。为了验证算法的适应性,另取4幅有雾图像,去雾效果如图9所示,总体而言本文算法去雾效果明显,图像质量有较大提升。

表2 3种去雾算法指标对比Table 2 Comparison of defogging indicators of three algorithms

图9 本文算法对于不同场景去雾效果比较(左边为有雾图像,右边为去雾图像)Fig.9 Comparison of defogging effects in different scenes(fogging images on the left,defogging images on the right)

3.2 去雾实时性分析

在Intel(R)Core(TM)i7⁃8565 CPU@1.80 GHz 1.99 GHz,16.0 GB RAM的笔记本电脑上运行相应的Python3.7软件程序,摄像头采用蓝色妖姬USB摄像头,图像分辨率为400像素×300像素。为了提高程序计算效率,幂指数寻优采用多进程编程,多进程寻优程序流程图如图10所示。

图10 幂指数寻优多进程编程流程图Fig.10 Multi⁃process programming flowchart for power exponent optimization

幂指数寻优用时在4.129~4.577 s之间,单帧图像去雾用时在0.022~0.120 s之间,多数情况是0.051 s左右,具有较好的实时性。针对图7中有雾图像,暗通道去雾算法由于需要暗通道估计,用时最长,约0.045 s。导向滤波算法速度最快,约0.026 s。幂指数参数最优组合为(1,2)时,本文算法用时0.028 s;幂指数组合为(3,3)时,用时稍有增加,为0.0318 s。尽管如此,本文算法和导向滤波算法用时都远远低于暗通道去雾算法。

树莓派相对PC机处理能力较弱,其实时性问题不能忽视。本文选用的树莓派为4B型,4 GB内存,具有4核处理器。运行相同的程序,幂指数寻优用时为5.077~6.160 s。单帧图像的去雾第1帧时间较长,为0.308 s,其余帧时间为0.077~0.168 s,多数帧去雾处理时间为0.09 s左右,各帧去雾时间如图11所示。由于人的视觉暂留作用,除了第1帧外感觉不到明显的卡顿,故认为能满足多数情况下的去雾实时性要求。若改用树莓派广角CSI视频接口摄像头,与蓝色妖姬USB摄像头相比实时性没有明显区别。

图11 树莓派每帧图像去雾用时统计Fig.11 Raspberry Pi defogging time statistics for each frame of image

4 结束语

本文提出了在HSV空间通过对饱和度和亮度分量进行幂指数拉伸的方法进行去雾。幂指数是在一定范围内通过多进程编程按照去雾评价指标寻优得到。根据图像饱和度的变化和时间间隔的长度,运行幂指数寻优程序,确定最佳幂指数组合,因而该去雾算法可以适应一定范围内雾浓度的变化和景物层次的变化。确定了最优幂指数后的树莓派图像去雾用时约0.09 s,能够满足多数情况下的车载装置实时性要求。幂指数寻优用时还可通过优化评价指标、减小图像的像素尺寸以及去掉去雾无关的输出和计算等方法进一步降低。本文的研究结果表明,通过对有雾图像的饱和度和亮度分量的简单变换可以快速改善图像的质量,取得较好的去雾效果。本文的去雾算法可为海陆空交通运输安全保障提供技术支持。

猜你喜欢
饱和度亮度分量
用于遥感影像亮度均衡的亮度补偿方法
糖臬之吻
远不止DCI色域,轻量级机身中更蕴含强悍的亮度表现 光峰(Appptronics)C800
一斤生漆的“分量”——“漆农”刘照元的平常生活
一物千斤
亮度调色多面手
论《哈姆雷特》中良心的分量
亮度一样吗?
制作一个泥土饱和度测试仪
巧用有机物的不饱和度