上一篇博文已经讲了贝叶斯滤波的原理以及公式的推导:http://www.cnblogs.com/JunhaoWu/p/bayes_filter.html

  本篇文章将从贝叶斯滤波引入到粒子滤波,讲诉粒子滤波的原理。

  前面我们已经提到,将跟踪目标的运动看作是一个动态系统。系统的状态以目标的状态来表示。这里,不妨将跟踪目标的中心位置作为系统状态 xt=(it,jt)。在连续变化的图像序列里,状态xt随时间不断变换。我们的目的是估计t时刻系统的状态,在这个例子中为目标的中心位置。

  状态估计问题(目标跟踪,信号滤波)就是根据之前一系列已有数据y1:t(后验只是)递推计算出当前状态xt的可信度。这个可信度就是概率公式p(xt|y1:t)。

  p(xt|y1:t)可以使用贝叶斯公式计算得出,即:

  

  上面的式子中,我们还需要对p(yt|xt)和p(yt|y1:t-1)进行建模。例如,p(yt|xt)可以被看作是候选目标yt与跟踪目标的相似度(即实际值xt与观测值yt的相似度),用一系列的模板来重构yt,然后将其重构误差作为候选目标跟跟踪目标的相似度。

  然而,这是贝叶斯滤波要解决的问题,我们现在想使用的是粒子滤波。

  我们知道p(xt|y1:t)可以描述的是状态xt的分布情况(取什么值,还有取得这个值的概率大小)。同样的,样本也有描述概率分布的能力。若将xt看作是一个随机变量,如果能取得足够多的样本值,那么这些样本完全可以描述xt的分布情况。无非就是取什么值,还有取得这个值的概率大小嘛。样本中,落在该值上的样本越多,那么取得这个值得概率就越大哩,也就是说用频率来表示概率了。

  粒子滤波的思想就是如上所述的使用样本去模拟状态xt的概率分布。啪啪啪,我们根据某个概率分布函数撒一些粒子xti,然后计算这些粒子的权值,该权值表示该粒子是我们想要的状态xt的可能性,即p(xt|y1:t)。粒子撒的越多,模拟结果越精确(毕竟样本越多越能说明真是情况嘛)。

  下面以目标跟踪为例简述一下粒子滤波的算法流程:

  1. 初始化阶段:目标的特征描述,即如何表示跟踪目标(灰度值,颜色特征等等);初始化粒子,可以使用高斯分布或者均匀分布来进行初始化(在Matlab中分别是randn函数和rand函数)。

  2. 对每一个粒子(每个粒子也可以看做是一个候选目标)

    1) 粒子传播xt-1i --> xti

    2) 计算粒子的观测值 xti --> yti

    3) 提取候选目标yti的特征,度量其与跟踪目标的相似度,该相似度作为粒子xti的权值

  3. 粒子重采样

  4. 根据粒子及其权值估计系统状态xt

  说明:

  粒子传播:xt-1表示的是t-1时刻的粒子,这些粒子近似表示了系统状态xt-1的分布函数。而我们现在要估计的是t时刻的状态xt,可以根据状态方程对t-1时刻的粒子进行传播,得到t时刻的粒子xt,用来近似表示t时刻的状态分布。当然,也可以选用其它的方式进行粒子传播,主要思想是使得传播后的粒子更好地近似表示状态xt的概率分布。

  计算粒子的观测值:前面我们使用目标的中心表示该目标在t时刻的状态xt。根据不同的跟踪目标,我们需要根据xt得到不同的观测值。例如,跟踪目标是一个3x3的矩阵,那么我们需要根据xt,取得其局部领域作为观测值yt

  特征提取:我们虽然得到了粒子的观测值yt。但是,我们需要提取更多关于目标的信息,例如灰度值,颜色特征等等。这些信息的目的都是为了更好地描述跟踪目标,为得到更好的跟踪效果而服务。提取了特征之后,我们就可以比较候选目标和跟踪目标的相似度了。而相似度的衡量标准也有很多,这里就不详细说明了。总而言之,相似度越大的候选目标越有可能是我们想要的跟踪结果。因此,我们可以用相似度作为粒子的权值。毕竟相似度越大的粒子,状态xt取得该粒子的可能性也越大嘛。

  粒子重采样:在跟踪过程中,有一些粒子可能偏离目标太远。这些粒子是我们想要的系统状态xt的可能性非常小,因此取得的权值非常小。只是根据粒子传播来改变粒子的状态的话,偏离的粒子永远是偏离的,很难再回到目标周围。这样的话,偏离的粒子可能越积越多。这就是所谓的粒子退化现象。退化了得粒子(权值小)作用就不大了,甚至说根本没用啊!浪费了各种资源,对状态估计又不做贡献。因此我们需要对粒子进行重采样。最简单的方式是剔除掉权值小的粒子(也就是退化了的粒子),然后将权值大的再复制几个呗。多简单粗暴啊,哈哈哈!

  以上便是粒子滤波的目标跟踪流程了!如果还有什么问题,或者我写的不好的地方,欢迎各位看官各种抨击。

从贝叶斯到粒子滤波——Round 2的更多相关文章

  1. 从贝叶斯到粒子滤波——Round 1

    粒子滤波确实是一个挺复杂的东西,从接触粒子滤波到现在半个多月,博主哦勒哇看了N多篇文章,查略了嗨多资料,很多内容都是看了又看,细细斟酌.今日,便在这里验证一下自己的修炼成果,请各位英雄好汉多多指教. ...

  2. (一):细说贝叶斯滤波:Bayes filters

    认知计算,还要从贝叶斯滤波的基本思想讲起,本文主要是对<Probabilistic Robotics>中贝叶斯滤波器部分的详细讲解. 这一部分,我们先回顾贝叶斯公式的数学基础,然后再来介绍 ...

  3. python实现随机森林、逻辑回归和朴素贝叶斯的新闻文本分类

    实现本文的文本数据可以在THUCTC下载也可以自己手动爬虫生成, 本文主要参考:https://blog.csdn.net/hao5335156/article/details/82716923 nb ...

  4. PGM学习之五 贝叶斯网络

    本文的主题是“贝叶斯网络”(Bayesian Network) 贝叶斯网络是一个典型的图模型,它对感兴趣变量(variables of interest)及变量之间的关系(relationships) ...

  5. Machine Learning in Action(3) 朴素贝叶斯算法

    贝叶斯决策一直很有争议,今年是贝叶斯250周年,历经沉浮,今天它的应用又开始逐渐活跃,有兴趣的可以看看斯坦福Brad Efron大师对其的反思,两篇文章:“Bayes'Theorem in the 2 ...

  6. 朴素贝叶斯(Naive Bayesian)

    简介 Naive Bayesian算法 也叫朴素贝叶斯算法(或者称为傻瓜式贝叶斯分类) 朴素(傻瓜):特征条件独立假设 贝叶斯:基于贝叶斯定理 这个算法确实十分朴素(傻瓜),属于监督学习,它是一个常用 ...

  7. SLAM的数学基础(4):先验概率、后验概率、贝叶斯准则

    假设有事件A和事件B,可以同时发生但不是完全同时发生,如以下韦恩图所示: 其中,A∩B表示A和B的并集,即A和B同时发生的概率. 如此,我们很容易得出,在事件B发生的情况下,事件A发生的概率为: 这个 ...

  8. 机器学习实战笔记(Python实现)-03-朴素贝叶斯

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  9. 朴素贝叶斯算法下的情感分析——C#编程实现

    这篇文章做了什么 朴素贝叶斯算法是机器学习中非常重要的分类算法,用途十分广泛,如垃圾邮件处理等.而情感分析(Sentiment Analysis)是自然语言处理(Natural Language Pr ...

随机推荐

  1. WPF 数据绑定 1_1 基础知识&绑定到元素属性

    A.数据绑定基础: 数据源对象:WPF将从该对象中提取信息,交由目标对象进行显示. 目标对象:从数据源中提取信息,并赋给该对象的属性. B.绑定到元素属性 最简单的绑定情形则是将一个源对象指定为一个W ...

  2. 开窗函数使用及sql自行构建枚举数据用于关联

    1, SELECT  * FROM    ( SELECT    ROW_NUMBER() OVER ( PARTITION BY process_instance_id (区分相似数据的字段,逗号分 ...

  3. MySQL中进行模糊搜索的一些问题

    在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符.SQL 通配符必须与 LIKE 运算符一起使用.在 SQL 中,可使用以下通配符:通配符 描述       % 替代一个或多个字符     ...

  4. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十三)台风模块

    config.xml文件的配置如下: <widget label="台风" icon="assets/images/typhoon.png" config ...

  5. Android开发学习——开发调试工具-DDMS应用,ADB进程,Logcat

    DDMS --  Dalvik debug monitor service    调试监控服务 对模拟器进行相关配置. ADB进程   Android debug bridge  建立eclipse和 ...

  6. Android的Message Pool是什么——源码角度分析

    原文地址: http://blog.csdn.net/xplee0576/article/details/46875555 Android中,我们在线程之间通信传递通常采用Android的消息机制,而 ...

  7. Android编码规范02

    同一项目开发过程中需要所有开发人员都有一种风格,做Android项目就要统一遵从Android代码风格: 要想了解Android的代码风格,最好的方式就是查看Android源代码: 下载Android ...

  8. 记CentOS-7-x86_64-DVD-1503与Windows7单硬盘双系统的安装

    我最初的设想是:Win引导CentOS,最后却变成了CentOS引导Win了.算是‘弄拙成巧’了吧. 因为我打算用U盘刻录镜像直接从U盘启动,所以不需要网上一些教程里面的繁琐的win下引导CentOS ...

  9. [MySQL Reference Manual]14 InnoDB存储引擎

    14 InnoDB存储引擎 14 InnoDB存储引擎 14.1 InnoDB说明 14.1.1 InnoDB作为默认存储引擎 14.1.1.1 存储引擎的趋势 14.1.1.2 InnoDB变成默认 ...

  10. 服务器文件上传下载(XShell+Xftp)

    1.下载XShell安装包+Xftp安装包.百度网盘(XShell):https://pan.baidu.com/s/1eR4PFpS 百度网盘(Xftp):https://pan.baidu.com ...