转自:http://blog.csdn.net/sinat_31135199/article/details/55262359

转自:http://www.cnblogs.com/yangyangcv/archive/2010/05/23/1742263.html

一直都觉得粒子滤波是个挺牛的东西,每次试图看文献都被复杂的数学符号搞得看不下去。一个偶然的机会发现了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的思想也是(比如用在最简单的直线拟合上),既然我不知道直线方程是什么,那我就随机的取两个点先算个直线出来,然后再看有多少点符合我的这条直线。哪条直线能获得最多的点的支持,哪条直线就是目标直线。想法非常简单,但效果很好。

对粒子滤波算法的理解 特别通俗易懂相关推荐

  1. 目标跟踪之粒子滤波---Opencv实现粒子滤波算法

    目标跟踪学习笔记_2(particle filter初探1) 目标跟踪学习笔记_3(particle filter初探2) 前面2篇博客已经提到当粒子数增加时会内存报错,后面又仔细查了下程序,是代码方 ...

  2. 目标跟踪-粒子滤波算法

    http://blog.csdn.net/hujingshuang/article/details/45535423 前言: 粒子滤波广泛的应用于目标跟踪,粒子滤波器是一种序列蒙特卡罗滤波方法,其实质 ...

  3. 粒子滤波算法处理非线性噪声,程序简单好用

    粒子滤波算法处理非线性噪声,程序简单好用 4115632794284179嘟嘟--囔囔

  4. 自己对粒子群算法的理解(附matlab直接运行代码)(二维)

    首先声明,作者为准大二学生,由于一些特殊原因被某研究生老师拉近了一个研究组,为了更好地记忆和复习,所以写了一下内容,如有错误,希望提出,直接骂我都可以. 现在开始正文,首先老样子,介绍一下粒子群算法的 ...

  5. 对无迹卡尔曼滤波(UKF)和粒子滤波(PF)的理解

    对无迹卡尔曼滤波(UKF)的总结: EKF通过在工作点附近进行一阶泰勒展开来线性化非线性的运动方程和观测方程.这样的线性近似在高度非线性的情况下存在较大误差.而UKF换了一个线性化的思路.1)选取2n ...

  6. 目标跟踪:相关滤波算法MOSSE理解与python实现

    论文地址:http://static.tongtianta.site/paper_pdf/5289ac92-dfd9-11e8-8368-00163e08bb86.pdf 在学习该算法的过程中我搜索了 ...

  7. 粒子滤波算法(Matlab代码实现)

  8. 非线性非高斯模型的改进粒子滤波算法(Matlab代码实现)

  9. 改进的粒子滤波算法及其应用研究(Matlab代码实现)

  10. 视频跟踪算法之粒子滤波

    1. 写在前面 最近在看视频跟踪方面的一些硕博士毕业论文,几乎看到的每一篇都会涉及到粒子滤波算法,所以这段时间花了很多时间在看相关的内容. 浏览了大量的博客和文章,跟着不停推导公式,感觉还是无法完全掌 ...

最新文章

  1. linux存储--页面置换算法(十一)
  2. 城市规划理论II 通勤与移居
  3. Blender 2.42
  4. Boost:简单的双图bimap的测试程序
  5. python根据BM25实现文本检索
  6. java thread 几个状态_Java-Thread 线程的几种状态
  7. 和平精英有电脑版吗_和平精英华晨宇代言版-和平精英华晨宇代言版下载v1.9.10...
  8. 什么是动态链接库(DLL)以及常见问题
  9. 趣味俄罗斯方块——C语言
  10. jpg怎么转换成png?
  11. 基于web的实验室设备管理系统
  12. LeetCode13-罗马数字转整数
  13. android使用Vitamio实现视频播放大小屏流畅切换
  14. 【自动驾驶】高级驾驶辅助系统(ADAS)
  15. 零钱兑换(完全背包)
  16. c++ 箭头符号怎么打_C++编程基础知识二
  17. C语言之struct
  18. VS2019_Windows桌面应用程序_01
  19. 335x系列平台-usb的模式切换HOST和OTG
  20. 六十四、Kylin的初体验

热门文章

  1. 勒索病毒免费解密工具都在这里!
  2. win11开机动画关闭教程
  3. Android手机截图命令screencap
  4. 14.2 movielens
  5. 虚拟机器人(巡线竞速)
  6. oracle pmon 多长时间,oracle 11g pmon工作内容系列一
  7. 控制数学问题的MATLAB求解,控制数学问题的MATLAB求解.pdf
  8. 微信小程序调查问卷避坑
  9. pdf怎么解除限制?如何解密?一步解决
  10. 数据库(MySQL)基础快速入门!