面向运动目标检测的改进ViBe算法研究与实现
2023-01-03张代旺符辰桂李学兵
张代旺,符辰桂,李学兵
(1.湖北汽车工业学院电气与信息工程学院,湖北 十堰 442002;2.江西理工大学软件工程学院,江西 南昌 330044)
0 引言
随着计算机技术的快速发展,运动目标检测在医学影像、智能交通和智能监控等领域被人们广泛使用[1-3],同时也是图像处理中研究热点.当今,常见的运动目标检测算法有3类:光流法[4-5]、帧差法[6]和背景差分法[7-9].光流法应用到实际场景中,是根据前景和背景像素的速度矢量不同来检测出运动目标,但光流法检测计算量很大且处理时间也较长,所以实时性非常差.帧差法是根据连续的n帧图像来进行差分,根据差分情况判别运动目标,此算法实时性好且简单,但它也存在一些问题,只能检测出运动目标边界,对于运动目标内部的运动目标差分后检测不出,则会出现空洞现象,而在背景变化非常快的场景下也检测不出运动目标,会把变化剧烈的背景错误地当作运动目标.背景差分法思想是用当前帧与背景模型进行差分,通过判断灰度等特征来分割运动目标.背景差分法实现简单且实时性好,同时具备准确性特点,能够很好地对视频序列中运动目标进行目标识别[10]、目标检测[11]以及目标跟踪[12-13],在有完整的背景图像时,能够较好捕获到前景目标.
传统的背景差分法在建立背景模型时耗时比较长,内存占用多.因此,在21世纪初,Barnich等提出了一种背景(visual background extractor,ViBe)建模方法[14],ViBe算法是像素级检测算法,能够用于图像建模或前景检测,运算速度快且计算量小,对运动目标检测效果非常好,但ViBe算法也存在很多不足,比如鬼影、空洞、噪声[15]等问题.对于这些不足,研究员们提出了很多目标检测改进算法.文献[16]提出一种基于块模型的混合高斯运动目标检测方法,根据信息度来对图像按分块进行处理,结合混合高斯运动目标检测算法,减少了算法的计算量,进而降低内存占用时间,不过在运动目标过程中会出现大量空洞.文献[17]提出Surendra背景更新法,能够自己适应去更新得到纯净背景,接着用于Vibe算法背景建模,这种算法能够抑制鬼影现象,但其存在一些不足,在背景更新时,是根据图像亮度进行差分判断,因此计算量大,即先要经过大量计算,接着还需要做大量迭代才能获得真实背景,算法复杂度非常高.文献[18]提出了一种加权Schatten-p范数与结构化稀疏分解的视频前背景分离算法,加权Schatten-p范数能够很好的抑制噪声,采用结构化稀疏约束,并在此基础上建立一种前景与背景分离模型,能够较好地分离目标,但存在一些空洞问题.文献[19]提出用平均背景法可以有效地抑制鬼影现象,但对于运动目标边界像素点不能有效检测,会出现大量漏点问题.文献[20]提出了一种阶段性处理的ViBe算法,是对ViBe算法步骤中细节进行改进,先用平均背景法获取真实背景,再用ViBe算法来背景建模,在前景检测后再加入最大类间方差法进行二次检测是否为背景点,该算法能获取更加精确的前景图像,但也会存在一些漏点问题.
图1 本研究算法流程图
本研究算法如图1所示,输入视频测试序列,首先采用迭代累积平均背景法获取真实背景;然后再把真实背景分别用于改进的ViBe算法和“或”类型三帧差法,扩大的24领域改进的ViBe算法利用真实背景进行背景建模,可以很好地抑制鬼影现象,从8领域扩大到24领域进行样本选取,扩大像素点样本选取范围,降低样本数据重复率,对于目标边界处可获得高精度样本集,扩大到24领域后能提高背景模型精确度同时也提高运动目标检测的准确度.“或”类型三帧法结合真实背景可以获得运动目标在边界处像素点,再与改进的ViBe算法进行“或”运算操作,可以弥补ViBe算法中运动目标检测时边界漏点问题;最后把“或”运算操作后视频序列利用形态学处理,可以抑制小噪声干扰,使检测结果更加完整,完成后输出前景图像.本文算法在保证运算速度的同时,能够有效抑制鬼影及漏点问题,同时提高检测精确度.本研究首先提出一种适合任何场景的真实背景获取方法,可以有效地抑制ViBe算法根据第一帧建模所出现的鬼影问题,其次,提出一种基于运动目标检测精度提高的方法.在目标检测数据集由之前8领域区域扩大为24领域来选取样本集,增加了样本数量,这将会提高模型的精确度,同时对边界也做一定处理,会提高边界处的准确度;最后,提出一种基于帧差法的边界值补足模型.利用帧差法弥补ViBe算法运动目标边界处所存在的漏点问题.
1 ViBe算法原理介绍与分析
图2 ViBe算法流程图
ViBe算法是Barnich等提出的一种背景建模方法,能够实时检测运动目标,是根据视频序列中首帧来创建背景建模,把首帧中各像素根据周围领域来建立样本集,用当前帧的像素值与背景模型中样本集比较来检测前景,整个过程如图2所示.
1.1 背景建模ViBe算法是根据视频序列中首帧图像来创建背景模型,如图3所示.这个背景模型建立是集合套集合概念,背景模型B为一个大集合,B集合中有i个Ai元素,i=1,2,…,N,即B={A1,A2,…,AN},N表示背景模型大小.同时Ai也为一个集合,Ai(x,y)是由a(x,y)像素周围领域多个随机像素值(p1,p2,…,pn)组成,其中(x,y)是首帧中像素位置,关系式为Ai(x,y)={p1,p2,…,pn},n为随机选取的样本数.
图4 二维欧氏颜色空间分类示意图
1.2 目标检测用当前帧中像素P(x)与背景模型中对应位置处的样本集{p1,p2,…,pn}进行比较得出距离,如果该距离比半径参数R小,则近似样本数加一,根据近似样本数与提前设定的阈值#min再比较,如果大于#min则判定该像素为背景点,反之为前景点,如图4所示.
1.3 背景更新ViBe算法有两种背景更新法,分别是保守更新和前景点更新.保守更新会产生死锁现象,在背景建模时,首帧中若存在运动目标,建模时候会把运动目标作为背景进行处理,则在下一帧时,真实背景与背景模型中误判的运动目标相比较后,会被误判为前景,这样一直下去会产生死锁现象.前景点更新是指某像素连续k次被判定为前景,则将划为背景进行背景更新.ViBe算法是把这两种方法联合使用的,当判断某像素为背景点时,将会有1/φ概率更新样本集合,也有1/φ概率更新周围的领域中样本集合.连续k次判断某点为前景点,也有1/φ概率去更新.
1.4 ViBe算法分析性ViBe算法是一个效率高且简单的算法,根据首帧来建立背景模型,如果首帧中有运动目标,则会被当作背景模型而处理,在下一帧时就会产生鬼影现象,同时ViBe算法也会有边界不清晰等问题,本文中提出的改进方法将能有效抑制鬼影、漏点现象.
2 改进的ViBe算法
改进ViBe算法是从背景建模、目标检测以及背景更新3个方面进行改进.
2.1 迭代累积平均背景法迭代累积平均背景法是通过对每一帧图像迭代相加累积而形成的真实背景,提取真实背景用于ViBe算法背景建模,可以有效地抑制ViBe算法根据第一帧建模所出现的鬼影问题.具体步骤如下:
1) 初始时,视频中首帧图像为I1(x,y),背景为B1(x,y).
2) 后面每一帧图像将进行迭代累加得到新的背景Bn(x,y),即
Bn(x,y)=aIn(x,y)+(1-a)Bn-1(x,y)
(1)