一种快速消除鬼影的目标检测算法
2019-10-18路霄汉王志君梁利平
路霄汉 王志君 梁利平*
1(中国科学院微电子研究所 北京 100029)2(中国科学院大学电子电气与通信工程学院 北京 100029)
0 引 言
背景提取技术是视频感兴趣区域(ROI)提取的重要方法之一[1],它的准确性、实时性和对于环境变化干扰的鲁棒性较好,是一种针对运动目标检测的优秀方法[2]。在背景提取算法中,ViBe算法[2]是一种无参数的、非概率模型化的算法,它在运动目标检测任务上,拥有运行速度快、占用资源少、识别精度高等特点,但是仍存在不足。其一是鬼影问题,鬼影是被检测为前景,却没有代表任何运动目标的区域,即虚假的前景区域[3]。目前,针对鬼影问题,第一类处理方法是通过改变创建初始背景集合的方式。文献[4]采用类高斯模型的更新方法,使用多帧图像训练初始背景集合。文献[5]在帧差法中引入大津阈值算法[7](OTSU),使用前几帧图像合成背景样本图像,然后根据此背景样本图像创建初始背景集合。文献[6]采用多帧平均法,使用视频前面25帧图像对应点和其邻域点的像素值创建初始背景模型。这种方法需要使用视频多帧图像构建初始背景集合,降低了初始化背景集合的速度,而且,由于背景突然运动也会产生鬼影,这种方法无法解决此类问题。第二类处理方法在进行背景判断的过程中进行鬼影识别,然后将鬼影转变为背景[8-9]。文献[8]通过计算前景与其邻域背景的颜色直方图差异大小判断前景是否是鬼影。文献[9]通过计算前景区域的像素值方法大小判断鬼影。但是此类方法容易将运动缓慢的、色彩比较单一的运动目标与鬼影混淆,具有局限性,并且方法增加了运算复杂度,不利于事实检测。
此外,ViBe算法对于动态背景和相机抖动的处理效果不理想[10]。针对此问题,文献[4]计算当前位置像素点与其邻域像素点的差异性,进而动态地调整阈值,但是动态背景的特点在于时间域上剧烈的、周期性的变动,因此其方法有失普遍性。对于抖动的处理,文献[10]首先通过提取KLT特征点[11]识别抖动,然后通过将更新因子置为1来去除抖动,虽然有较好的处理效果,但是容易形成前景区域空洞,而且特征点提取增大了计算量,很难实现实时处理。文献[12]中,通过计算当前图像中的前景区域与M帧前的图像对应位置的颜色直方图差异来消除抖动,这种方法过于依赖M的选取,而且颜色直方图的计算增加了计算量。文献[13]采用图像分块运动补偿的方法,根据块区灰度投影曲线的互相关计算结果完成抖动序列校正,但是此方法对计算机的算力要求很高。
综上所述,针对ViBe算法存在的问题,本文对其进行改进,改进后的算法可以快速消除鬼影,并且能很好地处理相机抖动和动态背景的情况。最后通过C++完整实现算法,算法运行速度快、运算简单、准确率高,可以达到实时性要求。
1 ViBe算法原理
ViBe算法[2]由三个部分组成:背景模型初始化、背景判断、更新背景模型。
1.1 背景模型初始化
Vibe算法是一种基于像素点的目标识别算法,算法为视频序列中每一个位置的像素点创建一个背景集合,假设I(x,y)代表图像中(x,y)位置的像素值,M(x,y)是其对应的背景集合:
M(x,y)={I1,I2,…,IN}
(1)
式中:IN是背景集合中的像素值。M(x,y)初始化的方法为:取视频序列中的第一帧图像,对于图像中每个像素点,在其邻域内等概率的随机选取N个像素点的值插入背景集合中。
Mn(x,y)={I(x′,y′);(x′,y′)∈NG(x,y)}
(2)
式中:Mn(x,y)表示(x,y)位置背景集合的第n个值;NG(x,y)表示(x,y)的邻域;I(x′,y′)表示邻域像素点的值。
1.2 背景判断
创建初始背景集合后,后面处理的每一帧图像,需要将每个像素点与其对应的背景集合进行比较:
#{SR(I(x,y))∩M(x,y)}>#min
(3)
式中:SR(I(x,y))代表I(x,y)在其颜色空间中欧式距离小于半径R的区域。
如图1所示,#{}函数是计算(x,y)的背景模型中,像素值在SR(I(x,y))区域中的个数,当其数值大于固定阈值#min时,则被判定为背景。
图1 (C1,C2)颜色空间的欧式距离半径与背景样本的分布
1.3 更新背景模型
当像素点被判断为背景时,有1/φ的概率对M(x,y)进行更新,φ为更新因子。更新的方式采用随机替换机制,随机替换就是将当前像素值I(x,y)等概率随机替换M(x,y)中的一个值。同时,当发生随机替换时,随机选取其邻域中的一个像素点I(x′,y′),并采用随机替换机制更新其背景集合,称为背景值随机空间传播。
2 改进的ViBe算法
基于ViBe算法原理的描述,发现存在两个问题:
(1) 鬼影问题,如图2所示,由于鬼影所在位置的背景突然运动,检测结果中出现鬼影,即(c)中左边的前景即为鬼影。虽然ViBe算法的背景像素值随机空间传播方法可以处理鬼影,但是需要多帧的处理延迟才能够完全消除,对于50×10的鬼影区域,消除至少需要100帧[9]。
(a) frame (b) ground (c) 检测结果图2 鬼影的形成
(2) 对于抖动与动态背景情况处理欠佳,背景模型的保守更新方式使得前景点无法进入背景模型中,当某一区域频繁的在前景和背景间变化时,这个区域往往是虚假的前景,ViBe算法没有检测这种变化的机制。
基于上述问题,本文提出了三点改进:(1) 采用定向的空间传播方法更新邻域的背景模型,可以快速消除鬼影;(2) 通过闪烁因子值的大小更改背景判断结果,从而处理抖动和动态背景造成的虚假前景;(3) 对算法生成二值图像进行高效的去除噪点处理,提高识别的准确率。图3是本文改进算法的流程图,虚线是本文的改进过程,其中S是闪烁因子,CNT是计数器的值。
图3 改进算法流程图
2.1 定向的空间传播方法
当像素点被初步判定为背景后,在原始的ViBe算法的随机空间传播之前,针对性地加入定向空间传播机制。鬼影区域实际上是背景区域,它是静止的,因此与周边像素点的像素值相近。基于鬼影的上述特点,为每一个像素点设置一个计数器CNT,CNT表示该点连续被判断为前景的次数:当判定结果是前景时,CNT加1;若是背景时,CNT置0。
(4)
基于上述处理,当像素点被判断为背景时,首先以当前处理的像素点为中心点,查询其邻域内像素点的背景集合中的CNT值。当邻域像素点的CNT大于阈值TCNT时,表明此邻域位置属于静止的前景,有可能是鬼影,因此强制对其背景模型进行随机替换操作:将中心点的像素值插入其背景集合中。TCNT表示检测到的前景是否静止,因此TCNT>1。为了快速消除鬼影,因此设置TCNT的值为2。
定向的空间传播方法的示意图如图4所示,灰色区域为检测出的前景区域,并且区域内像素点CNT值大于阈值TCNT,虚线部分为前景内部区域,黑色像素点为当前处理的背景像素点I(x,y),如图4右侧所示。当I(x,y)被判断为背景时,检测I(x,y)位置邻域内的8个像素点,发现标号1、2位置的灰色部分可能为鬼影区域,因此将I(x,y)的值插入1、2区域的背景集合中。若此前景区域是真实静止目标,由于前景像素值与背景像素值差别较大,在视频后面帧的图像处理中,此区域仍然被判断为前景,不影响判断;若此前景区域是鬼影区域,由于图像的背景在空间上有一致性的特点,相邻的背景像素点的值差值较小,因此在视频后面帧的图像处理中,对应位置被判断为背景。图4灰色区域外边缘转变为背景后,此定向传播机制会使这个过程快速传播给内部的区域,从而快速消除此虚假前景,即鬼影区域。由于这种定向传播机制只影响前景的边界处,图4中灰色的真实前景区域会对虚线内部的区域进行保护,虚线内部区域的背景集合不会被改变,因此真实的前景目标会被保留。
图4 背景值定向传播示意图
2.2 计算闪烁因子
当进行判断背景过程后,需要计算闪烁因子[10],并通过闪烁因子更改原算法的判定结果。像素点闪烁是指在时间域上,像素点的判定结果在背景和前景间不断变化,因此闪烁因子表示像素点的这种闪烁程度的大小。本文参考文献[10]对闪烁因子进行了新的诠释,并且采用新的处理方法将其应用到视频抖动和动态背景的处理当中。视频的抖动是由于采集设备在自然环境下受外力干扰引发的周期性震动造成的,因此视频抖动造成的虚假前景在时间域上呈现出周期性的在前景与背景间变化的特点。
基于上述性质,设闪烁因子为S,表1列出了S的计算方法,αinc为增长因子,αdec为衰减因子。当像素点被判定为前景时,检查其对应的CNT的值,当CNT=0时,说明其上一帧被判断为背景,当前帧发生了状态的改变,因此:
S=S+αinc (5)
当像素点被判断为背景,并且CNT=0时,说明上一帧当前位置仍被判断为背景,当前帧没有发生状态改变,因此:
S=S-αdec
(6)
为S设置两个阈值:
TS=a×αdec
(7)
TS-M=(a+1)×αdec
(8)
式中:a是常数,表示阈值TS和TS-M是增长因子αinc的整数倍;衰减因子αdec取值为1,这样简化了运算与硬件实现。对于闪烁因子S的处理过程如下:当S大于TS时,若此时被判断为前景,将结果改变成背景;如果S的值进一步大于TS-M,则强制对当前位置的背景集合进行随机替换。这种方法可以防止短时间内由于前景周期性运动而被误判为背景,导致前景像素点进入背景集合的问题。闪烁因子S的最大值是TMAX,这限定了像素点闪烁特性的生存周期。上述推导可以理解成,当前像素点在时间域上,其在前景与背景间跳变的次数,在n×αinc/αdec时间范围内大于或等于a+n次时,则被判定为闪烁的,其中n∈N+,n的取值影响参考时间范围的长短。因此,前景与背景间跳变的最小平均间隔F满足:
(9)
通过调整αinc和a的数值,可以调整检测出闪烁点的闪烁频率。对于αinc和a参数的选取,由于真实前景也会短时间在前景与背景间多次变化,比如在ChangeDetection 2012数据集[14]中,行人的腿部运动呈现出短期的周期性变化,因此设置αinc与a均为理论值10,可以缩减闪烁因子占用的位宽,节省存储资源。同时,可以区分前景的短时间周期性变化和长时间的周期变化,从而判断检测出的前景区域是否是由于抖动造成的虚假前景,最终消除抖动的影响。
2.3 去除噪点
一帧图像的所有像素点通过本文算法处理后,会生成一个二值图像,称为MASK图。假设0代表背景,1代表前景,摄像头采集的视频图像会受到噪声的干扰,在MASK图上会产生数值为1的噪点。尽管2.1节和2.2节的改进方法使大部分虚假前景点去除,但是仍会由与计算误差而产生这种噪点。本文采用的处理方式能够快速去除微小的噪点,并提高目标提取的完整性和准确率。
具体的步骤为:
Step1形态学闭操作。由于算法少概率的误判,会将部分真实前景区域分散成一些距离很近,并且相互孤立的点,因此通过形态学闭操作将这些点连接形成前景块,对于处理后仍然孤立的前景点则认为是噪点,可以通过滤波去除。
Step2滤波。滤波的作用是去除上述噪点,具体方法是分别统计像素点的8邻域内值为0和1的像素点的个数:cnt0,cnt1。cnt0和cnt1分别表示邻域内值为0和1像素点的个数,当cnt0大于阈值T0时,将当前像素点的值置0;当cnt1大于阈值T1时,将当前像素点的值置1。由于小阈值容易形成误判,大阈值则使滤波效果不明显,因此T0、T1均取值为5。
Step3形态学开操作。形态学开操作的可以平滑图像,可以达到更好的去噪效果,进一步提升目标检测的准确率。
3 实验结果与分析
本文算法的运行的处理器型号是Intel Pentium G3260,主频3.30 GHz,内存大小为4 GB,使用C++和OpenCV函数库实现算法。
原算法的参数设置[2]:背景样本大小N=20,分类阈值R=20,匹配阈值#min=2,更新因子φ=16。改进算法的参数选取由第2节确定:鬼影阈值TCNT=2;闪烁因子阈值参数:αinc=10,a=10;去噪参数:T0=T1=5。
下面是算法在ChangeDetection 2012数据库[14]中的测试结果,并将本文算法与原ViBe算法和其他主流算法进行比较与分析。由于本文解决的是鬼影、抖动和动态背景的问题,因此我们主要测试的是数据库中的baseline、camera jitter、dynamic background数据集。数据库中含有大量算法的测试结果,是一个目标检测领域较权威的数据库。
3.1 鬼影消除
本文选用的是ChangeDetection 2012数据库中pedestrians视频序列,对比测试的方法是:使用视频中包含运动目标的一帧图像创建初始背景集合,使得处理结果包含鬼影,然后分别通过本文算法和ViBe算法对后续图像进行处理,记录鬼影完全消失所需的帧数。鬼影处理效果,如图5所示,其中:(a)是原图像;(b)是样本集参考图像;(c)是原ViBe算法效果图;(d)是本文改进算法效果图。
(a) frame (b) ground
(c) ViBe (d) 本文算法图5 鬼影消除效果
图5(c)(d)是在鬼影出现后第21帧的结果,可以看出本文的改进算法已经被消除,相比之下,ViBe算法此时依然有很明显的鬼影。由于本文消除鬼影的方法不依赖于创建的初始背景模型[4-6],因此可以消除背景突然运动而产生的鬼影。
表2列出本文算法与ViBe算法、文献[10]的改进算法在pedestrians、Traffic和Highway视频中鬼影消除所需的帧数的比较,鬼影出现的时间分别是341帧、1帧、343帧。在三个数据集中,本文算法消除鬼影需要的时间约是ViBe算法的1/5;是文献[10]算法的1/2。从实验结果可以看出,本文算法可以更快速地消除鬼影。
表2 鬼影消除所需帧数比较
3.2 抖动与动态背景处理
如图6所示,从第一列到第三列依次是数据集中三个比较有代表性的视频:traffic、badminton、fountain02。前两个视频是抖动的视频,最后一个是动态背景的视频。图6中,(a)是原始图像,(b)是参考MASK图,(c)是原ViBe算法,(d)是GMM算法[15]的结果,(e)是MBS(Multimode Background Subtraction)[16]算法的结果,(f)是本文算法的结果。GMM算法是一种经典的目标提取算法;MBS是在ChangeDetection 2012数据库上最新的、效果较好的算法。可以看到,ViBe算法有很多虚假前景区域,误判率很高;traffic、badminton视频中GMM和MBS算法的仍然存在抖动引起的虚假前景,并且前景提取不完整;本文提出的算法基本将虚假前景去除,提取的前景较完整。对于动态目标数据集fountain02,虽然测试的算法都能去除虚假前景,但是GMM和MBS有较大空洞,相比之下本文算法对前景有更好的提取,保持了真实前景的形状。
(a) frame
(b) ground
(c) ViBe[2]
(d) GMM[15]
(e) MBS[16]
(f) 本文算法图6 算法效果对比图
3.3 指标评估
本节将对算法的准确率(precision)、召回率(recall)、F-Measure和运算时间进行评估[1],计算公式如下:
(10)
(11)
(12)
式中:TP表示前景像素被正确分类的个数;FP表示背景像素被错误分类为前景像素的个数;FN表示前景像素被错误分类为背景像素的个数;TN表示背景像素点被正确分类的个数。F-measure指标综合考虑了precision和recall的结果,反映了总体效果,这三个指标的数值越大越好。下面简称准确率为P、召回率为R、F-Measure为F,时间为T。
选用pedestrian、traffic、fountain02和badminton视频序列,其中traffic和badminton是抖动视频,fountain02是动态背景的视频。选择上述视频中有参考图像的序列,约2 400帧,将算法结果生成的每张二值图与参考图像逐点进行比较,计算每张图片的P、R和F值,取均值作为最后的总P、R和F值,最后分别与其他流行算法进行比较。
表3列出GMM、MBS算法和原ViBe算法与本文算法的对比结果。可以看出本文提出的算法在准确率上有较大的提升。对于基础数据集pedestrians,由于没有抖动和动态背景的影响,所有算法的结果均比较理想,本文算法的F-measure仍然要高于其他算法,对于抖动的处理,traffic数据集的准确率和F-measure高于其他算法至少10%。对于badminton数据集,由于本文算法召回率偏低,使得MBS算法略微优于本文算法,但是本文准确率指标较好,同时MBS的运算时间约是本文算法的10倍。
表3 算法指标
续表3
表3还列出了各个算法的运行时间,其中ViBe算法最快。由于本文算法是基于ViBe算法的改进,加入了新的处理机制,使得运算复杂度增加,但是综合运算速度和性能,本文算法相比其他算法有较大的提升。
4 结 语
本文提出一种基于ViBe算法的改进目标检测算法,包含了背景值定向传播与计算闪烁因子的方法,并对MASK图像进行去噪处理。使用C++完整实现算法功能,通过在目标检测常用数据集上进行测试,结果表明,算法可以快速消除鬼影,同时在视频抖动和动态背景等复杂情境下,可准确地进行目标检测,在保持较高运算速度的情况下,准确率高于部分主流算法。改进后的算法可以进一步应用到计算机视觉领域,并普遍适用于视频监控、智能家居等真实情景。