熊玲,陈勇
(重庆师范大学计算机与信息科学学院,重庆401331)
随着社会的发展,人们的生活水平随之不断提高,监控视频快速的进入到寻常百姓家,因此监控视频成为了人们安防系统中不可缺少的部分。要使监控视频发挥最大的作用,那么计算机视觉在监控视频中的应用就变得越来越重要。而监控视频中的信息又复杂万千,我们在进行安防的时候却只针对我们需要的信息进行采集,所以视频的处理越来越趋于智能化和自动化。在针对室内的独居老人的行为检测中由于背景环境相对复杂,所以就需要一个健壮稳定的运动目标检测算法来对视频的前期进行预处理。
运动目标检测的前提是需要准确地分割出我们所需要的准确的目标,目标分割是后续行为检测的基石。目前,目标检测最主流,也是最经典的算法有:光流法[2]、帧差法[3]和背景减除法[4]。而背景减除法中最常用的算法是 ViBe(Visual Background Extractor),此算法是一种针对像素级建立背景模型并和当前帧作背景差的算法。但该算法也存在着不足之处:①当第一帧图像含有运动目标时,建立的背景模型就不准确,会分割出虚拟的前景,即鬼影。②当室内的光照变化很大时,或者背景由于前景目标而出现不完全时怎样精确地得到背景图像并与当前帧图像差分从而提取完整的前景目标。针对以上问题文献[6]通过将原来的固定阈值变成动态阈值来减少前景提取出现的空洞,以提高目标检测的抗干扰能力,还利用二次更新的策略来更新背景模版。文献[7]中是利用边缘的相似性来判断鬼影,并结合三帧差分的方法消除鬼影。
本文深入研究背景差分法中的一种高效建模方法——ViBe算法,利用像素之间的空间特性和前景判断的周期来改进优化该算法,提高该算法的性能和准确度,得到令人满意的结果。
ViBe算法在运动目标检测中是采用随机原则。在背景建模和更新中都是使用随机更新和邻域随机算法的机制[5]。其中该算法中包含的三个部分为:背景模板初始化、目标检测和背景更新。
ViBe算法是采用视频序列图像的第一帧来初始化背景模板。针对视频图像的每一个像素所表示出的背景模型如下所示:
其中,vi表示的是视频序列中像素x所对应的背景样本空间,N表示的是样本空间的大小。
该算法的初始化使用的是视频序列中每个像素与其邻域像素之间所特有的相似空间分布特性,利用视频序列的第一帧图像,随机的从每个像素的八邻域(如图1所示)中选取像素值作为该像素点的背景模型值,并被记为vi,以此重复选择N次,得到该像素点的背景模型 M(x)。
图1 八邻域模型
目标检测是从视频序列的第二帧开始,通过当前帧与背景模型样本中之间像素的差值来判断是否属于前景目标,也就是当前帧的每一个像素与该像素所对应的背景模型N个样本之间的距离来判断(如图2所示)。
图2 当前像素点与背景模型的比较
如图2所示,对应的是以v(x)为中心,R为半径的圆形区域中所对应的像素x,若包含在该圆形中的像素点个数大于#min,则该像素点就是背景点,因此就需要对背景模型进行更新,而背景模型更新的准则为:
背景更新采用的是随机更新的策略,更新机制如下所示:
(1)当像素点被判定为背景时,就得给背景模型更新,该像素点有的概率更新该像素点,也就是当该像素点被判定为背景点时,并不是必须更新该背景像素点,更新是具有一定的概率性的。而更新的方法是是随机的选择一个样本点,用当前帧的该像素点进行填充更新。
(3)在更新时采用的是随机更新的机制,以此可以保证样本值的平滑周期。每一个像素点不被更新的概率是,假设在连续时间下,dt后样本值的保留概率为:
(4)从公式(3)中看出,样本模型的更新与时间是无关的,所以随机策略的方法是有效的。
ViBe算法在模型初始化和鬼影残影[8-10]的快速消除中仍存在很多不足。本算法针对原算法在该方面的不足提出了两方面的问题改进,一是在背景模型初始化中选择初始化的邻域发生变化;二是在针对鬼影和残影的问题上,为了加快鬼残影的去除加入了滞留参数和背景分割参数,以此提高检测精确度。
在原始ViBe算法中是通过第一帧视频序列图像每个像素周围的八邻域来初始化该像素的背景模板,然后在随机选择像素值时,由于每次都是从3×3的像素中选择N次,导致每次初始化时就会出现对一个像素选择多次,导致在后面进行阈值分割出前景目标时出现更多的空洞。
所以本文提出使用像素帧的每个像素的24邻域来初始化背景帧,而针对图像边缘值则就用边缘像素值来填充,为每帧图像对添加两行两列,而此两行两列的值都是原始序列帧的边缘值。
在原始ViBe算法中当视频序列的第一帧中出现运动目标,那么初始化背景模型时就会出现鬼影,在后面运动加速时就会出现残影,所以针对这两种情况,本文提出了滞留参数和背景分割参数的方法来抑制鬼残影的出现,加快鬼残影的消除。
本文在原算法上为每个像素点都分配了滞留值β,当一个像素点通过阈值的判定一直被判定为前景时,且该值超过了滞留值,那该像素点就会是鬼影或残影。在背景分割上为了分割出更精准的前景,通过阈值判定来进行判断,而针对每个像素值与背景样本值通过阈值判定得到前景目标的二值图像后,再通过阈值来把当前像素值与其邻域像素值作比较得到二值图像,最后通过两二值图像做与操作得到最后精确的前景目标。
改进后的算法的流程如下:
(1)背景模板初始化。假设每个像素的背景模板样本的数量为N,对视频第一帧的每一个像素随机选择该像素的24邻域作为样本值,同时为每个像素设置该像素(x,y)的前景生命周期矩阵为F(x,y)并初始化为零。
(2)前景目标差分。利用当前像素与N个背景模板像素做差分,通过阈值判断是否属于前景,如果是前景分割出前景目标
(3)模板更新。模板的更新包括背景样本、背景模板和生命周期矩阵的更新。利用分割出的二值图像判定(x,y)像素点是否是前景,如是前景则F(x,y)中的值就得加1。若连续被判断为前景点的次数大于滞留值β,则该点是鬼影或者残影,那么就得利用相同的方法更新背景模板。若(x,y)在其中一旦出现是背景点,则F(x,y中的值被置零。而样本模版的更新则根据1/γ的概率随即更新。
(4)空洞填充。通过改进的算法得到前景目标的二值图像后会出现很多空洞,所以使用形态学方法进行空洞填充。
为了验证本文的算法,利用三组室内视频对实验进行测试并做对比试验。本文实验的环境和参数设置如下:Windows 10系统,Intel i5的处理器,4G的运行内存,使用MATLAB R2015a做实验仿真。实验中的运行参数为背景模型样本数N=20,判断阈值R=20,背景样本最小匹配数#min=2,更新因子γ=10,滞留值为β=3。本文选取changedetection视频库中的input视频和in⁃telligentroom视频验证本文算法。
本算法采用input视频的第36帧和intelligentroom的第300帧呈现算法之间的对比。实验结果如下:图(a)和(b)分别使input监控视频序列第36帧和intelli⁃gentroom监控视频序列第300帧的图像,图(c)和(d)分别是原图像经过传统的ViBe算法的检查结果,图(e)和(f)分别是在原始算法上改进邻域值的选取后出现的实验结果,图(g)和(h)分别是添加滞留值后出现的实验结果,图(i)和(j)是针对不同的视频经过本文改进算法后得到的实验结果。
图3
由实验结果可以看出在视频input中原始的ViBe算法在视频序列第一帧出现运动目标时,到第36帧还出现严重的鬼影或者残影,经过本文算法的改进在图(i)中鬼影或残影基本消失。在intelligentroom视频中由于视频序列的第一帧没有出现与运动目标,所以没有出现鬼影或残影,从而增加了前景目标的完整性。但在图(d)中能够看到很多由于光照不均匀,背景的变化导致提取的前景目标不精准,所以通过本文算法(j)后得到了完整的前景目标。经过本文的算法,得到的前景目标与实际坏境中相一致。
本文对ViBe算法进行了分析研究,针对其在室内检测出现的不足提出了改进算法。利用背景初始化时邻域的选择增加背景模型初始化的精确度减少前景起初出现的空洞现象,并为提取得到的前景目标设置滞留值消除由于初始化存在运动目标从而导致存在残影或者鬼影出现的前景提取错误的问题。在这两组视频中通过对原始算法和本文算法做了一个对比,证明了本文算法的有效性和检测性能的提高。