APP下载

应用于视觉SLAM的自适应去雾算法

2020-09-29刘自若侯嘉瑞梁西昌

计算机工程与设计 2020年9期
关键词:校正特征图像

刘自若,万 熠+,侯嘉瑞,梁西昌,孙 尧

(1.山东大学 机械工程学院 高效洁净机械制造教育部重点实验室,山东 济南 250061;2.山东大学 机械工程国家级实验教学示范中心,山东 济南 250061)

0 引 言

近年来,视觉SLAM及相关图像处理算法受到了广泛的关注并取得了一定的研究成果,其中,Endres等[1]提出了基于SIFT特征点检测算子的地图建立方法,但计算量较大,难以满足实时性需求;Engel等[2]提出了一种采用直接法视觉里程计的SLAM方法,省却了特征点提取的复杂运算,可以实时运行,但该算法在光线强度会发生变化的环境下稳定性较差;Mur-Artal等[3]提出了基于单目相机的SLAM算法,使用了ORB算子进行特征点的检测和描述,该SLAM算法的运算速度可达每秒25-30帧,能够满足视觉系统的实时性需求。但在实际应用中,例如在雾气遮挡、烟尘遮挡等天气环境条件下,相机所捕获的图像信息将不再稳定和可靠[4]。而不稳定的图像将严重影响视觉系统的工作[5],尤其在雾天条件下,由于特征稀疏[6],造成了视觉SLAM系统的稳定性差,对视觉系统的工作精度以及工作效率造成很大影响,甚至会引起整个视觉系统的瘫痪。

为解决上述问题,需研究一种适合于视觉SLAM系统的图像去雾算法,使视觉SLAM系统在雾天环境下仍能具有较强的鲁棒性。

1 基于ORB算子的视觉SLAM系统

本文构建了ORBSLAM系统[3],并在后文使用图像去雾算法对其进行了改进,该系统主要由视觉里程计、图优化及闭环检测模块、建图模块组成。

1.1 视觉里程计

视觉里程计的主要作用是建立摄像头捕捉到的两帧图像之间的联系,并由此计算相机的位姿变化和图像中各点的空间位置。特征点法是实现视觉里程计的一种常用方法,通过匹配相邻两张图像的共同特征点,获取相机的运动姿态以及空间位置。

ORB算子使用带有形心向量的oFAST算法检测图像中的特征点,使用对旋转敏感的rBRIEF描述子对特征点进行描述,相较于传统的SIFT算子及SURF算子,计算量更低。本文所构建的SLAM系统使用ORB算子进行图像的特征点检测和描述,以提高运算速度。

1.2 闭环检测和图优化算法

本文所构建的SLAM系统使用闭环检测算法和图优化算法共同保证所建地图的有效性。

由于相机所采集的图像中具有噪声,SLAM系统在进行建图的过程中,不可避免会产生误差,并且随地图的拓展不断累积。为此,使用图优化算法进行误差抑制以提高建图的准确性。同时,SLAM系统在运动到之前曾经经过的位置时,由于存在误差,在所建立的地图中,系统的位置有时并不处于实际对应位置。为此,引入闭环检测模块,在检测到曾到达的位置时,将信息输入图优化模块进行处理,修正误差。

1.3 建图模块

拓扑地图与度量地图是SLAM系统中两种较为常用的地图类型。相较而言,度量地图具有更多信息,可以表示更为复杂的地形,适合工作于未知环境下的SLAM系统。而点云地图可直接使用特征点构建地图,是一种更为适合于视觉SLAM的地图类型,本文使用点云地图作为构建地图的类型。

2 自适应快速图像去雾算法

在图像去雾方面,Zhang等[7]对暗通道先验去雾算法进行了优化,提高了算法的运算速度。何等[8]提出了一种快速图像去雾算法,将算法运行时间缩短了50%,但面对雾浓度不同的图像时,仍存在需手动调整去雾参数的问题。针对当前去雾算法存在的问题,本章提出了一种适用于视觉SLAM系统的自适应图像去雾算法。

2.1 基于大气散射模型的快速图像去雾算法

基于大气散射模型[9],可知雾天环境下图像的退化满足以下关系

F(x,y,z)=P(x,y,z)exp(-sh(x,y,z))+
L(1-exp(-sh(x,y,z)))

(1)

式中: exp(-sh) 代表介质透射率,F为雾气遮挡图像,P为未受到雾气遮挡的清晰图像,h代表图像的景深,s代表大气散射系数,L表示全局大气光的值,且L=[Lo,Lo,Lo]T。

通过引入环境光N对式(1)进行简化表示

FL=P(L-N)+NL

(2)

因此,对一幅雾退化图像,若求出环境光N及大气光L,即可还原出去除雾气遮挡的清晰图像。

由式(1)可知

L(1-exp(-sh))≤F

(3)

求出雾气遮挡图像F各通道中的最小值D,则

(4)

对D进行均值滤波,则可认为介质透射率的值满足以下关系

(5)

式中:μ为偏移补偿系数,用来对介质透射率进行偏移补偿,其计算公式如下

(6)

式中:γ是设定的去雾参数,影响图像的去雾程度。依据上式求出μ值后,联立式(3)、式(4)以及式(5)估计介质透射率的值和环境光的值

(7)

(8)

由式(5)可知,Davg≤L。 且L的值小于图像三通道的最大值。因此可估计大气光L的值

(9)

获取环境光N和大气光L的估计值之后,代入式(2)进行运算可还原出去雾图像。在进行还原运算时,参数γ越大则去雾图像的去雾效果越强。

由于SLAM系统所处环境的雾浓度是未知的,因此在不同环境下使用固定去雾参数γ会导致图像过度去雾或去雾不完全,若过度去雾会导致图像失真[10],使SLAM系统检测到错误的特征;而去雾不完全将导致图像无法满足SLAM系统提取特征点[11]的需求。

2.2 自适应图像去雾算法

为解决去雾算法无法根据图像雾浓度自适应调节去雾参数γ的问题,本文使用去雾参数的校正算法对2.1节中的去雾算法进行了改进。

根据式(7)和式(1),当介质透射率为1-D/Lo时,意味着去雾图像满足以下条件[12]

(10)

在去雾图像P中满足式(10)条件的像素点处,RGB三通道中必有一通道取值为0,即该像素点的三通道之一在进行去雾计算时受到阻塞,下文将该类像素点称为阻塞点。阻塞点的去雾程度较深,易导致图像失真。因此,整幅图像阻塞点占比越高,则表示整幅图像去雾程度以及图像失真程度越高。

图像阻塞点占比β的计算公式如下

(11)

式中:Z为阻塞点数目,N为图像像素点总数。

使用2.1节中所述基于大气散射模型的图像去雾算法,设置了不同去雾参数γ对收集到的100张含雾图像进行了去雾处理。部分图像去雾效果如图1所示,从图像中可以看出图像的去雾程度越深,阻塞点占比β越大。

图1 部分图像的去雾效果

又由式(6)知,参数γ的取值可决定图像的去雾程度。

因此,依据阻塞点占比β反映图像去雾程度、去雾参数γ决定图像去雾程度的原理,提出了一种自适应去雾算法,算法的核心思想是:设定去雾图像理想阻塞点占比βt,在对视频前一帧图像进行去雾处理后,计算去雾图像的实际阻塞点占比β,若β过大或过小则根据理想阻塞点占比与实际阻塞点占比之间的差值Δβ校正去雾算法中的参数γ,然后再继续对下一帧图像进行处理,如此每处理一帧图像就对去雾参数γ进行一次校正,以保证去雾算法在未知雾浓度环境下的去雾效果,算法流程如图2所示。

图2 自适应去雾算法流程

为确定理想阻塞点占比βt,对100张含雾图像的去雾结果进行了比较,得出了如下结论:当去雾图像的阻塞点占比为0.4%-4%时,图像的去雾效果较好,在检测去雾图像中特征点时不易出现特征点过少的现象;当去雾图像的β值在0.8%左右时,去雾图片不易出现失真现象,去雾效果最理想,因此,可将去雾图像的理想阻塞点占比βt设为0.8%。

接下来,需设定合适的去雾参数γ初值,以缩短参数校正的过程、提高自适应算法的效率。为此,对收集到的100张含雾图像分别进行去雾处理,使去雾图像的阻塞点占比β=0.8%, 并记录此时去雾参数γ的值,获得了100张去雾图像β=0.8%时的γ分布柱状图如图3所示,图中曲线为根据γ的平均值和标准差生成的正态分布曲线。

图3 γ的取值分布柱状图

根据图中γ的取值分布特征和正态分布曲线特征,将去雾参数γ的初值设定为1.15。

在校正去雾参数γ时,自适应算法结合了PID算法,令Δβ=βt-β, 则每次校正的校正量为

(12)

实际上对连续的图像来说,即便使用相同的去雾参数γ,去雾图像的阻塞点占比β仍会产生一定的波动。在这种情况下PID算法中的微分项将会影响算法性能,因此将PID算法简化为PI算法

(13)

为方便确定上式中的Kp和Ki,本文统计了去雾图像不同阻塞点占比β与对应去雾参数γ的数据,以探究图像阻塞点占比β与去雾参数γ之间的关系。结果表示:对绝大多数含雾图像,均存在对应的参数a,b∈[0,1], 当参数γ的取值在 [a,b] 内时,γ和β满足非线性正相关关系;当参数γ取值在 [0,a] 内时,图像不存在阻塞点;当参数γ取值在 [b,1] 内时,μ值不随γ增大而增大,阻塞点占比β恒定不变。图4所示为图1中3幅含雾图像在去雾过程中的β-γ关系曲线,从该图中可以看出β与γ之间的关系。

图4 去雾图像的β -γ关系曲线

根据β-γ关系曲线特征以及阻塞点占比和图像去雾效果之间的关系特征,设计校正约束条件

(14)

(15)

Δγ=0, Δβ∈(-0.001,0.001)

(16)

(17)

(18)

(19)

其中,m为算法在校正参数γ的过程中γ=0的次数,Vn为校正过程中Δβ变换符号的次数。式(16)为算法在有雾环境下的校正结束条件,当满足该结束条件时,结束校正过程,使校正算法休眠,在接下来的运行过程中若检测到β<4%或β>0.4%, 则重新唤醒校正算法,对去雾参数进行调整。式(18)为算法在无雾环境下的校正结束条件,在无雾环境下将去雾参数设置为0。

在校正过程中,为保证自适应算法的收敛性,避免发生校正失败的情况,当检测到β的取值由0.8%的一侧向另一侧发生跳变时,开始记录算法每次迭代后γ和β的值,若继续历经20次迭代后仍无法满足算法的结束条件,则结束参数校正过程,令γ为迭代过程中使阻塞点占比最接近0.8%时的值

γ=γr, |βn-βt|≥|βr-βt|, (n=1.2.3…20)

(20)

自适应算法的伪代码如下:

adaptive-algorithm:

procedure Calm()

{01} if (β=0) m=m+1;

{02} if (m≥8) mflag=true;γ=0;

procedure Calend()

{03} if (|Δβ|≤0.001) endflag=true;sleepflag=false;m=0;num=0;

procedure Calsleep()

{04} if (preΔβ1*Δβ<0) sleepflag=true;

{05} if (sleepflag){

{06} num=num+1;

{07} if (num=1) preγ=γ;preΔβ=Δβ;

{08} |preΔβ|=fabs(preΔβ);

{09} if (|Δβ|<|preΔβ|)preγ=γ;preΔβ=Δβ;

{10} if (num≥20) totalendflag=true;γ=preγ;}

procedure Main()

{11} initialize();

{12} if ((endflag)OR(totalendflag)OR(mflag))reset=0;

{13}γ=γ+reset;

{14} P=dehaze(F,γ);

{15} Δβ=getdelta();

{16} |Δβ|=fabs(Δβ)

{17} if (reset≠0)Calm();Calsleep();Calend();

{18} if ((β>0.04)OR(β<0.004))endflag=false;

{19} reset=Calreset();

{20} preΔβ1=Δβ;

伪代码中,F代表有雾图像,P代表去雾图像,initia-lize 函数为定义函数,负责对代码中的变量进行定义,dehaze 函数负责对图像进行去雾处理,getdelta函数负责计算Δβ,Calreset函数负责根据式(13)计算校正量Δγ,代码中去雾参数γ的初始值为1.14,reset的初始值为0.01。

使用上述算法对图像进行去雾处理可获得较好的去雾效果,考虑到去雾算法的应用场景,本文使用特征点数量对图像的去雾效果进行评价,检测到的特征点数量越多,则SLAM系统可用于建图的信息越多、图像去雾效果越好。

2.3 自适应去雾算法实验结果

基于VisualStdio2010,验证本文自适应去雾算法的去雾效果及算法与SLAM系统结合后的运算速度,使用的图像来源于网络,运行环境为Intel(R) Core(TM)i7-4900CPU@3.6 GHZ,4 G物理内存,64位win7系统。在运算速度方面,本文算法处理一幅800×600图像平均耗时0.01 ms,将本文算法作为前端与所建立的运算速度为每秒30帧的SLAM系统结合后,系统的运算速度可达到每秒23帧,考虑到现有相机的帧数一般在20帧左右,因此本文算法可以基本满足SLAM系统的实时性需求。

在去雾效果方面,使用本文算法、基于大气散射模型的快速去雾算法[13]以及HE算法[7]分别对图像进行了去雾处理,获得的实验结果如图5所示。在实验中,使用如下方式设定快速去雾算法和HE算法的去雾参数:随机选取一幅实验图像,针对选定图像设定合适的去雾参数。最终针对图像2将快速去雾算法的去雾参数设定为1.21;针对图像3将HE算法的去雾参数设定为0.67。对图5(b)~图5(d)进行比较可以看出,快速去雾算法在处理图像1和图像3时去雾效果较差;HE算法在处理图像1和图像2时去雾效果较差。而本文算法在处理3幅图像时均获得了较好的去雾效果。

图5 算法去雾后的效果

下面使用ORB算子分别对图5中的去雾图像进行特征点检测,特征点检测结果见表1。

表1 去雾图像有效特征点检测结果

由表1和图5可知,现有去雾算法一旦针对某幅图像设置了去雾参数,就会导致算法对其它图像的去雾效果不佳。相较而言,本文算法在面对不同雾浓度的图像时可以获得更好的去雾效果。

下面检验本文算法校正去雾参数的效率:使用本文算法将去雾参数γ的初值设定为0和2.5,以模拟雾浓度发生突变的情况。共对3个场景下的图像进行了处理,并获取了算法校正去雾参数γ所需要的图像帧数,见表2。

表2 参数校正实验结果

由表2可知:在运算速度为每秒23帧的SLAM系统中,本文算法平均仅需9.17帧图像即0.398 s的时间即可完成参数γ的自适应校正,说明本文算法可以快速适应不同雾浓度的环境。

3 基于自适应去雾算法的视觉SLAM系统

本章对采用了自适应去雾前端的改进SLAM系统进行了模拟实验,验证了其具有良好的鲁棒性,实验所用视频来源于网络。

3.1 改进视觉SLAM系统框架

使用自适应图像去雾算法作为整个SLAM系统的前端,将雾化图像还原为清晰图像后再进行特征点提取及匹配等运算。SLAM系统框架如图6所示。

图6 改进SLAM系统框架

3.2 模拟实验结果

基于UBUNTU16.04操作系统,对改进的视觉SLAM系统进行了模拟实验,使用雾天环境下汽车行车记录仪录制的视频,模拟视觉SLAM系统在该雾天环境下的运行,并以改进前的视觉SLAM系统为对照,随机选取视频中的一帧绘制了特征点匹配效果对比和运行结果对比,如图7所示。

图7 实验结果对比

在实验中,改进前系统在视频116帧时成功建立初始地图,但随着相机的运动,由于无法将新的特征点加入到构建的地图中,地图无法随相机视角的前移而进行拓展,SLAM系统无法继续运行。改进的SLAM系统在111帧时成功建立初始地图,由于可以连续检测到足够的特征点,直至视频结束,SLAM系统都可以保持正常运行。这验证改进的SLAM系统具有更好的鲁棒性。

4 结束语

针对视觉SLAM算法在雾天环境下表现不佳的问题,本文提出了一种适用于视觉SLAM系统的自适应去雾算法,该算法根据反馈的去雾效果对去雾参数进行实时校正。相较于现有去雾算法,本文所提出的算法对未知雾浓度环境下的图像具有更好的去雾效果。使用本文所提出的算法作为去雾前端后,视觉SLAM系统在模拟运行实验中表现出了更好的鲁棒性。

猜你喜欢

校正特征图像
根据方程特征选解法
巧用图像中的点、线、面解题
有趣的图像诗
劉光第《南旋記》校正
不忠诚的四个特征
基于MR衰减校正出现的PET/MR常见伪影类型
在Lightroom中校正镜头与透视畸变
抓住特征巧观察
机内校正
遥感图像几何纠正中GCP选取