ViBe算法:ViBe - a powerful technique for background detection and subtraction in video sequenceshtml
算法官网:http://www2.ulg.ac.be/telecom/research/vibe/linux
描述:c++
ViBe是一种像素级视频背景建模或前景检测的算法,效果优于所熟知的几种算法,对硬件内存占用也少。web
Code:算法
算法执行效率测试程序,windows和linux操做系统下的程序和c/c++文件均可以在做者官网下载,以下:windows
Windows and Linux users: a benchmarking program to evaluate the time needed by ViBe on your platform and on your own sequences! Download an archive zip archive [15 MB] to evaluate the time needed by ViBe on your platform (Windows or Linux [Wine]), and on your own sequences. A program for Windows and Linux. Download an archive zip archive [16 MB] to use ViBe on Windows (or under Wine in Linux).
The program allows you to: (1) save the result for your own images, (2) change the few parameters of ViBe to experiment with, and (3) reproduce our results. Linux: link a C/C++ object file to your own code. We provide the object (compiled) code of ViBe for non-commercial applications. Under Linux, download the32 bits zip file, or the 64 bits zip file. Details on this page.app
固然,在使用ViBe算法时应该遵循算法官网的License。less
算法的主要优点:dom
内存占用少,一个像素须要做一次比较,占用一个字节的内存;jsp
无参数法;
可直接应用在产品中,软硬件兼容性好;
性能优于混合高斯,参数化方法,SACON等;
像素级算法,视频处理中的预处理关键步骤;
背景模型及时初始化;
具备较好的抗噪能力。
参考文献:
背景差方法实现运动物体检测面临的挑战主要有:必须适应环境的变化(好比光照的变化形成图像色度的变化); 相机抖动引发画面的抖动(好比手持相机拍照时候的移动);图像中密集出现的物体(好比树叶或树干等密集出现的物体,要正确的检测出来);必须可以正确的检测出背景物体的改变(好比新停下的车必须及时的归为背景物体,而有静止开始移动的物体也须要及时的检测出来)。物体检测中每每会出现Ghost区域,Ghost区域也就是指当一个本来静止的物体开始运动,背静差检测算法可能会将原来该物体所覆盖的区域错误的检测为运动的,这块区域就成为Ghost,固然原来运动的物体变为静止的也会引入Ghost区域,Ghost区域在检测中必须被尽快的消除。一个Ghost区域的实例如图Fig.1,在图中能够发现相比于原图,检测的结果中错误的多出现了两我的的形状,这就是Ghost。
Fig 1
ViBe算法详解:
ViBe检测方法
ViBe是本篇论文中所提出的一个检测方法,相比于其余方法它有不少的不一样和优势。具体的思想就是为每一个像素点存储了一个样本集,样本集中采样值就是该像素点过去的像素值和其邻居点的像素值,而后将每个新的像素值和样本集进行比较来判断是否属于背景点。该模型主要包括三个方面:模型的工做原理;模型的初始化方法;模型的更新策略。
模型的工做原理
背景物体就是指静止的或是很是缓慢的移动的物体,而前景物体就对应移动的物体。因此咱们能够把物体检测看出一个分类问题,也就是来肯定一个像素点是否属于背景点。在ViBe模型中,背景模型为每一个背景点存储了一个样本集,而后将每个新的像素值和样本集进行比较来判断是否属于背景点。能够知道若是一个新的观察值属于背景点那么它应该和样本集中的采样值比较接近。
具体的讲,咱们记v(x):x点处的像素值;M(x)={V1,V2,…VN}为x处的背景样本集(样本集大小为N);SR(v(x)):以x为中心R为半径的区域,若是M(x) [{SR(v(x))∩ {v1,v2, . . . , vN}}]大于一个给定的阈值#min,那么就认为x点属于背景点。
模型的初始化方法
初始化就是创建背景模型的过程。通用的检测算法的初始化须要必定长度的视频序列来完成,一般要耗费数秒的时间,这极大的影戏的检测的实时性,对于手持相机实时拍照来说并不合适。ViBe的初始化仅仅经过一帧图像便可完成。ViBe初始化就是填充像素的样本集的过程可是因为在一帧图像中不可能包含像素点的时空分布信息,咱们利用了相近像素点拥有相近的时空分布特性,具体来说就是:对于一个像素点,随机的选择它的邻居点的像素值做为它的模型样本值。M0(x) = {v0(y | y ∈NG(x))},t=0初始时刻,NG(x)即为邻居点 。这种初始化方法优势是对于噪声的反应比较灵敏,计算量小速度快,能够很快的进行运动物体的检测,缺点是容易引入Ghost区域。
模型的更新策略
背景模型的更新就是使得背景模型可以适应背景的不断变化,好比光照的变化,背景物体的变动等等。保守的更新策略:前景点永远不会被用来填充背景模型,会引发死锁,好比初始化的时候若是一块静止的区域被错误的检测为运动的,那么在这种策略下它永远会被当作运动的物体来对待;Blind策略:对死锁不敏感,前景背景均可以来更新背景模型,缺点是缓慢移动的物体会融入背景中没法被检测出来。在本方法中采用的更新策略是保守的更新策略+前景点计数方法。前景点计数:对像素点进行统计,若是某个像素点连续N次被检测为前景,则将其更新为背景点。
随机的子采样:在每个新的视频帧中都去更新背景模型中的每个像素点的样本值是没有必要的,当一个像素点被分类为背景点时,它有1/ φ的几率去更新背景模型。
具体的更新方法:每个背景点有1/ φ的几率去更新本身的模型样本值,同时也有1/ φ的几率去更新它的邻居点的模型样本值。更新邻居的样本值利用了像素值的空间传播特性,背景模型逐渐向外扩 散,这也有利于Ghost区域的更快的识别。同时当前景点计数达到临界值时将其变为背景,并有1/ φ的几率去更新本身的模型样本值。
在选择要替换的样本集中的样本值时候,咱们是随机选取一个样本值进行更新,这样能够保证样本值的平滑的生命周期因为是随机的更新,这样一个样本值在时刻t不被更新的几率是 (N-1)/N,假设时间是连续的,那么在dt的时间过去后,样本值仍然保留的几率是
也能够写做,
这就代表一个样本值在模型中是否被替换与时间t无关 ,随机策略是合适的。
ViBe实验结果
在实验中,咱们和其余的一些检测算法在检测准确率和算法的计算量方面都进行了比较,实验代表咱们的方法检测效果明显要好不少,对于光照的变化和相机抖动等的效果都十分稳定,并且计算量很是小,内存占用较少,这就使得该方法可以用于嵌入手持照相机中。一些具体的实验效果和数据以下
Fig.2检测效果对比
Fig.3相机的移动
Fig.4 Ghost区域消融,图中的光亮的地板
Fig.5检测正确率 Fig.6算法处理速度
总结
在这片文章中,咱们提出了一个新的背静差算法-ViBe,和之前相比它具备三个不一样点。首先,咱们提出了一个新的分类模型。其次,咱们介绍了ViBe如何初始化,它只须要一帧图像便可完成初始化,而其余的算法一般须要等待数秒去完成初始化,这对于嵌入照相机中的要求实时性比较高的和一些比较短的视频序列颇有帮助。 最后,咱们提出了本身的更新策略,相比于其余算法将样本值在模型中保存一个固定的时间,咱们采用随机的替换更新样本值,通过证实这样能够保证样本值的一个指数衰减的平滑生命周期,而且可使得背景模型很好的适应视频场景的变化,从而达到更好的检测效果。
经过一系列实验代表ViBe方法相比于其余的一些检测算法具备计算量小、内存占用少、处理速度快、检测效果好、有更快的Ghost区域消融速度和应对噪声稳定可靠的特色,而且很是适合嵌入照相机等要求计算量小和内存占用少的情境中。
效果图:
对应的Code下载地址:
http://pan.baidu.com/share/link?shareid=409860&uk=3373051938