您的位置:首页 > 其它

背景建模之vibe学习

2013-12-17 15:23 176 查看
最近在了解背景建模方面的一些东西,发现vibe算法从实时性和处理效果来衡量,具有较好的实用性。这里借鉴博主TongAI的博客添加一点自己的理解。

转:http://www.btony.com/2012/12/vibe-learning/

1. 点模型和背景分类

ViBe算法不计算概率密度函数模型,他所用的每个像素点是选取固定长度的采样来建立背景模型。 为了确定一个新的像素pt(x) 是前景还是背景,作者将这个值中的采样点{p1,p2,p3,…,pn}的值进行比较。前面符号中的
x 表示特定的像素位置,而采样点可以理解为来自于相同的位置。



如上图,图中的横纵坐标并不是空间坐标,它表示了待分类的像素点和模型中的点(灰度)值的差距。与待分类点的差距小于规定的半径R的采样值的数量被称为基数(cardinality),用#表示。例如图中的情况#=2,包含了p2和p4。规定门限#min,如果#<#min,则待分类点为背景。

这个模型里面有两个固定参数,分别是R和#min,在实验中,作者令R=30,#min=2.

2. 模型更新——采样值的生命周期

ViBe的一个重要创新是通过随机的方式更新模型。Barnich在文章中提到,之前的方法利用先进先出的方式更新模型,这种方式并不太好,好的方式是让采样值在模型中的概率单调降低。于是,作者通过随机的办法,在n个采样点中随机选取一个进行更新。这样在数学保证一个采样值如果在t0时刻在模型中,那么在t1时刻仍然在模型中的概率是 (n−1n)t1−t0。

3. 模型更新——空间一致性

在实际的场景中,空间信息肯定是一个非常重要的信息,但是上面的步骤中并没有用到图像中的空间信息。为了保证空间一致性,作者又引入了一个随机。在上面更新了点周围八邻域,再随机选取一个点,还是用这个值来更新。(这个没太看懂这个随机与空间一致性的关联)

整理一下算法流程(以灰度图像为例):

初始化模型:预先设定好的模型的取样数量为n,那么就用前n帧图像完成初始化模型。

初始化模型结束后,对于新一帧图像中的每一个像素点,计算其与背景模型中n个取样点的灰度差。

其中灰度差小于给定半径(R)的数目成为基数(cardinality),假如基数大于给定的门限,那么该像素点被标记为背景,继续通过第4、5步更新背景模型,否则标记为前景,换下一个像素点重新从第2步开始执行。

从背景模型的n个采样点中,随机选取一个,用新的值代替。

从选取的被替换的像素点的八邻域,再随机选取一个像素,用这个新的值代替。

换下一个像素点重新从第2步开始执行。

关于算法,在文章中Barnich还提到了几点。一个是在模型建立的过程中,可以做到从第2帧开始进行背景估计,而不是从n+1帧开始,做到这点,这需要在用第一帧建模的时候,把第一个抽样点的邻域作为其他的抽样点就可以了。当然最好第一帧里面没有运动的物体。

再就是关于前景像素值是否更新到背景模型中的一个讨论。Barnich提到,乍一看,会觉得肯定不包含前景,但是这样在背景突然移动(例如本来停着的车)的情况下会引入死锁。另一方面,如果包含前景,那么移动太慢的前景可能会被认为是背景。不知道是不是因为我读的不够仔细,并没有看到在实验中作者到底是怎么操作的。

4.利用第一帧图像数据进行背景建模(实现方法:/article/1919467.html

关于黑体部分,按照我对别人代码的理解,进行一点说明:

在利用第一帧进行背景建模时,对每个像素点,利用3*3的模板,按照x,y坐标做平移操作。

模板如下:

x方向:

000
111
222
y方向:

012
012
012
x,y方向网格中的数据表示对应像素点的平移量,按照随机对应的平移量获得建模数据。注意对于边缘的处理,利用最近像素点进行填充。

5.更新模型的过程中对鬼影的处理

可以利用背景更新速率来控制,在对背景进行更新的过程中,按照指定的更新速率,随机的对背景像素点进行更新。例如,对于一张704*576的背景模型来说,根据测试帧与背景模型的比较,在比较的过程中按照一定的更新速率对背景模型中的随机像素进行较小偏移操作。这样可以处理部分鬼影现象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: