前言
先说一下传统的运动目标检测的方法,前景即为目标,大致可分为两类:背景建模法和非背景建模法,从字面意思可以理解背景建模法是先把背景检测出来,再根据背景取得前景,有混合高斯模型、模糊数学、神经网络的方法;而非背景建模方法有光流法和帧间差分法,这些方法有利有弊,总是不能适应各种问题,而且有的计算复杂,难以理解,于是在11年的时候,有人提出了vibe算法进行视频序列前景检测。
ViBe - a powerful technique for background detection and subtraction in video
ViBe:A Universal Background Subtraction Algorithm for Video Sequences
这两篇大家可以谷歌,都是原作者写的,我也没看过看不懂
vibe(visual background extractor)简介
描述它是一个像素级的算法,怎么理解呢?就是在前景检测的时候,会对每一个像素点进行判断,每个像素点都有数自己的域,通过在域内进行判断是前景还是背景。
—————————————-分割线————————————-
依我之见该方法简单易懂,是一种可显著提高精度和减少计算量的背景提取方法。
该方法具有优秀的更新策略,空间信息传播技术,和瞬时初始化技术,可以处理任何速度下的事件,并得到不经任何处理的分割图,且可在第二帧得到较好效果。
核心
首先作者提出了三个问题:
(1)要建立怎样的背景模型以及如何使用这个模型
(2)应如何初始化这个模型,算法执行的一开始如何快速建立好背景模型,完成初始化工作。
(3)背景模型如何实时的进行更新。
通过以上3个问题我们来说明该算法的原理:
模型初始化(一帧完成)
对于一个像素点,结合相邻像素点拥有相近像素值的空间分布特性,随机选择它的邻域点的像素值作为它的模型样本值。假定X表示当前峽图像的一个像素点,p(x)表示该点的像素值,背景模型的建立就是为图像中每个像素建立各自的样本集,这里像素点X的样本集就能表示为:
判断(x,y)点的公式可以表达为
其中SR(pt(x))代表以(x,y)为中心半径为R的2—D欧式空间
Umin为个数,原文取3;
到此为止,初始化完成模型更新
背景模型的更新就是使得背景模型能够适应背景的不断变化,比如光照的变化,背景物体的变更等等。
保守的更新策略:前景点永远不会被用来填充背景模型,会引起死锁,比如初始化的时候如果一块静止的区域被错误的检测为运动的,那么在这种策略下它永远会被当做运动的物体来对待;
在本方法中采用的更新策略是保守的更新策略+前景点计数方法。前景点计数:对像素点进行统计,如果某个像素点连续N次被检测为前景,则将其更新为背景点。
随机的子采样:在每一个新的视频帧中都去更新背景模型中的每一个像素点的样本值是没有必要的,当一个像素点被分类为背景点时,它有1/ φ的概率去更新背景模型。
具体的更新方法:每一个背景点有1/ φ的概率去更新自己的模型样本值,同时也有1/ φ的概率去更新它的邻居点的模型样本值。更新邻居的样本值利用了像素值的空间传播特性,背景模型逐渐向外扩 散,这也有利于Ghost区域的更快的识别。同时当前景点计数达到临界值时将其变为背景,并有1/ φ的概率去更新自己的模型样本值。
在选择要替换的样本集中的样本值时候,我们是随机选取一个样本值进行更新,这样可以保证样本值的平滑的生命周期由于是随机的更新,这样一个样本值在时刻t不被更新的概率是 (N-1)/N,假设时间是连续的,那么在dt的时间过去后,样本值仍然保留的概率是
这就表明一个样本值在模型中是否被替换与时间t无关 ,随机策略是合适的。