基于改进视觉背景提取算法的前景检测
2020-04-10刘志豪刘武启李英杰郑小楠
刘志豪,黄 俊,刘武启,李英杰,郑小楠
(重庆邮电大学 通信与信息工程学院,重庆 400065)
1 引 言
运动目标检测在智能视频监控系统中处于相对关键的一步,其检测效果的好坏直接影响着后续的目标跟踪以及行为检测.运动目标检测,也称前景检测,是指将运动目标从背景中提取出来的过程.运动目标检测自研究以来发展了大致三类方法,分别是光流法[1]、帧间差分法[2]以及背景建模法.光流法能够很好地适应动态场景的变化,但是由于算法复杂度高,在实际中难以使用;帧间差分法算法复杂度低,能够很好地应对光照突变的影响,但是在其检测出的前景目标内部会出现大量空洞的现象,影响检测的效果;而以高斯混合模型(GMM)[3]和视觉背景提取算法(ViBe)[4]为代表的背景建模法是目前主流的研究方法,其算法表现接近实际使用,GMM利用K个高斯分布在时域上构建背景模型,是运动目标检测研究中使用最广泛的方法之一,但算法表现相比ViBe稍差.
ViBe算法是一种像素级的背景建模方法,借鉴了聚类的思想,通过背景模型的创建、前景检测和背景模型更新三个步骤对运动目标进行检测.具备了较好的鲁棒性,算法逻辑简单、计算量不大、实时性好,但仍有许多的缺点[5].ViBe采用了第一帧初始化背景模型的方式,若首帧出现运动目标后会在后续一定范围的帧中产生鬼影,影响检测效果,对于噪声的干扰比较敏感,不能适应动态背景的变化.针对ViBe存在的问题.文献[6]利用超像素分割的方法将图像分割成许多超像素区域,将超像素与ViBe检测的结果进行匹配从而分离出鬼影区域,同时利用超像素的方法在前景检测阶段抑制噪声的影响;文献[7]提出了辅助样本集的概念,判断像素点的鬼影程度,从而限制像素点的传播速度,加快鬼影消除的速率,并判断噪声的扰动程度动态更新辅助样本;文献[8]通过比较鬼影区域与真实背景区域的像素直方图的差异判断出鬼影,并更新鬼影区域的背景模型消除鬼影;文献[9]采用多帧平均法初始化背景模型,进而消除鬼影,结合OTSU算法自适应半径阈值,并借助背景差分法分离运动区域,只对运动区域的背景模型进行更新;文献[10]结合五帧差分法与ViBe在初始化背景时消除鬼影,借助高斯混合模型权值与ViBe随机更新策略更新背景模型.
本文针对ViBe算法存在的问题,在ViBe算法的基础上提出一种改进算法.通过在前N帧初始化背景模型的方式构建可靠的背景模型,快速消除鬼影带来的影响,在前景检测阶段,通过提出的背景扰动指数判断当前帧背景扰动程度,出现背景扰动时以自增适应参数适当增大匹配阈值,背景表现平缓时,保持匹配阈值不变,这样可以很好地应对动态背景扰动带来的影响,对于算法在发生光照突变时表现敏感问题,提出统计当前帧像素点与前一帧像素点像素值差异较大的个数,若超过设定的范围判断为发生了光照突变,并采用从当前帧开始重新初始化背景模型的方式抑制光照突变的影响.通过公开数据集与本文算法与其它算法比较,本文算法总体表现优于ViBe算法以及其它算法.
2 ViBe算法介绍
ViBe算法(视觉背景提取算法)是一种简洁高效的运动目标检测算法,是Barnich等人在2011年提出的一种像素级的背景建模法,其算法逻辑简单,通过初始化背景模型、前景检测、背景更新完成检测任务[11].
2.1 背景模型初始化
假设每一个像素点和其领域像素点的像素值在空域上有相似的分布,在视频的第一帧中,任意一个像素点x,像素为v(x),在以像素点x为中心的3×3领域范围的八领域中等概率随机选取N个背景样本元素值作为像素点x的背景模型样本集B(x),即:
B(x)={B1(x),B2(x),B3(x),…,BN(x)}
(1)
B(x)即为像素点x建立的背景模型,至此完成背景模型的初始化.
2.2 前景检测
图1 ViBe前景检测示意图Fig.1 ViBe foreground detection diagram
在第一帧完成背景模型初始化后,在随后帧进行前景检测的思想是将该帧中的任一像素点与其背景模型的像素点计算其欧式距离,统计欧式距离小于一个固定阈值R的个数,若个数大于等于经验阈值Tmin,表明像素点与其背景模型有很大的相似度,将其判定为背景点,反之为前景点.如图1所示,过程可描述为:
(2)
其中,SR[v(x)]是以像素点x为圆心,R为半径的欧式空间,BG为背景像素点,FG为前景像素点,Tmin一般取2.从而得到前景目标.
2.3 背景模型更新
在背景模型更新中,判断为背景的像素点有1/φ的概率替代背景模型中的任意一个样本值,φ为时间二次抽样因子,同时也有1/φ的概率随机更新领域像素的背景模型.
3 改进的ViBe算法
ViBe的首帧初始化背景模型的方式会带来鬼影问题,且采用固定阈值的方式进行前景检测以及随机更新背景的策略不能很好地应对复杂环境所带来的影响,针对以上问题,本文提出一种改进方法.改进方法流程如图2所示.
图2 改进算法流程图Fig.2 Improved algorithm flow chart
3.1 鬼影消除
若视频的首帧就出现了运动目标,运用ViBe算法对目标进行检测过程中,采用了在视频的首帧初始化背景模型方式,前景像素值被用于构建背景,导致背景模型出现了前景目标,在随后帧中会出现“鬼影”区域,虽然后续借助背景模型的更新,会逐渐消除鬼影区域,但过程缓慢,差不多经过100多帧以后才会完全地消失,假如在之后的短暂时间内有运动目标经过这部分区域,会受到影响.
ViBe算法运用空域相似性原则,认为相邻像素点有相似的分布;但这样的情况在首帧出现运动目标的边缘处是不成立的.本文提出时空相似性相结合的背景模型初始化方法,选择视频开始的前N帧初始化背景模型.对于任一像素点x,在第i帧处的像素值为vi(x),在视频的第i帧中,依然采用像素点x八领域中等概率随机选择的M个样本点组成的样本集,表示为:
(3)
到第N帧时,总共M×N个样本点用于构建背景模型.这样连续多帧建立背景模型的方式使得背景模型更加的丰富,既保证了空域的信息,又保证了时域的信息,空域的信息使得背景模型具备了随机性,时域的信息使得背景模型具备了多样性,避免了只用首帧初始化背景模型的局限性,即使在第一帧出现运动目标时,运动目标在随后帧中也会离开这个位置,故空间中同一个位置出现更多的是背景像素点,采取多帧初始化的方式使得背景模型具备了更多真实可靠的背景信息,加快了鬼影消除的速度.
选取多少帧初始化背景模型,以及每帧选取多少个样本对于鬼影的消除效果是关键.若选取帧数过多,不能迅速初始化背景模型,选取帧数过少,鬼影消除效果会受到影响,而每帧从像素点x的领域中选取的M个背景样本点,若选取背景过多,由于相邻像素点的像素值具有相似性,会产生不必要的冗余计算,并且多帧累加之后背景样本总数会更多,影响前景检测阶段像素点的匹配速度.
为确定选取帧数与选取样本数的最佳方案.选取了CDnet2014数据集[12]中的pets2006视频进行实验比较,把出现运动目标的20帧作为检测的首帧,视频共1180帧,统计采取不同样本数检测所需要的时间如表1所示.
表1 样本数与时间关系
Table 1 Sample number versus time
选取样本数1020253035检测时间/s117.43203.13245.39284.27347.68
由表1可以看出,检测所需的时间与选取样本数成正比关系,虽然选取10个样本点检测速度最快,但由于样本选取过少,导致检测效果不明显,故本文算法最终选取20个样本点初始化背景模型.而原始的ViBe算法也是采用的20个背景样本点,这也是和原始的算法相契合的,区别是原始的ViBe是在第一帧选取的背景点.
确定为选取20个左右背景样本点,分配到每帧上初步设定为5帧(每帧4个样本点)、4帧(每帧5个样本点)、3帧(每帧7个样本点)、6帧(每帧3个样本点).比较这四种方案下该视频检测中的F-measure值,F-measure是衡量算法综合表现的一个重要指标.比较结果如表2所示,比较得出5帧(每帧4个样本点)的F-measure的值最高,故本文选取前5帧,从每帧的像素点x的领域中选取4个样本点,总共20个样本点初始化背景模型.
表2 选取方案F-measure对比
Table 2 Selection scheme F-measure comparison
选取方案5×44×53×76×3F-measure0.910.890.850.87
3.2 针对背景扰动影响的改变
采用前5帧初始化背景模型之后的算法能够快速地消除鬼影,但ViBe算法在复杂环境中表现得不太好,任然存在一些问题.在面对类似于水纹波动等一些背景扰动的影响下,会将其检测为前景点.而在ViBe的前景检测阶段是采用了像素点x的以固定阈值R为半径的欧式空间来匹配背景模型,这样全程不变的阈值对于静态背景没有影响,但在动态背景扰动下会将虚假的背景点检测为前景,故在前景检测阶段本文提出一种能够自适应背景影响的方法来抑制背景扰动,即阈值R可以根据环境调整大小,增强算法自适应背景变化的能力.本文提出一种衡量背景扰动影响的指标μ(x),表达式如公式(4)所示:
(4)
即计算当前帧像素点x的像素值与其背景模型中的背景样本像素值差分和的均值,μ(x)越大,表明背景有明显的扰动情况,应适当增大匹配阈值R(x)抑制背景扰动的影响;μ(x)越小,表明背景趋于平稳.R(x)的判断策略如式(5)所示:
(5)
其中α为自增适应参数,δ为尺度因子,Ri(x)和Ri-1(x)分别表示像素点x在第i帧和i-1帧的匹配阈值,当背景扰动程度较大时,适当地增大前一帧像素点的匹配阈值,背景趋于稳定时,则保持原匹配阈值.这样在背景扰动超过一定界限时,匹配阈值的自适应总是根据当前帧背景扰动程度在上一帧阈值的基础上建立的,保证了阈值变化的时序性,又考虑到扰动程度一直比较大,Ri(x)就会无限增大,故给Ri(x)设置一个上限Rmax(x),当Ri(x)大于Rmax(x),就保持Rmax(x)阈值.即:
(6)
3.3 针对光照变化的免疫
实际的监控环境下总是会面临光照的变化,表现为缓慢光照变化和光照突变,基于背景建模的方法在面对光照变化下都表现得比较敏感,产生大片区域误检的现象,ViBe算法也不例外.光照变化也属于背景扰动,而按上一节提到的自适应匹配阈值的改进方法在对缓慢光照背景下的检测有很好的抑制效果,但对于光照突变就表现得性能不足,原因是光照突变使得背景变化得太突然,而且基本覆盖到当前帧的整帧图片,所以本文采取在发生光照突变时,从当前帧开始按照本文提出的初始化背景模型的方法重新快速地初始化背景模型.这个过程中关键的一步是确定光照突变的判断依据,在当前帧发生光照突变时,其像素点的像素值与前一帧像素点的像素值表现差异较大,统计差异较大的像素点的个数,判别条件如式(7)所示:
f(x)=vi(x)-vi-1(x)
(7)
设经验阈值η,若f(x)大于了阈值η,则将其归纳为发生了光照突变的像素点, 统计发生了光照突变像素点的个数,计算其与当前帧像素点总数的比,如公式(8)所示:
(8)
若比值大于经验阈值φ,则表明当前帧发生了光照突变,并从当前帧开始重新初始化背景模型.
4 实验与分析
本文所进行实验的软硬件条件为:操作系统选用Windows10,在VS2017编译环境下编译程序,并运用opencv,实验所采用的主机信息:(Intel(R) Core(TM) i5-8250U 1.60GHz 1.80GHz 8GB 内存).实验中的部分阈值取自经验阈值,部分阈值取自原ViBe算法.初始匹配阈值R取20,二次时间抽样因子φ取16,自增适应参数α取0.05,尺度因子δ取5,匹配阈值上限Rmax(x)取30,η取5,φ取70%.
4.1 鬼影消除实验及分析
鬼影消除实验对比同样选取CDnet2014数据集[12]中的pets2006视频,把第20帧作为视频首帧,对比本文改进算法的效果,实验对比如图3所示.
20帧作为首帧到70帧时,经过50帧之后,ViBe仍残留了轮廓清晰的鬼影区域,鬼影消除缓慢,到第117帧时仍存留了部分残留的鬼影区域,而采取前5帧初始化的方式在第70帧时鬼影就得到了消除.多帧初始化的方式同时融入了时域和空域的信息,使初始化的背景模型更具真实性,加快了鬼影消除的速度.
4.2 背景高频扰动实验及分析
为验证应对背景扰动的效果,选取CDnet2014数据集[12]中overpass视频进行验证,视频中存在风吹过树枝造成树叶摆动的高频扰动的影响,对比ViBe算法以及本文改进算法的效果,实验结果如图4所示.
图3 鬼影消除实验对比Fig.3 Ghost elimination experiment comparison
图4中ViBe算法在动态背景扰动下,错误地将背景像素点检测为了前景像素点,而本文采用的自适应匹配阈值的方法虽然处理之后任然残留一些前景像素点,但对比ViBe算法已经有了很大的改善.
图4 背景高频扰动实验对比Fig.4 Background high frequency disturbanceexperiment comparison
4.3 光照变化免疫实验及分析
光照突变免疫实验选取了Pets2015中的“lightswitch”视频序列,这个视频序列包含了人进入黑暗的室内打开灯发生突然变亮的情形,ViBe算法在这种情形下表现为更新背景模型迟钝,产生大量误检区域,发生检测错乱,影响直观的效果.
图5 光照突变免疫实验对比Fig.5 Comparison of light mutation immunoassay
而本文采用了统计当前帧与上一帧发生差异较大的像素点的个数判断发生光照突变的情形,可以很好地判断出图5中发生了光照突变,并从当前帧开始重新初始化背景模型,适应背景模型的变化已经有了很大的改善,可以从发生光照突变迅速地检测出轮廓较为清晰的运动目标,文本提出的算法有很好的表现.
4.4 算法综合表现实验与分析
为对比本文算法与其它算法在去除鬼影、面对背景扰动以及光照变化的性能表现,采用通用的前景检测评价指标.本文选用的指标有准确率(Precision)、召回比(Recall)、F评分(F-measure)、漏检率(FNR),定义为:
(9)
(10)
(11)
(12)
其中TP表示结果中正确检测为前景点的个数,TN表示结果中正确检测为背景点的个数,FP表示检测结果为前景点但真实为背景点的个数,FN表示检测结果为背景点但真实为前景点的个数.
本文选用了CDnet2014数据集[12]中的比较有代表性的“canoe”视频序列、“highway”视频序列和“overpass”视频序列以及Pets2015中的“lightswitch”视频序列总计4个 实验样本.其中“canoe”视频序列包含了湖面水纹波动的动态背景扰动的情形,“overpass”视频序列包含了树枝晃动的动态背景扰动的情形,“lightswitch”包含了室内环境下进行开关灯时光照突变的情形,人为地截取了“highway”序列中有汽车驶过作为首帧形成的视频.实验选用了ViBe、GMM、三帧差分法以及本文算法作为对比,比较算法在鬼影消除的效果、动态背景扰动以及光照突变环境下的表现.实验结果如图6所示.
图6 改进算法与其它算法对比Fig.6 Improved algorithm compared with other algorithm
“overpass”序列中有树叶晃动背景的干扰,GMM、三帧差分法、ViBe算法都出现不同程度地将其检测为前景像素点的情形,而本文算法在ViBe算法的基础上在前景检测的匹配阈值阶段采用了动态自适应阈值的策略很好地抑制了动态背景的干扰,提高了检测的正确率.“canoe”序列中存在湖面水纹波动的动态背景的干扰,同样本文的算法具备了很好地表现.截取的“highway”序列出现了首帧就有运动目标的情形,由于ViBe算法采用首帧初始化背景模型的方式,在随后帧中出现了鬼影,且鬼影消除缓慢,出现鬼影是ViBe算法的特例,同样是基于背景建模的GMM算法由于采用K个相互独立的高斯分布来表征莫一像素点的像素值特征,故不会出现鬼影现象,三帧差分的方式也是不会出现鬼影的,而本文在ViBe算法的基础上采用了前5帧初始化背景模型的方法,使得背景模型更加真实,鬼影消除速度有了很好地改善.“lightswitch”序列中包含了室内环境下打开灯出现突然变亮的情形,可以看到基于背景建模的GMM以及ViBe算法都出现了来不及更新背景模型,导致检测错乱的现象,对光照敏感是基于背景建模方法的通病,而三帧差分法由于采用了前后两帧相“与”能够很好地适应光照变化的情形,但是内部却出现了大量的空洞,影响观察的效果,而本文在ViBe算法的基础上采用了判断前景像素点占总像素点的比,若比值大于了70%,判断为发生了光照突变的情形,并从当前帧开始采用本文提出的初始化背景模型的方式重新初始化背景模型的策略,很好地适应了光照突变的情形.综上,三帧差分法优点是对光照不敏感,但是检测效果不好,内部会出现大量空洞,故许多学者将三帧差分法作为一种融合方法,结合GMM或者ViBe算法改进,可以应对光照突变的情形.经典的GMM算法相比于ViBe效果要差一点,内部同样会有空洞,且目标轮廓没有ViBe明显,但不会出现鬼影.而本文算法很好地解决了ViBe存在的一些问题,体现了很好的效果,各方面都表现不俗.
同时,本文计算了各算法在选用的视频场景中的4个评价指标,并以折线图的形式可以直观地进行对比.
图7 各算法评价指标对比Fig.7 Comparison of evaluation indexes of various algorithms
从图7可以看出:highway视频中出现了首帧就包含有运动目标的情形,导致ViBe在准确率上相比于overpass视频以及canoe视频有大幅的下降;而在lightswitch视频中出现了光照突变的情形,导致对光照突变敏感的GMM以及ViBe在准确率以及F评分上下降显著.本文算法在4个视频中准确率、召回比、F评分相比于ViBe都有显著的提高,且优于其它算法.在漏检率上相比于其它算法都处于最低,且检测速度均保持在25frames/s左右,满足实时检测的需求.
5 结束语
本文在ViBe的基础上提出了一种改进算法,通过前N帧初始化背景模型加快鬼影消除的速度,根据环境复杂度自适应匹配阈值以抑制噪声的干扰,统计前后帧差异超过阈值的个数判断发生光照突变的情形,判断为发生光照突变从当前帧开始重新初始化背景模型.实验验证,本文算法可以有效地解决鬼影消除以及在复杂场景下表现不佳等问题,相比于ViBe以及其它算法本文算法在各项指标上都有不错的表现.