陈 宁,范英豪,白 冰
(1.浙江科技学院 机械与能源工程学院 杭州 310023;2.浙江省食品物流装备技术研究重点实验室,杭州 310023)
随着高清摄像机的普及和互联网的高速发展,利用计算机从视频中检测有效的运动目标成为计算机视觉领域的研究热点[1]。目前,运动目标检测算法中最常用的是光流法[2-3]、帧间差分法[4-6]和背景减法[7]。背景减法的主要思想是通过建立一个背景模型,将视频当前帧与该背景模型进行对比,从而获取运动目标区域。与光流法、帧间差分法相比,背景减法鲁棒性好、获取的运动目标区域更加完整。但是,常见的背景减法在建立模型时耗时长、占内存大[8-9]。因此,Barnich等[10]提出了一种新的背景建模方法——ViBe(visual background extractor)算法。该算法因为采用相邻像素创建背景模型,所以对硬件要求低、占内存小且处理速度快,与传统方法相比较具有较好的性能。但是ViBe算法会产生“鬼影”现象,导致误检,针对这一问题,吴尔杰等[11]提出对局部像素值方差大小进行对比获取鬼影区域并对其进行抑制,从而达到去除“鬼影”的目的。Jin等[12]提出将改进的Canny边缘检测方法融合到ViBe算法中检测“鬼影”,然后对其进行消除。这些方法算法都较为复杂,计算量大。杨丹等[13]首先对连续帧进行求平均法获取初始背景,然后融合帧差法、背景差分法和OTSU算法去除“鬼影”,这种算法适应性强,但是计算量较大。郭冲宇等[14]提出在前20帧使用大量样本训练初始背景模型并设置阈值减少虚假前景,从而达到消除“鬼影”目的,但这种方法耗时长,对不同环境适应性差。
基于上述研究,我们提出一种结合帧间差分法和ViBe的运动目标检测算法,利用帧间差分法的实时性及不会产生“鬼影”这一特性,将帧间差分法得到的结果与ViBe算法得到的结果进行逻辑运算,从而有效地去除“鬼影”,并降低了计算的复杂度。
ViBe算法是由Olivier Barnich提出的一种全新的背景减法。传统的背景减法中构建背景模型需要大量的视频帧才能完成,而它利用相邻像素仅需一帧就可以建立背景模型。它使用第一帧初始化背景模型,并对对应的背景像素点进行时间和空间上的随机更新,这样不仅加快了计算速度而且保持了较高的精度,同时还提高了抗干扰的能力。ViBe算法可以分为背景初始化、前景检测和背景更新3个步骤。
1.1.1 背景初始化
ViBe算法依据每个像素点与其邻近像素点具有相似的像素值,在每个像素点及其邻域内随机选取n个像素点进行建模,对每个像素点进行相同处理后得到初始化的背景模型。该背景模型定义如下:
M={v1,v2,…,vn}。
(1)
式(1)中:n表示样本空间的大小;vi(i=1,2,…,n)表示n个像素点对应的像素值。
1.1.2 前景检测
图1 当前帧与背景比较
初始化背景后,一帧中的每个新像素v(x)在以其自身为圆心、R为半径的欧氏空间SR(v(x))中,如图1所示,其中C1、C2为二维颜色空间(C1,C2)的分量。计算该空间与其背景模型M(x)的像素点交集个数n(x),定义最小像素交集个数阈值nmin,当n(x)大于等于阈值nmin时,判定该新像素点为背景像素点(记为g(x)=0);否则,判定该新像素点为前景像素点(记为g(x)=1)。前景分割公式如下:
1.1.3 背景更新
在ViBe背景模型更新过程中,由于像素点与相邻像素点之间具有较强的统计相关性,当检测到一个像素点是背景像素点时,相邻的像素点很可能会被认为是背景像素点。此外,在ViBe背景更新过程中还要考虑当前像素点与其历史样本之间的关系,故ViBe背景更新策略包括时间和空间更新两个方面,这是一种随机保护更新策略,可以将突然停止或长时间滞留的前景对象融入背景模型中。
在视频流中,相邻帧之间因时间间隔较短,背景几乎保持不变,而运动区域有一定的变化,据此可以将两者分开。帧间差分法主要是通过相邻两帧的差值检测图像中的运动区域,其基本规则如下:相邻两帧像素点(x1,y1)(x2,y2)的灰度值分别为f1(x1,y1)和f2(x2,y2)。当一个运动物体出现在视频中,即使运动物体移动缓慢,像素也会发生很大变化,故f1(x,y)和f2(x,y)之间也会存在差异,相应的运动目标区域因此也能被检测出来。因此,对第k帧图像和第k-1帧图像进行减法处理,得到差分图像,其数学公式[15]如下:
D(x,y)=|fk(xk,yk)-fk-1(xk-1,yk-1)|。
(2)
式(2)中:D(x,y)为第k帧图像与第k-1帧图像的差值。
由于光照的突然变化及其他噪声也会引发像素变化从而被包含在差分图像中,因此,帧间差分法选择相对应阈值对差分图像进行二值化,从而消除噪声干扰,准确提取前景区域。其表达式如下:
(3)
图2 帧间差分法效果
式(3)中:R(x,y)为二值化前景图像;T为分割阈值。R(x,y)为255,表示前景;R(x,y)为0,表示背景。算法效果如图2所示。
ViBe算法可以准确地检测运动目标,但是当检测视频第一帧中包含运动目标或者连续几帧中静止的物体突然运动时,ViBe算法往往会出现误检情况,这是由于算法在初始化时将运动目标作为背景模型[16]。虽然后续帧可以更新背景,消除对运动目标的误检(即消除“鬼影”),但是过程相对较慢,并且当后续帧的运动目标再次经过该区域时,会降低检测精度。而帧间差分法在检测运动目标时检测到的运动目标区域虽然会产生空洞,但它不会产生“鬼影”现象。此外,ViBe算法和帧间差分法都具有计算简单、实时处理、效率高等特点[17-18],非常适合基于视频图像处理的实时运动目标检测。针对以上两种方法的优缺点,本研究提出了一种融合帧间差分法和ViBe算法的改进算法,算法流程如图3所示。图3中:I(k-1)、I(k)、I(k+1)分别表示第k-1、k、k+1帧图像。
图3 改进的ViBe算法流程
首先将当前帧第k帧图像与相邻的第k-1帧和第k+1帧图像分别做帧间差分运算,分别得到差分后的图像Q1和Q2。与此同时,对当前帧第k帧及第k+1帧分别运用ViBe算法获取运动目标图像V1和V2。然后,将图像V1与Q1、V2与Q2分别进行与运算得到图像X1和X2。最后,将图像X1和X2进行与运算得到前景图像F。此时,将图像F与当前帧经过ViBe算法得到的图像V1进行帧间差分运算,如果差分结果为零,则认为该图像F为前景图像;如果检测到运动目标区域,则认为该区域是“鬼影”区域,需要对其立即进行消除,并对该区域内像素点进行背景更新操作。
改进的ViBe算法有效地抑制了ViBe检测中的“鬼影”问题。但检测到的运动物体会产生空洞现象,从而影响前景目标的完整性。此外,在现实生活中存在很多的噪声,例如随风飘动的树叶、波动的水等,这些都会影响到前景目标的检测,从而在最终的前景图像中会出现较多的白色伪目标区域。针对这些问题,本研究采用数学形态学方法[19]对检测到的前景图像进行处理。数学形态学具有抑制噪声、提取特征、分割图像等功能,能够提取出对表达和描绘区域形状有意义的图像,其基本运算是侵蚀和膨胀。集合A被结构元素B侵蚀,表达式为X=AΘB={X:B-X⊂A};集合A被结构元素B膨胀,表达式为:X=A⊕B={X:(-B+X)∩A≠∅}。将上述两种基本运算按不同的先后顺序进行运算即可得到开、闭运算,表达式分别为
A⊙B=(AΘB)⊕B;
A·B=(A⊕B)ΘB。
开运算可以删去图中单独的微小区域并使得边缘平滑。闭运算可以填充、弥合和连接图中相邻的区域。在本算法中,首先利用开运算去除图中一些单独的微小区域,接着利用闭运算弥合相邻的区域,从而去除噪声、填充空洞。
以互联网公开获取的不同环境下的视频序列作为研究对象进行试验研究,其中视频帧的频率为30 s,分辨率320 pixel×240 pixel。试验平台:Intel酷睿i7四核处理器,内存8 GB;Windows7操作系统;开发环境是Python3.6.0+OpenCV2.0。
第1组试验对象为白天光线较好的公路交通视频序列。选取该视频序列相近的两帧进行比较,如图4所示。从图4(b)中可以很明显地看到产生了“鬼影”区域;从图4(d)可以看到不仅有效地抑制了“鬼影”区域,而且还填充了目标区域。
图4 白天公路交通视频检测结果
第2组试验对象为傍晚时分光线昏暗环境下的公路交通视频序列。选取该视频序列相近两帧进行比较,如图5所示。通过对比,同样得出本算法可以有效去除“鬼影”区域,填充运动目标区域。
第3组试验对象为有干扰物(路边摇晃的树叶)的公路交通视频序列,选取该视频序列相近的两帧进行比较,如图6所示。图6(b)中不仅包含“鬼影”而且还包含大量的噪声。从图6(c)可以看到没有产生“鬼影”及噪声,可以较好地得到运动目标,但运动目标并不是很完整。从图6(d)可以看到不仅去除了“鬼影”和由摇晃的树叶引起的噪声,而且准确、完整地得到了运动目标。
图6 含干扰物视频序列检测结果图
为了验证本研究提出算法的有效性,采用查准率(rP)、查全率(rR)和调和平均值(rH)对算法进行评价,分别表示如下:
(4)
式(4)中:mTP为正确检测出的运动目标数目;mFP为检测出非运动目标的数目;mFN为未检测出的运动目标数目。
ViBe算法和我们提出的改进的ViBe算法在3种不同环境视频序列的评价指标平均值见表1。从表1可以看出,改进的ViBe算法相比ViBe算法,查准率提高了16%,查全率提高了6%,调和平均值提高了11%。
进一步分析本算法检测运动目标出现误检、漏检的原因,主要是视频序列中含有带阴影的运动物体和本算法中二值化阈值均为固定值。此外,为了验证本研究提出算法的实时性,我们记录了不同环境下的视频序列在ViBe算法和改进的ViBe算法中每帧处理的时间,见表2。虽然我们提出的改进的ViBe算法在3种环境下均比ViBe算法耗时,但该算法仍可以满足运动目标检测的实时性要求。
表1两种算法不同评价指标的对比
Table1Comparison of different evaluation indexes of two algorithms %
评价指标ViBe算法改进的ViBe算法查准率82.596.3查全率88.093.5调和平均值85.294.9
表2两种算法在不同环境下处理每帧的平均时间
Table2Average time for each algorithm to process each frame in different environments ms
环境类别ViBe算法改进的ViBe算法白天公路交通5.26.0傍晚公路交通5.05.7含干扰物4.65.0
我们提出一种融合帧间差分法和ViBe的改进ViBe算法。首先对视频序列分别采用帧间差分法与ViBe算法检测运动目标区域;然后对这两个相互独立的检测结果进行逻辑运算,去除ViBe的鬼影区域并更新背景模型;最后采用数学形态学弥补运动目标区域空洞和去除噪声。试验结果表明,该算法对运动目标检测查准率约为96.3%,查全率约为93.5%,调和平均值约为94.9%,比ViBe算法分别提高了16%、6%和11%,同时该算法的平均每帧识别时间也能满足实时性要求。由于存在车辆阴影的干扰,本算法有一定的误检率和漏检率,因此有待进一步研究。