APP下载

基于vibe方法的运动目标分割保存程序设计

2020-09-10黄姝琦

看世界·学术上半月 2020年8期

黄姝琦

摘要:视频运动目标分割是计算机视觉技术的重要研究热点之一。本文主要介绍了基于ViBe的运动目标分割和保存技术,其目的是利用非参数化的算法,对运动目标进行较完整的分割和保存。

ViBe 算法是一种非参数化颜色背景建模方法,首先根据当前像素值对比过去在相同位置上的像素值,来确定此像素值是否属于背景;其次随机地替换背景模型中的像素值来更新模型;最后当像素被发现是背景模型的一部分时,它的值被传到相邻像素的背景模型中,以此更新相邻像素的背景模型。

经实验证明,VIBE算法计算量小,占内存小,处理帧的速度快,是一种实用的方法。

关键词:运动目标分割技入;非参数化;背景建模;ViBe

前言

当前,运动目标分割保存在计算机应用视觉领域已成为重要研究的热点之一。伴随着多媒体技术逐步向分布式环境提供交互式多媒体服务的方向迈进以及计算机视觉领域跨越到发展动态图像序列时,开始着重发展视频内容的相关应用。为了实现易于内容的存储、传输和检索等操作,对运动目标进行分割和保存便是可实现的重要方法之一。

在通信领域和多媒体相关领域,同样也将运动目标作为重要的考虑因素。在相关应用上,如视频数据库、智能家居和安全监控等,都与运动目标分割和保存息息相关,另外,上述这些应用也需要对运动目标的行为进行解释。基于此,对运动目标的分割和保存就成为了计算机视觉领域中的一个十分重要的研究课题。

随着计算机视觉领域的进步和多媒体技术的发展,运动目标的分割和保存在视觉监控,人机交互,娱乐动画,多媒体,通讯以及军事等领域都有着很广泛的应用前景。在电视电影的特效制作中,可以利用运动目标的分割技术将运动目标的图像和光照或阴影等各种参数从背景中提取出来,再放入需要的背景中。在交通環境中也可以利用运动目标分割技术,如对车辆的速度检测、对特定路段的车流量的监测、准确定位车辆,提高车牌识别等。综上所述,对于运动目标进行分割和保存的研究意义重大。

ViBe 检测算法的总体框架及思路

ViBe是本文中所提出的一个检测方法,相比于其他方法它有很多的不同和优点。具体的思想就是为每个像素点存储了一个样本集,样本集中采样值就是该像素点过去的像素值和其邻居点的像素值,然后将每一个新的像素值和样本集进行比较来判断是否属于背景点。

1.ViBe 算法

ViBe(visual backgroud extractor)算法,即视觉背景提取法,是一种通用的背景减法算法,对于各种视频流、多种场景内容及变化的场景都适用。为在实际应用中实现该类算法,必须考虑一下三个方面(1)如何建立背景模型;(2)如何进行前景检测;(3)模型如何随时间进行更新。该算法首次提出对单帧进行初始化建模,更新模型随机地替换原则,和一种新的更新机制——相邻像素更新背景模型的同时,背景模型也更新相邻像素的模型。对比其他一些前沿的背景提取法,VIBE算法简单,有效地简化了程序,在加快了对帧的处理速度的同时,可以达到了较高的准确程度,增强了抗噪能力和减少了计算机的负担。

2. 建立背景模型

初始化是建立背景模型的过程。通用的检测算法的初始化需要一定长度的视频序列来完成,通常要耗费数秒的时间,这极大的影戏的检测的实时性,对于手持相机实时拍照来讲并不合适。ViBe算法主要是利用单帧视频序列初始化背景模型,对于一个像素点,结合相邻像素点拥有相近像素值的空间分布特性,随机的选择它的邻域点的像素值作为它的模型样本值。

相比其他技术,利用单一帧进行背景模型初始化,这种方式更为简单。鉴于这种技术对光照的突然变化响应很简单,它们的方法是对现有的背景模型丢弃,对新的模型瞬间初始化。在视频的第一帧,对图像的每一个像素点都建立一个包含N个样本的像素模型,定义V(x)为欧式彩色空间的(R,G,B)中的位于x处的像素,Vi为选取的样本,这也就是V(x)

对应的模型为:

M(x)={V1,V2,V3....VN}

根据统一的规则,y的位置随机选择。值得注意的是,对于一个给定的v.(y)可能会多次被选中,例如,邻域的范围比阈值的范围M.(V)小,或者没有被完全选中的情况下,都会出现上述情况。但是,如果证实邻域的像素值是条件比较好的样本的话,上述问题就是可以解决的。实验证明,这种利用单帧进行初始化的建立模型的方法是可以实现的。然而,这种方法还存在一些问题,最为显著的就是,一个在第一帧的运动目标的出现将会引入一个称为“拖影”的生成物,影响算法的检测结果。我们上面所提到的“拖影”,准确是指:在运动中检测到的一组连接点,但是却不符合任何一个真正的运动物体,对检测运动目标产生干扰。“拖影”的是由于来自于运动目标的样本像素模型的不成功的初始化而产生的。

在随后的帧中,运动目标的移动以及发现真正的背景,可以通过常规的模型更新过程逐渐了解,让“拖影”随着时间移动逐渐消失。在本文中也会提出一些ViBe 算法所产生的缺点的解决办法。

实验程序的实现

前面主要对基于ViBe的运动目标的分割方法进行了理论的论述,本节在程序的实现方面对算法进行分析。本次设计使用的是Microsoft Visual Studio 2008。另外,该软件还OpenCv 对 Microsoft Visual Studio 2008 进行配置,以此来实现程序。

1. 建立背景模型的程序实现

建立背景模型是算法实现的重要一步之一,背景模型的建立主要包括分配空间和初始化和对每个像素样本的初始化两个部分。

(1) 分配空间和初始化

这里可以认为使用了一个3x3的模板,根据这个模板,对每个像素点的x和y坐标进行平移,而网格中的数值代表的是坐标平移量,根据对应的平移量来得到随机的邻居点的像素值。

(2)对每个像素样本初始化

利用单帧视频序列初始化背景模型,对于一个像素点,结合相邻像素点拥有相近像素值的空间分布特性,随机的选择它的邻域点的像素值作为它的模型样本值。

2.图片和视频的保存和输出

这部分主要是针对图片和视频(即图像)的读取,以及视频输出文件的创建和视频窗口创建。对于图片来说,主要是涉及图片的保存,这种保存主要是将检测出的带有运动物体的图片保存。

(1)图像的保存

在图像的保存中我们应用了Ipllmage结构,从本质上讲,他是一个CvMat对象,但它还

有一些其他成员变量将矩阵解释为图像。Ipllmage结构来源于Intel的另外一个函数库

Intel Image Processing Library(IPL),该函数库主要是针对图像处理。

Ipllmage *segMapbg=NULL;

Ipllmage *segMapdif=NULL;

Ipllmage* pFramec;

(2)创建输出视频文件

CvVideo Writer* Save_result=NULL;

Save_result=cvCreateVideo Writer(outfile,CV_FOURCC('X',V',I','D'),fps,size,l);

IplImage*dstlmg=cvCreateImage(size,IPL_DEPTH_8U,3);

(3)创建视频窗口

cvNamed Window("video",CV_WINDOW_AUTOSIZE);

实验结果

在动态图像中,在前景图像中,对于移动的物体(这里指人)提取出来的人物,对于这个移动中的人物的下半身出现黑色部分,这可能是因为颜色和静态物,如地板的颜色相同,以及光照的影响等所导致的。另外,在该矩形框中将树叶误认为了运动的物体,因此在右边的前景视频中,出现了白色的部分。这是因为有可能是本文中受到光照的影响等误将背景检测出,当成前景所致。

结论

以ViBe算法为基础,对运动目标进行了分割和保存。不同于其他的背景建模,从单一帧开始进行模型的初始化,避免了参数化的运算复杂,简单高效。

但是,在本次實验中,也存在一些问题,突出表现在最后的实验结果中。在对动态不表检测时,会发现一些原本应该检测出的事物没有完整的检验出来,主要原因是无法克服对色彩的辨别和对光照的影响等,这些问题在以后的研究中都是亟待解决的。

作者单位:山东省无线电监测站