运动目标检测就是将视频序列中的运动目标与所在的背景图像相分离,从而可以获得目标的前景,也就是确切的运动目标。它是计算机视觉研究领域的一项关键技术,属于智能视频监控与目标跟踪系统中的最底层,检测结果的优良程度与后续目标跟踪与行为理解的效果有密切关系[1]。
目前比较常用的运动目标检测算法有背景减除法[2]、帧间差分法[3]和光流法[4]。帧间差分法的基本思想是在视频序列中的相邻两帧或者相邻三帧之间利用运动目标的差异进行差分运算,对结果作阈值化处理并提取出运动目标,该算法最大的优点就是速度快、背景不用进行积累,而且对光照变化不敏感,算法复杂度较低。背景减除法是目前应用最为广泛的一种目标检测算法,它首先要建立一个合适的背景模型,然后将当前帧图像与该背景模型进行差分运算来计算运动区域,该类算法能够相对完整地提取出运动目标,但是对背景环境的变化比较敏感,例如光照发生突变或者树枝摇动等[5]。因此该类算法的关键问题是建立背景模型以及合理的更新机制。建立背景模型的方法也有很多,比如码书模型、混合高斯模型以及近几年提出的ViBe算法模型等。其中,ViBe[6]算法具有运算速度快、目标提取准确率高等优点,但是该算法具有在第1帧图像包含运动目标的情况下易出现“拖影”,以及在光照突变的情况下无法准确提取运动目标,对光照敏感的缺点。
文中针对ViBe算法的这些缺点,提出一种改进的基于ViBe算法的运动目标检测算法,该算法结合改进的三帧差分法,对ViBe背景减除算法进行改良,使得在视频起始的数帧或者十数帧图像内快速消去“拖影”,并且在碰到光照突变时能够自适应地提取出正确的运动目标,并且将在比较经典的室内环境中对该算法进行仿真验证,证明该算法对光照突变的适应性。
1 帧间差分法 1.1 传统的帧间差分法比较在同一背景下,不同时刻的2幅图像,比较的结果便反映了1个正在运动的物体在当前背景下运动的结果。一般常用的方法就是对两幅图像做“差分”运算,并根据差分结果得到物体的运动信息。在相减后的图像中,灰度值未发生变化的区域就被减掉。帧间差分法就是通过对视频序列中相邻两帧图像做差分运算然后经阈值化来得到运动目标区域的方法,而且该方法适用于多种情况下,具有良好的实用性[7]。帧间差分法的原理是:
(1) |
式中:T是设定的阈值,若阈值选取过大,则会使检测到的目标有较大的缺失,检测不完整;若选取过小,则又会混入较大的噪声,影响最后的检测效果。此外,帧差法在检测过程中时常还会出现双影现象,影响检测的效果[7]。为了改善这些问题,很多文献提出了三帧差分法。
三帧差分法是将当前帧与上帧做差分运算,下一帧再与当前帧做差分运算,然后这两次差分运算的结果再进行逻辑与运算操作,最后通过设定好的阈值进行分割,提取出运动目标。三帧差分法可以克服二帧差分法易产生的双影问题,对于噪声也起到了一定程度上的抑制作用[7]。设一视频序列中,某连续三帧图像分别为fK-1(x, y)、fK(x, y)、fK+1(x, y),然后将前两帧图像和后两帧图像通过式(1)进行运算,得到两帧差图像g1(x, y)和g2(x, y),然后对其进行进行相与运算,如式(2)所示:
(2) |
就可以定位出运动目标所在的位置。其中,G(x, y)是g1(x, y)和g2(x, y)进行逻辑与运算的结果。图 1是三帧差分算法的大致流程图。
1.2 改进的三帧差分法传统的三帧差分法尽管对帧间差分法有了一定的改进,但是它仍然会使得检测到的目标内部产生较大的空洞,而且对于一部分目标轮廓检测的也并不完整,所以可以通过结合边缘提取与轮廓填充的方法来改进该算法。
边缘提取就是用来提取图像中的目标与背景间的边界线的方法。物体的边界线可以用来划分不同物体之间的界限,而且以边缘提取为基础,也出现了许多图像分割的方法[8]。能够实现边缘提取的算法也有很多,比较各个算子的特点,比如,Sobel算子的复杂度较小,但是边缘定位不够准确;Roberts算子的边缘提取不够完整,抗噪声性能也比较差;Laplacian算子对噪声也非常敏感;而Canny算子不易受到噪声干扰,而且通过双阈值法提取得到的边界信息也比较完整[9],所以在文中算法中应用的边缘检测方法选择使用Canny算子。图 2为改进的三帧差分法流程图。
如图 2所示,该改进三帧差分法的具体步骤如下:
1) 应用传统三帧差分算法对第K-1、K、K+1三帧经差分,阈值分割和逻辑与运算等步骤得到相“与”的结果res_diff1;
2) 然后将第K帧图像进行边缘提取,以及将两次差分的结果进行膨胀运算,再将其分别与边缘提取的结果进行与运算,得到的2个结果再通过或运算进行融合,可以得到运动目标的边缘轮廓信息,再与上一步的结果做或运算得到结果res_diff2;
3) 步骤2得到的结果已经相对比较完整,但是在实验中发现,如果背景环境稍复杂,还是会混入了部分非目标的边缘信息,影响到检测效果。这也是加入边缘提取算法通常会碰到的问题。为了在去除这部分无用的边缘信息的同时保证目标的完整性,可以通过使用中值滤波与数据融合相结合的方式,将res_diff2做较大程度的中值滤波以滤除无用信息,然后再与第1)步的结果做或运算得到结果res;
4) 在步骤3的基础上进行一系列的后处理,包括轮廓填充,噪声去除等,便得到最终的结果。
图 3中各个仿真图是根据本算法选用不同的视频序列所做的仿真,分别选自“高速公路”序列的第116帧,“停车场”序列的第33帧,以及“小区”序列的第11及45帧。图 3(a)列是原视频序列某一帧的截图,图 3(b) 列是传统三帧差分法检测的效果图,图 3(c) 列是加入的边缘检测提取到的结果,图 3(d) 列是文中算法检测的效果图。明显可以看出,图 3(c) 列中图像的边缘信息明显要比图 3(b) 列完整清晰,改进算法通过加入Canny算子以及改进传统算法的流程,可以改善传统算法边缘提取不完整的问题,而且同时也几乎没有附加冗余的边缘信息。对于分辨率为360×240的视频来说,原三帧差分算法可以达到每秒26.3帧/s的速度,本改进算法由于添加了边缘检测算子以及边缘填充等,算法上增加了复杂性,也达到了平均每秒14.6帧/s,基本上达到了实时性的要求。
通过对文中提出的算法进行仿真,由于Canny算子的检测性能比较优越,在进行相关的后处理之后,检测到的目标轮廓完整性比原始三帧差分算法平均提高了65%~70%,比仅仅经过轮廓填充的三帧差分算法也平均提高了15%~20%,总体来说,该改进算法提取得到的运动目标相对比较完整,一定程度上改善了传统算法容易在检测得到的运动目标内部产生较大“空洞”的缺点,检测效果良好。
2 ViBe运动检测算法2011年,Olivier Barnich提出了名为ViBe的背景差分算法,英文名称是visual background extractor,中文全称是视觉背景提取算法,是一种普遍的可以进行背景快速提取的算法,ViBe算法计算过程简单、鲁棒性和实时性较高。文中进行运动目标检测主要使用的算法就是ViBe算法。
相比其他背景差分算法,ViBe算法不是应用多帧图像初始化建立背景模型,而是利用首帧图像建立一个像素模型,使算法速度大大提高。如果在视频首帧图像中没有出现运动目标,则该算法的鲁棒性比较好,如果在首帧图像中包含目标,便会因为像素模型建立时产生的误差在当前位置留下影子,很长一段时间无法去掉。
2.1 ViBe的模型建立及初始化在ViBe算法中,针对首帧图像,采用针对每个像素点分别建立像素模型的初始化方法。定义像素点x处的背景像素值v(x), 用M(x)代表背景模型,每个像素点处的背景模型M(x)由v(x)的八邻域中随机选择的N个像素点作为相应模型的样本值。vi为像素点x对应第i(i=1, 2, …, N)个样本值的背景像素值,那么背景模型M(x)可以由式(3)来描述:
(3) |
在首帧图像中,y值在像素点x的邻域NG(x)内的样本点中随机选择,令v0(y)为在首帧图像在y处的像素值,那么可以得到式(4):
(4) |
采用这种初始化方法虽然效果也非常好,但是也正如前文所说,当首帧图像中包含运动目标时,会导致提取到的前景目标产生拖影现象,而且久久不能消去[10]。
2.2 背景模型更新在ViBe算法中有许多的关键参数,先对它们做一个简介。首先,设每个像素点在像素模型中存储的样本数量为N,本次试验中初始化N=20;然后,背景更新因子(时间亚采样因子)φ初始化为16,这也是当前背景像素本身像素模型更新的概率,表示每φ个背景像素点需要做一次更新;将新像素值分类为背景像素值的样本值个数所需达到的最小值为#min并初始化为2;以x点处的像素值v(x)为圆心,R为半径创建一个二维欧几里得色度空间的球体SR(v(x)),用来将像素点x处在新一帧图像中的像素值与该点处的历史样本值做对比,将像素点分类[11]。
模型更新要用到背景模型M(x)与球体SR(v(x))交集的基数,有限集的基数也就是一般意义下集合中的元素数量。基数的计算过程如下:1)初始化变量基数个数inum=0,基数阈值#min=2,M(x)第i个样本值的索引号i=0(0≤i≤N)。2)计算M(x)第i个样本值vi与点x处的像素值v(x)之间的欧氏距离,经历一次循环索引值自加1,如果该距离小于R,则基数inum自加1,直到i遍历完所有的样本点个数,记下循环结束时inum的值。3)如果inum大于等于#min,则v(x)从属于背景,该像素点是背景点;反之则为前景点。所以当inum=#min时可以得出该点为背景点,而且进一步,第2)步循环截止的条件可以更改为inum=#min或者i=N。从这里可以看出,该算法要判断一个像素点是背景点还是前景点,只要比较inum与#min的大小关系就可以了,而不用去比较所有像素模型里的样本值[12]。
ViBe算法的背景模型更新机制包含以下几个方面:其一,ViBe算法的背景模型更新机制的主要创新所在,是利用背景像素点的历史样本值去不断更新时间随机序列,当M(x)中有新的样本值加入时,就随机将历史样本值丢掉,这使得背景像素模型的样本值在其生命周期中以平滑指数的形式衰落[11]。若某时刻M(x)的样本值在经历更新之后的存在概率为(N-1)/N,假设有时间连续变化这个条件,则在t+dt时刻,样本值存在的概率密度函数如式(5)所示,且等效形式如式(6):
(5) |
(6) |
式(5)、(6)说明每一个样本值的期望时间间隔在指数衰减条件下与参数t无关,满足像素样本值按照指数形式衰减的先决条件是检测到的样本值与历史样本值是完全独立的,这是一种无记忆性的更新机制,该种更新机制能够适应大多数的视频进行运动检测,历史背景模型的样本值如果出现错误不会使得后续的全部更新模型出错,这种方式解决了由于先入先出的方式所导致的变化速度不能妥善处理的问题[11]。
其二,便是它的时间二次采样[11]。此举可以延长背景模型历史样本值的生命周期,缩短背景更新的频率,方法是应用时间亚采样因子φ来解决这个问题。在实验中,该值初始化为16,此时每个背景样本值被选中更新的概率都有1/16。
其三,在于它的随机邻域传播机制,也就是背景模型中的样本所对应的邻域也要随着样本点同时更新。实现的方法如下:将NG(x)设为当前像素点在空间八邻域中的附近像素点值;然后更新背景模型M(x)以及该模型的所有样本值,通过使用当前像素点处的像素值v(x)用来将NG(x)的某个像素点处的样本值替换[12]。
2.3 算法的优缺点从上文中可以看出,ViBe算法在模型初始化以及更新机制方面有其特有的优势,但是该算法也存在一些缺陷,主要集中在以下2个方面[10]:
1) 当首帧图像包含运动物体时,会在当前位置留下物体的影像,经过很长一段时间才能慢慢消失,也就是所谓的“拖影”(或称“鬼影”)现象。
2) 对光照突变特别敏感,当光照条件突然发生变化时,使用该算法会无法正确提取出运动目标。
3 改进的ViBe检测算法上文中提到的三帧差分法具有算法的时间复杂度低、执行速度快、对光照不敏感、适用性好,不会产生“拖影”现象等优点,而且,在前面经过改进的三帧差分法提取目标更加完整。所以可以通过将改进的三帧差分的过程引入到ViBe算法中对其进行改进以达到去“拖影”以及增强对光照突变的适应性的作用。下面将从这两方面对该改进ViBe算法进行说明。
3.1 ViBe算法的快速去“拖影”方法ViBe算法由于仅从首帧视频帧中建立背景模型,容易造成“拖影”现象,许多文献也针对这个问题进行了相关的研究,现在比较常用的方法是将原算法的首帧图像初始化改为多帧图像初始化,或者将原算法与其他相关算法进行结合。比如文献[11]中提出的一种利用滑动窗对多帧图像均值滤波进行初始化,文献[13]中提出的将改进的二帧差分算法与ViBe直接简单相“与”,以消除“拖影”。
在试验中可以发现,ViBe算法形成的“拖影”需要经历数十帧甚至百余帧才会随着算法的更新慢慢消失。在该算法的更新策略中,ViBe只是对当前帧图像中判定为背景点像素的像素模型进行更新,而判定为前景像素的背景模型则不予更新。而且,如果某个像素点连续多次被检测为前景像素点,则认为是一块静止的区域被误判为运动,要将其更新为背景点。这个被检测为前景像素点的次数iForeNum也是该算法比较重要的参数,算法中将其初始化为50。图 4为改进ViBe算法快速去“拖影”部分流程图。
“拖影”现象中的“拖影”也正是这种静止的区域,为了让其快速消除而且使算法本身不受到较大的影响,可以在检测的开始阶段和后续阶段采用不同的参数更新策略,也就是参数分类更新的策略,使这2个阶段使用不同的iForeNum参数值进行背景更新,以达到快速消去“拖影”的目的。
另外,上文中提到的三帧差分法没有建立背景模型的过程,不会形成类似于ViBe算法所产生的这种“拖影”现象。所以,除了采用不同的更新策略之外,也可以通过将改进的三帧差分的过程引入到ViBe算法中,将2种方法结合来快速消除“拖影”。
在试验中可以发现,原始的ViBe算法要经过数十帧甚至百余帧才能彻底消除“拖影”现象,如果使用前面提到的分类更新的策略,则可以加快消除“拖影”。如果采用分类更新与引入改进的三帧差分相结合的方法,则加快了消除“拖影”的速度,“拖影”可以在十数帧甚至数帧内快速消除。该改进算法的快速去“拖影”部分的流程图及仿真图如图 5所示,仿真图 5(a)列是原视频序列某一帧的截图,图 5(b) 列是原始ViBe算法检测的效果图,图 5(c) 列是文中算法检测的效果图。图 5仿真图分别选自“行人”序列的第17及28帧,“小区”序列的第7及13帧,可以看出,改进ViBe算法能够快速地去除“拖影”现象,提取出正确的运动目标,效果良好。
经过一系列的仿真,可以发现使用文中算法,“拖影”现象可以在平均12~15帧内快速消除,远远优于不经过改进的算法的平均70~80帧左右才能消除“拖影”。
3.2 ViBe算法的消除光照突变影响的改进三帧差分法计算简单而且对于光照变化不敏感,这是因为该算法只是考虑相邻帧之间的像素是否发生变化,并不涉及背景建模的过程,在检测场景内发生光照突变时,具有良好的检测效果。利用这个特点,可以将ViBe算法结合改进三帧差分法来增强对光照突变的适应性。
根据场景中是否发生光照突变,采用不同的运动检测策略是改进算法的核心[14],发生光照突变的判定条件是关键。当场景中发生光照突变时,ViBe检测出的前景目标的区域会很大,远远大于使用三帧差分检测得到的目标区域。这样,当使用ViBe检测得到的前景区域面积远大于三帧差分检测得到的区域面积时,也就是满足式(7)时,可以判断此时发生了光照突变。
(7) |
式中:S(ViBe)和S(DiffFrame)分别是ViBe和改进三帧差分算法检测到的前景区域面积;K是一个判定阈值,可以根据实际情况来选取,在实验中一般取K为6 000,原理流程如图 6所示。
下面将在室内环境中仿真验证光照突变对改进算法的影响。图 7中4组图分别选自室内拍摄的视频序列的第37、55、81、126帧,其中,图 7(a)列是原视频序列的截图,图 7(b) 列是原始ViBe算法检测的效果图,图 7(c) 列是改进ViBe算法检测的效果图。
在仿真中,第37及55帧发生在光照突变前,此时改进ViBe算法输出的检测结果良好,当发生光照突变之后,从第81帧及126帧可以看出,原ViBe算法产生了严重误检,此时输出的检测结果是由改进三帧差分得到的,其检测效果良好。所以,该改进ViBe算法能够自适应地校正错误的前景目标,以消除光照突变造成的影响。
对于分辨率为360×240的视频来说,原三帧差分算法可以达到22.8帧/s的速度,本改进算法由于添加了边缘检测算子并且结合了三帧差分,算法上增加了复杂性,也达到了平均13.3帧/s,基本上达到了实时性的要求。而对于单帧像素面积远远大于该种情况的视频可能达不到这种速度。
本次仿真实验是在处理器型号为Intel-i5-4200H,主频为2.80 GHz,内存为4 GB,操作系统为Windows 8.1中文版64位的PC机上使用Visual Studio 2005以及OpenCV 2.4.3版本实现。
4 结束语文中先将边缘检测算子与三帧差分算法结合提出一种改进算法,使得边缘提取的更加完整,而且几乎不会附加冗余的边缘信息,达到较好的检测效果。然后再将改进的三帧差分算法引入到ViBe算法,即视觉背景提取算法中,并且采用一种参数分类更新的策略,用来消除原始算法中的“拖影”现象,以及增加对光照突变的适应性,经过仿真验证,该算法能够自适应地选择检测的方法,以消除光照突变造成的影响,检测效果较为优越。
[1] | 贾艳丽.基于视频图像序列的运动目标检测与跟踪[D].哈尔滨:哈尔滨工程大学, 2012:3-4. http://www.cnki.com.cn/Article/CJFDTotal-QBZH201206013.htm |
[2] | 余启明.基于背景减法和帧差法的运动目标检测算法研究[D].赣州:江西理工大学, 2013:2-4. |
[3] | 赵建.基于三帧差法的运动目标检测方法研究[D].西安:西安电子科技大学, 2013:2-4. http://xuewen.cnki.net/CJFD-DNDX2005S2035.html |
[4] | 严红亮, 王福龙, 刘志煌. 结合三帧差分的ViBe运动检测算法[J]. 计算机系统应用 , 2014, 23 (11) : 105-110 |
[5] | ARSENEAU S, COOPERSTOCK J R. Real-time image segmentation for action recognition[C]//Proceedings of the 1999 IEEE Pacific Rim Conference on Communications, Computers and Signal Processing. Victoria, BC, Brazil:IEEE, 1999:86-89. |
[6] | LIPTON A J, FUJIYOSHI H, PATIL R S. Moving target classification and tracking from real-time video[C]//Proceedings of 4th IEEE Workshop on Applications of Computer Vision. Princeton, New Jersey, USA:IEEE 1998:8-14. |
[7] | BARRON J L, FLEET D J, BEAUCHEMIN S S. Performance of optical flow techniques[J]. International journal of computer vision , 1994, 12 (1) : 43-77 DOI:10.1007/BF01420984 |
[8] | BARNICH O, VAN DROOGENBROECK M. ViBe:A universal background subtraction algorithm for video sequences[J]. IEEE transactions on image processing , 2011, 20 (6) : 1709-1724 DOI:10.1109/TIP.2010.2101613 |
[9] | 龙腾.运动目标检测算法研究[D].武汉:武汉科技大学, 2013:10-12. |
[10] | 王霏.基于视频的运动目标检测算法研究[D].长春:吉林大学, 2014:40-46. |
[11] | 冷斌.室外监控环境下运动目标检测算法的研究[D].长沙:中南大学, 2013:15-16. |
[12] | 刘露平.基于视频序列动目标检测的远程视频监控系统的实现[D].成都:电子科技大学, 2013:15-18. |
[13] | 甘明刚, 陈杰, 刘劲, 等. 一种基于三帧差分和边缘信息的运动目标检测方法[J]. 电子与信息学报 , 2010, 32 (4) : 894-897 |
[14] | 李洪杰, 程欣宇, 任海林. 一种基于帧差和ViBe算法的前景检测方法[J]. 电子技术与软件工程 , 2014 (21) : 119-120 |