基于ViBe 模型和五帧差分法的目标检测算法*
2020-06-09朱帅飞
朱帅飞 杨 芳 马 伟
(河南科技大学机电工程学院 洛阳 471003)
1 引言
运动目标检测是当今计算机视觉领域中研究的热点,在交通监控、人工智能、军事等领域有着广泛的应用,是目标跟踪与识别的基础。因此,运动目标检测方法的研究具有重要的价值。
目前常用的运动目标检测方法主要包括:背景差分法[1~2]、帧间差分法[3]和光流法[4~5]。背景差分法是当前应用应用最广泛的检测方法,背景差分法需要对背景进行建模,然后把图像序列当前帧与建立的背景模型进行差分运算。背景差法算法简单易于实现,但对阴影去除效果差,易受噪声影响。帧间差分法是把图像序列中相邻两帧图像进行差分运算,然后通过阈值分割得到前景目标。该方法鲁棒性强、原理简单,但是提取出的运动目标的不完整,对于过快移动和过慢移动的目标会造成漏检和空洞现象[6~11]。光流法利用光流场反映像素点运动的方向和速度,并根据光流场的分布特征,提取出运动目标的区域。该方法检测精度高,但计算量大,实时性和实用性都较差[12~14]。
针对以上算法的不足,2011 年Bamieh 和Van Droogenbroeck 提出了一种新颖的基于背景减除的目标检测方法—ViBe 算法[15]。ViBe 模型计算简单、实时性强、提取出的运动目标较完整,但是对光照变化的适应性差,在强光下会把大面积的背景误判成前景;而五帧差分算法对光照适应性强但容易出现空洞。因此,本文提出一种结合两种算法来提取运动目标的方法,采用连通性检测和形态学操作等进行后处理,最终提取出运动前景目标。经过实验验证:该算法能够有效地防止ViBe 算法把大面积的背景误判成前景,提高了ViBe 算法对光照变化场景下的鲁棒性。
2 ViBe算法
ViBe 算法是一种像素级别的视频背景建模和前景检测的算法,该算法计算简单、实时性强、提取出的运动目标较完整,目前已经被广泛地使用。ViBe 算法与其他算法的区别在于背景模型的更新策略,其特点是随机选择需要替换的像素的样本,随机选择邻域像素进行更新。当像素变化的模型无法预测时,采用随机的更新策略,可以在一定程度上模拟像素变化的不确定性。主要步骤分为三个:背景模型初始化、前景检测和模型更新。
2.1 背景模型初始化
ViBe 算法对背景模型的初始化通过建立样本集的方法来实现的,该算法只需一帧就能完成初始化。对于初始化帧中每个像素点随机选择N个它的邻域点的像素值作为模型样本值,这些模型样本值构成了一个样本集Mi(x,y) 。其中N一般取20,Vx表示图像中像素点x的像素值或者它的邻域像素值,则背景模型表示为
2.2 前景检测
为了实现前景检测需要对像素点进行分类。判断一个像素点是属于前景像素点还是背景像素点,只需计算该像素点背景模型Mi(x)与圆形区域SR(Pn(x))的交集的总数是否大于阈值T,大于阈值T判定此像素点为背景点,反之为前景像素点。
图1 ViBe算法前景分割示意图
Pn(x)表示第n帧图像中像素点x的像素值,P1、P2…Pn表示为背景模型Mi(x)中的像素值,SR(Pn(x))表示以x为圆心,R为半径的圆形区域。
2.3 模型更新
ViBe 算法常用的背景模型更新方法主要有两种分别是结合前景点计数法的保守更新法和结合空间邻域传播法的保守更新法旧文献。本文采用的是结合空间邻域传播法的保守更新策略,其特点是当某一帧的某一个像素点被判断为背景点时,它将有的概率更新自己的背景样本,同时也有的概率更新自己某一个邻域像素的背景样本。
3 五帧差分算法
传统的两帧差分法和三帧差分法都能够迅速检测出运动目标,但是两种方法都容易出现空洞和双影现象。为了改善这些问题,采用五帧差分法。五帧差分法的基本思想是:获取预处理后的五帧图像 分 别 为fi-2(x,y) ,fi-1(x,y) ,fi(x,y) ,fi+1(x,y),fi+2(x,y);把中间帧fi(x,y)分别与剩余帧做差分运算,可以得到如下结果:
然后将得到的四个差分结果分别进行“与”运算,如下所示:
将得到的运算结果D1和D2进行降噪,再分别用动态阈值进行二值化处理,最后将其结果进行“或”运算:
与运算可以有效地防止目标重叠现象,或运算可以克制空洞现象的产生。对差分结果先“与”后“或”的逻辑运算。可以使提取的前景目标更加完整、准确。
4 改进的ViBe运动目标检测算法
传统ViBe 算法遇到发生光照突变时,会把大面积的背景误判成前景;而五帧差分算法对光照适应性强。为此我们引入了光照突变判断,其基本思想为:首先使用ViBe 算法对视频进行逐帧处理,然后判断是否发生了光照突变,如果没有发生光照突变,则输出ViBe 算法的运算结果;如果发生了光照突变,输出五帧差分算法的运算结果。
光照突变判断:首先采用ViBe 算法提取运动前景目标,然后将整个前景图片分成若干区域,当某块的前景像素大于某一个阈值r时,则计数器+1,依次遍历整个图像,统计得到计数器的值,计算计数器值与整个前景图像区域的总数,当比值大于某一阈值t,则判断为光照突变。改进算法流程图如图2所示。
图2 改进算法流程图
对于阈值r和t的选取,如果阈值r和t过大,则会增加输出误判结果的机率,如果阈值t过小,大部分的视频帧将会采用三帧差分法处理,使得检测结果的轮廓不完整。在本文实验中,通过对实验数据中发生光照不均及未发生光照不均的多个图像帧分析并反复修正将最终阈值r和t分别设定为32 和0.6。需要说明的是,针对不同的应用场景与测试数据,阈值r和t需要结合具体情况进行分析并重新设定。
5 实验结果与分析
5.1 实验结果
该实验是在VS2013、OpenCV2.4.10 软件为开发工具在 Intel(R)CorelM(TM)i3-3110M CPU @2.40GHz、运行内存为4 GB 的环境中进行的。实验所用通用视频序列是存在光照突变的一组视频序列图像,视频序列的图像大小为160×120 像素。分别采用五帧差分算法、ViBe 算法和本改进算法对视频图像序列中的运动目标进行检测。
如图3 所示,图(a)是发生光照突变的第40、43、77 帧的原图像;图(b)是传统ViBe 算法的进行目标检测的结果;图(c)是本文改进算法进行目标检测的结果。从实验结果可以看出:当目标场景存在光照突变时,ViBe 算法会把大面积的背景误判成前景,造成检测失败;本文改进算法有效克服了光照变化和树枝摆动所带来的影响,没有大面积的背景被误判成前景,得到了相对完整的运动目标。
图3 vibe算法与本文改进算法对光照突变场景检果对比
如图4 所示,图4 为一组非光照突变场景检测结果对比实验。图(a)为视频1 中未发生光照突变的第18、35、71 帧的原图像,图(b)是五帧差分算法进行目标检测的结果,图(c)是本文改进算法的进行目标检测的结果。从实验结果可以看出:两种算法算法都能检测出运动目标,但是五帧差法检测结果存在空洞,得到的运动目标轮廓不完整;而本文改进算法检测出的目标轮廓相对比较完整更接近目标本身,也消除了噪声和空洞。
图4 五帧差分法算法与本文改进算法对非光照突变场景检测结果对比
上述实验结果表明,将ViBe 算法与五帧差分法结合起来的本文算法在光照突变场景下也可以检测出相对完整的运动目标区域,检测出来结果更加接近目标本身,提高了目标识别度,在一定的场景下对目标检测具有通用性。
5.2 定量评价
为了分析本文算法的性能,本文以视频处理时间T和误检率F两个指标进行评价。实验所用测试视频序列共120帧,其中评价指标误检率F计算方法如下:
式中,a 为检测结果中前景数目与实际不相符的帧数,b 为检测结果中前景数目与实际相符的帧数。在相同实验环境下三种算法的比较结果如表1 所示。
表1
实验结果表明,由于本算法增加了一些步骤,实时性不如其他的两种算法,但是与ViBe 算法相差不大,不过与其他两种算法相比本文方法在误检率上有明显改进,检测结果相对准确、完整,目标轮廓更加清晰。
6 结语
针对已有的ViBe算法进行改进,,结合五帧差分法提出了一种新的运动目标提取方法。通过实验结果表明:该算法能够有效地防止ViBe 算法把大面积的背景误判成前景,提高了ViBe 算法对光照变化场景下的鲁棒性,检测效果优于单独使用ViBe算法
和五帧差分法的检测效果。本文在发生光照突变的场景下使用五帧差分法检测物体时,检测结果还待提高,这是下一步研究的方向。