本文是根据M. Hofmann等人在2012年的IEEE Workshop on Change Detection上发表的“Background Segmentation with Feedback: The Pixel-Based Adaptive Segmenter”,并结合自己的理解而成的,论文转载请注明出处:http://blog.csdn.net/kezunhai

        Pixel-Based Adaptive Segmenter(PBAS)检测算法,从思路和框架上看,该算法是结合了SACON和VIBE两个算法的优势,并进行了一些细微的改进而成的,算法在检测性能上优于SACON和VIBE。可能有些朋友对SACON和VIBE不熟,下面首先分别简单介绍下SACON和VIBE算法。

(1)SACON算法

       SACON算法通过保存视频序列的前N帧作为背景模型,对于newly coming像素,则根据式(1)与背景模型比较:

其中, Tr是一个阈值,用于表示像素值间的差异,c表示通道,对于三通道,则表示(r,g,b)。然后,进一步通过式(2)来判断是前景还是背景:

其中,Tn是阈值,一般取值2/3N*Tr即可。以上即为SACON算法的基本思想,而对于背景更新等其他细节,可以参考文献:Background subtraction based on a robust consensus method

(2)VIBE算法

         采用了一种全新的思想来进行目标的检测,将随机原理引用到目标检测。其基本思想是对于每个像素,在半径为R的范围内进行随机采样,作为该像素点的背景模型,默认采样点为20。接着,对于新进来的像素,将其值与背景模型比较,如果下式大于或等于#min(默认取值为2):

则将该像素判为背景像素,否则为前景。

而在背景模型更新方面,VIBE采用随机选取背景模型中的一个像素点,以一定的概率用当前帧的像素值来替换,并将当前帧的像素值以一定的概率融入到背景模型的邻域中。

实验表明,VIBE算法不仅计算复杂度低、速度快、而且准确率高,尤其是作者提出VIBE+后,VIBE算法的性能得到了进一步的提高。更详细的内容请参考论文Background Subtraction: Experiments
and Improvements for ViBe

有点跑题,还是回到正题来。为了对PBAS有一个整体的印象,我们来看PBAS算法的diagram,如下图所示:

                                                                            

图的左边分别是像素分类的决策阈值更新、背景模型更新率的更新;图的右边是背景模型及背景模型邻域的更新。在背景建模阶段,PBAS算法采用类似SACON算法背景建模的方法,收集前N帧像素以及梯度幅值作为背景模型。新来像素与背景模型比较,比较方法如下式:

其中,Bk(xi)表示背景模型中的像素,R(xi)表示像素阈值,#min表示最小的匹配数目,F(xi)=1表示前景。下面重点来介绍下R(xi),这也是本文的一个重点。

跟传统的全局阈值不一样,在PBAS算法中,每个像素的阈值都是像素相关的,不同位置的判断阈值可能不一样。PBAS算法通过计算前N帧的前N个距离的最小值的平均值来决定各个像素的阈值。具体来说,就是用D(xi)={ D1(xi),D2(xi),...Dn(xi)}表示最小距离矩阵,其中D(xi)= Min( dist(I(xi),Bj(xi))), j=1,2...N。 则对于每个像素来说,其N个最小值的平均值为:

对应的判断阈值R(xi)则通过下式来计算:

其中Rinc/dec和Rscale都是预先定义的常量。

        而背景更新部分,对于不同的像素,背景更新率也不同,作者通过下式来自适应调节背景模型的更新率:

其中Tinc和Tdec也是预先定义的常量。

除了更新率外,论文还有一点需要提下,作者在论文中也采用了邻域更新,但是与VIBE不同。在VIBE中,背景模型中邻域的像素值是采用当前像素来更新的;而PBAS算法中,背景模型中的邻域值是采用当前像素的邻域值来更新的。

          通过上面两个像素判断阈值的自适应和背景模型更新的自适应,整个算法基本实现了non-parameter的运动目标检测。在网站http://www.changedetection.net/上,该算法的综合性能排名第三,其性能这里不再细叙,具体的可以参考相关文献。而根据changedetection上提供的测试环境和结果:~48
fps (average on the whole database) with a C++ implementation running in three threads on a core i7 3.5 GHz,在I7(8核啊,算法也采用了多线程技术)上可以达到48fps,个人也测试了下,算法的检测结果比较优秀,而且对缓慢的光照变化具有较强的鲁棒性,环境适应能力也比较强,但是处理速度上还是不太理想,通过优化可以达到16fps左右,当然公司的电脑比较落后,话说是2007年左右的,具体配置没查看。

          总体来说,PBAS算法是一种性能比较优越算法,该算法本身结合了SACON和VIBE算法的优势,兼具两者特性,值得进一步关注。

【计算机视觉】背景建模之PBAS的更多相关文章

  1. 【背景建模】PBAS

    Pixel-Based Adaptive Segmenter(PBAS)检测算法,是基于像素的无参数模型,该算法结合了SACON和VIBE两个算法的优势,并在这两个算法的基础上改进而来,SACON和V ...

  2. 背景建模或前景检測之PBAS

    申明,本文非笔者原创,原文转载自:http://blog.csdn.net/kcust/article/details/9931575 Pixel-Based Adaptive Segmenter(P ...

  3. 【计算机视觉】背景建模--Vibe 算法优缺点分析

    一.Vibe 算法的优点 Vibe背景建模为运动目标检测研究邻域开拓了新思路,是一种新颖.快速及有效的运动目标检测算法.其优点有以下两点: 1.思想简单,易于实现.Vibe通常随机选取邻域20个样本为 ...

  4. 背景建模技术(六):帧处理(FrameProcessor)模块

    前面几篇文章简单介绍了BgsLibrary的入口函数.视频分析和视频捕获模块,本文将简单介绍帧处理模块,即对每一帧进行处理的函数,也就是真正调用背景建模算法的接口处. 下面贴出源码供大家分析: #in ...

  5. 【背景建模】SOBS

    SOBS(self-Organizing through artificial neural networks)是一种基于自组织神经网络的背景差分算法,主要是借鉴神经网络的特性,一个网络输入节点,对应 ...

  6. 【背景建模】PbModel

    PbModel是基于概率模型的背景差分算法,其基本思想是像素点会因光照变化.运动物体经过产生多种颜色值,但是一段时间内,像素点处于静止状态的时间会比处于运动状态的时间长.因而一段时间内,像素点某个颜色 ...

  7. 【背景建模】VIBE

    ViBe是一种像素级的背景建模.前景检测算法,该算法主要不同之处是背景模型的更新策略,随机选择需要替换的像素的样本,随机选择邻域像素进行更新.在无法确定像素变化的模型时,随机的更新策略,在一定程度上可 ...

  8. [MOC062066]背景建模资料收集整理

    一.相关博客 背景建模相关资料收集,各个链接都已给出. 资料,不可能非常完整,以后不定期更新. -----------------切割线----------------- 这个哥们总结的非常好啊,看完 ...

  9. OpenCV ——背景建模之CodeBook(2)

    1,CodeBook的来源 先考虑平均背景的建模方法.该方法是针对每一个像素,累积若干帧的像素值,然后计算平均值和方差,以此来建立背景模型,相当于模型的每一个像素含有两个特征值,这两个特征值只是单纯的 ...

随机推荐

  1. java读取 xml文件

    java读取xml文件的四种方法  转自https://www.cnblogs.com/lingyao/p/5708929.html Xml代码 1 <?xml version="1. ...

  2. 小米 oj 马走日 (bfs 或 双向bfs)

     马走日 序号:#56难度:困难时间限制:1500ms内存限制:10M 描述 在中国象棋中,马只能走日字型.现在给出一个由 N*M 个格子组成的中国象棋棋盘( 有(N+1)*(M+1)个交叉点可以落子 ...

  3. jQuery系列(七):导航栏实例

    上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  4. python struct的使用例子

    import struct i = 1024 # s0为一个字符串,长度为4,即占四个字节,这样方便传输与保存二进制数据. s0 = struct.pack(">I", i) ...

  5. 教你快速写一个EventBus框架

    前言EventBus相信大多数人都用过,其具有方便灵活.解耦性强.体积小.简单易用等优点,虽然现在也有很多优秀的替代方案如RxBus.LiveDataBus等,但不可否认EventBus开创了消息总线 ...

  6. docker安装redis,并用配置启动

    1.拉取redis镜像 docker pull redis 2.创建redis本地配置文件 ①.去redis官网下载redis,获取redis.conf文件 ②.修改redis.conf文件相关配置, ...

  7. mybatis中添加时间字符串条件

    <if test="operatorDateStart != null and operatorDateStart !='' " >operator_date > ...

  8. 编译安装 Nginx

    一.下载 https://nginx.org/en/download.html yum install -y wget wget http://nginx.org/download/nginx-1.1 ...

  9. C++继承中的属性

    class A { public: int a; A() { } void print() { cout<<a; } }; class B:public A { public: int a ...

  10. 数据分析 - pandas 模块

    数据读取结构 -  DataFrame Series (collection of values) DataFrame (collection of Series objects) Panel (co ...