一直都觉得粒子滤波是个挺牛的东西,每次试图看文献都被复杂的数学符号搞得看不下去。一个偶然的机会发现了Rob Hess(http://web.engr.oregonstate.edu/~hess/)实现的这个粒子滤波。从代码入手,一下子就明白了粒子滤波的原理。根据维基百科上对粒子滤波的介绍(http://en.wikipedia.org/wiki/Particle_filter),粒子滤波其实有很多变种,Rob Hess实现的这种应该是最基本的一种,Sampling Importance Resampling (SIR),根据重要性重采样。下面是我对粒子滤波实现物体跟踪的算法原理的粗浅理解:

1)初始化阶段-提取跟踪目标特征

该阶段要人工指定跟踪目标,程序计算跟踪目标的特征,比如可以采用目标的颜色特征。具体到Rob Hess的代码,开始时需要人工用鼠标拖动出一个跟踪区域,然后程序自动计算该区域色调(Hue)空间的直方图,即为目标的特征。直方图可以用一个向量来表示,所以目标特征就是一个N*1的向量V。

2)搜索阶段-放狗

好,我们已经掌握了目标的特征,下面放出很多条狗,去搜索目标对象,这里的狗就是粒子particle。狗有很多种放法。比如,a)均匀的放:即在整个图像平面均匀的撒粒子(uniform distribution);b)在上一帧得到的目标附近按照高斯分布来放,可以理解成,靠近目标的地方多放,远离目标的地方少放。Rob Hess的代码用的是后一种方法。狗放出去后,每条狗怎么搜索目标呢?就是按照初始化阶段得到的目标特征(色调直方图,向量V)。每条狗计算它所处的位置处图像的颜色特征,得到一个色调直方图,向量Vi,计算该直方图与目标直方图的相似性。相似性有多种度量,最简单的一种是计算sum(abs(Vi-V)).每条狗算出相似度后再做一次归一化,使得所有的狗得到的相似度加起来等于1.

3)决策阶段

我们放出去的一条条聪明的狗向我们发回报告,“一号狗处图像与目标的相似度是0.3”,“二号狗处图像与目标的相似度是0.02”,“三号狗处图像与目标的相似度是0.0003”,“N号狗处图像与目标的相似度是0.013”...那么目标究竟最可能在哪里呢?我们做次加权平均吧。设N号狗的图像像素坐标是(Xn,Yn),它报告的相似度是Wn,于是目标最可能的像素坐标X = sum(Xn*Wn),Y = sum(Yn*Wn).

4)重采样阶段Resampling

既然我们是在做目标跟踪,一般说来,目标是跑来跑去乱动的。在新的一帧图像里,目标可能在哪里呢?还是让我们放狗搜索吧。但现在应该怎样放狗呢?让我们重温下狗狗们的报告吧。“一号狗处图像与目标的相似度是0.3”,“二号狗处图像与目标的相似度是0.02”,“三号狗处图像与目标的相似度是0.0003”,“N号狗处图像与目标的相似度是0.013”...综合所有狗的报告,一号狗处的相似度最高,三号狗处的相似度最低,于是我们要重新分布警力,正所谓好钢用在刀刃上,我们在相似度最高的狗那里放更多条狗,在相似度最低的狗那里少放狗,甚至把原来那条狗也撤回来。这就是Sampling Importance Resampling,根据重要性重采样(更具重要性重新放狗)。

(2)->(3)->(4)->(2)如是反复循环,即完成了目标的动态跟踪。

根据我的粗浅理解,粒子滤波的核心思想是随机采样+重要性重采样。既然我不知道目标在哪里,那我就随机的撒粒子吧。撒完粒子后,根据特征相似度计算每个粒子的重要性,然后在重要的地方多撒粒子,不重要的地方少撒粒子。所以说粒子滤波较之蒙特卡洛滤波,计算量较小。这个思想和RANSAC算法真是不谋而合。RANSAC的思想也是(比如用在最简单的直线拟合上),既然我不知道直线方程是什么,那我就随机的取两个点先算个直线出来,然后再看有多少点符合我的这条直线。哪条直线能获得最多的点的支持,哪条直线就是目标直线。想法非常简单,但效果很好。

原文:http://www.cnblogs.com/yangyangcv/archive/2010/05/23/1742263.html

2018-8-22-粒子滤波相关推荐

  1. 粒子滤波实现物体跟踪

    转自http://www.cnblogs.com/cfantaisie/archive/2011/06/16/2082267.html 粒子滤波实现物体跟踪的算法原理: 1)初始化阶段-提取跟踪目标特 ...

  2. 机器人学习--粒子滤波定位-MATLAB仿真1

    坐标系下,给定几个路标 landmarks,机器人行走路线是一个圆,60秒的行走时间,每秒更新一次结果,MATLAB仿真运动更新过程,以及结果的误差图显示. 代码: function [] = par ...

  3. 卡尔曼滤波、扩展卡尔曼滤波、无迹卡尔曼滤波以及粒子滤波原理

    所有滤波问题其实都是求感兴趣的状态的后验概率分布,只是由于针对特定条件的不同,可通过求解递推贝叶斯公式获得后验概率的解析解(KF.EKF.UKF),也可通过大数统计平均求期望的方法来获得后验概率(PF ...

  4. 粒子滤波(particle filtering)梳理

    本文根据MLaPP第23章,从importance sampling开始梳理,直至导出粒子滤波,并给出相应的范例程序.rejection sampling太简单,就不介绍了. 1. Importanc ...

  5. 无人驾驶8: 粒子滤波定位(优达学城项目)

    优达学城无人车定位的项目实现: 粒子滤波算法流程图 粒子滤波的伪代码: step1:初始化 理论上说,当粒子数量足够多时,能准确地呈现贝叶斯后验分布,如果粒子太少,可能漏掉准确位置,粒子数量太多,会拖 ...

  6. Particle Filter Tutorial 粒子滤波:从推导到应用

    转载自作者白巧克力亦唯心的文章:粒子滤波 文章目录 1.贝叶斯滤波 2.蒙特卡洛采样 3.重要性采样 4.SIS Filter(Sequential Importance Sampling) 5.重采 ...

  7. 【SLAM基础入门】贝叶斯滤波、卡尔曼滤波、粒子滤波笔记(2)

    基于B站老王的贝叶斯滤波.卡尔曼滤波.粒子滤波 Bilibili 文章目录 第三部分:随机过程的贝叶斯滤波BF 第四部分:卡尔曼滤波KF 第三部分:随机过程的贝叶斯滤波BF 随机过程包含一系列随机变量 ...

  8. 粒子滤波和蒙特卡洛定位

    算法主要过程如下: 1.根据观测更新粒子权重 2.根据权重resample,也就是根据权重更新所有粒子位置,并使得所有粒子权重恢复到一样. 3.利用一个模型让所有粒子随着robot的移动而移动. 无公 ...

  9. 【SLAM基础入门】贝叶斯滤波、卡尔曼滤波、粒子滤波笔记(1)

    贝叶斯滤波.卡尔曼滤波.粒子滤波 (https://www.bilibili.com/video/BV1HT4y1577g?spm_id_from=333.999.header_right.histo ...

  10. 蒙特卡洛粒子滤波定位算法_粒子滤波——来自哈佛的详细的粒子滤波器教程【1】...

    本文原版链接:https://www.seas.harvard.edu/courses/cs281/papers/doucet-johansen.pdf 本文是哈佛大学相关研究人员于2008年发表的一 ...

最新文章

  1. ext2文件系统 - mke2fs
  2. Mybatis中的jdbcType的作用
  3. 风影ASP.NET基础教学 3 web服务器控件(二)
  4. 电机编码器调零步骤_BLDC电机换向方法解析
  5. ISCC2014-reverse
  6. c语言中三种常用的循环控制结构是,三C语言的基本控制结构.ppt
  7. 手机扫描到WiFi时,WiFi站点知道吗?
  8. 在集合点的同步 CyclicBarrier
  9. 免费python网络课程-2019年10种免费的Python学习课程
  10. 体验VisualStudio 2013中的内存分析功能
  11. python 二分查找法
  12. 软件设计原则(七) 迪米特法则
  13. 十大电子元器件及其相关基础知识
  14. 诺基亚n1平板电脑刷机教程_诺基亚n1平板电脑刷机教程_诺基亚N1 完整包线刷升级或救砖教程(不分台版;国行)......
  15. 手机app通用模板蓝色系用户登录页面
  16. S5P4418裸机开发(五):时钟
  17. C盘清理(主要的大文件清理)
  18. fanuc换刀宏程序详解_FANUC宏程序大全+实例讲解
  19. WaWa的奇妙冒险(第一周集训自闭现场)
  20. 分辨率、像素、密度和屏幕尺寸的关系(换算)

热门文章

  1. c++ 动态分配数组_C与C++内存管理避坑指南
  2. mac搭建python开发环境_Mac中基于Homebrew搭建python开发环境
  3. vmware让虚拟机内外网络可互访
  4. 软件包管理 之 Linux软件安装之RPM的安装技巧
  5. C# 调用C++ dll 返回char*调用方式(StringBuilder乱码)
  6. Load和Initialize往死了问是一种怎样的体验?
  7. TNS-12518 Linux Error:32:Broken pipe
  8. CentOS7 network
  9. 2014 百度之星题解 1002 - Disk Schedule
  10. linux 编程笔记1 crusher for linux