计算机视觉——总结:使用粒子滤波进行目标跟踪
2014-06-25 11:04
465 查看
1. 基本思想
粒子滤波(wiki)本质上是一种表示概率分布的方法,思想和蒙特卡洛方法(wiki)近似。蒙特卡洛方法是用频率来近似概率,而粒子滤波方法中是使用粒子分布的密集程度来近似表示概率分布,这种方法可以形象的表示为向一个带磁力的平面抛洒铁粉,磁力大(概率大)的地方铁粉就比较密集。同样的,如果粒子带权重的话,也可以通过权重的大小来表示概率密度的分布。而后一种带权重的表示方法也被用于粒子滤波跟踪过程中。
而目标跟踪,就是在得到观测(当前帧的图像)之后,对状态(目标的位置)的后验概率的估计。当然,数学原理上是用贝叶斯滤波那一套从头开始推到相当复杂,但是在实际使用的时候,要做各种简化的假设(马尔可夫假设、高斯分布假设等等),最终得到一个比较简单的形式。
2. 基本步骤
一般粒子滤波的步骤简化到最后分为以下三步:
a. 初始化粒子,当前粒子一般权重相等,在目标附近高斯分布
b. 得到新一帧的图像,根据此帧图像,对原来的粒子的权重进行调整,得到一个状态的估计,确定当前目标位置(加权平均,或取权重最大的粒子等)
c. 粒子的演化,回到b
不考虑数学基础(也就是不解决“为什么这样就可以”的问题)的话,其实就是这么简单。
3. 重采样
上述基本的粒子滤波过程有这样一个问题:在粒子演化的过程中,容易出现一个粒子的权重特别大,而其他粒子的权重都特别小,以至于对最终结果都没有影响,这样的话很大一部分的计算量就耗费在了对最终结果没什么影响的粒子上了。这是粒子滤波的一种退化。
解决这一问题的方法有很多,经常用到的就是重采样的方法。
重采样,就是在上述退化现象很严重的时候,重新生成一遍粒子,当然,也可以每一帧图像都重新生成一遍粒子。生成粒子的原则是,以旧粒子的权重为概率生成新粒子,得到新粒子的权重相同。那么,在权重很大的旧粒子附近就会出现很多个新粒子,而在权重较小的旧粒子附近的新粒子就会很少,甚至没有。重采样过后,所有粒子的权重相同,对最终结果的影响也相同,这就解决了粒子滤波的退化问题。
4. 例程
我根据《A color-based particle filter》这篇文章(下载)实现了一个基于颜色直方图特征的粒子滤波跟踪代码。流程是这样的:
a. 确定初始时目标的位置,提取目标的颜色特征,即颜色直方图,8*8*4(H*S*V)
b. 初始化粒子,当前粒子一般权重相等,在目标附近高斯分布
c. 获取新一帧的图像,提取粒子区域的图像特征,即颜色直方图。根据颜色直方图和目标的颜色直方图之间的***距离,确定粒子的权重
d. 根据粒子的权重,以加权平均的方式确定出目标的位置
e. 根据粒子的权重,对粒子进行重采样,回到c
以上步骤中颜色特征可以换成其他图像特征,相应的粒子权重的计算过程也可以进行改变。
具体代码保存在Github,可下载。
转载来自:http://guoyb.com/Tech/32.html
粒子滤波(wiki)本质上是一种表示概率分布的方法,思想和蒙特卡洛方法(wiki)近似。蒙特卡洛方法是用频率来近似概率,而粒子滤波方法中是使用粒子分布的密集程度来近似表示概率分布,这种方法可以形象的表示为向一个带磁力的平面抛洒铁粉,磁力大(概率大)的地方铁粉就比较密集。同样的,如果粒子带权重的话,也可以通过权重的大小来表示概率密度的分布。而后一种带权重的表示方法也被用于粒子滤波跟踪过程中。
而目标跟踪,就是在得到观测(当前帧的图像)之后,对状态(目标的位置)的后验概率的估计。当然,数学原理上是用贝叶斯滤波那一套从头开始推到相当复杂,但是在实际使用的时候,要做各种简化的假设(马尔可夫假设、高斯分布假设等等),最终得到一个比较简单的形式。
2. 基本步骤
一般粒子滤波的步骤简化到最后分为以下三步:
a. 初始化粒子,当前粒子一般权重相等,在目标附近高斯分布
b. 得到新一帧的图像,根据此帧图像,对原来的粒子的权重进行调整,得到一个状态的估计,确定当前目标位置(加权平均,或取权重最大的粒子等)
c. 粒子的演化,回到b
不考虑数学基础(也就是不解决“为什么这样就可以”的问题)的话,其实就是这么简单。
3. 重采样
上述基本的粒子滤波过程有这样一个问题:在粒子演化的过程中,容易出现一个粒子的权重特别大,而其他粒子的权重都特别小,以至于对最终结果都没有影响,这样的话很大一部分的计算量就耗费在了对最终结果没什么影响的粒子上了。这是粒子滤波的一种退化。
解决这一问题的方法有很多,经常用到的就是重采样的方法。
重采样,就是在上述退化现象很严重的时候,重新生成一遍粒子,当然,也可以每一帧图像都重新生成一遍粒子。生成粒子的原则是,以旧粒子的权重为概率生成新粒子,得到新粒子的权重相同。那么,在权重很大的旧粒子附近就会出现很多个新粒子,而在权重较小的旧粒子附近的新粒子就会很少,甚至没有。重采样过后,所有粒子的权重相同,对最终结果的影响也相同,这就解决了粒子滤波的退化问题。
4. 例程
我根据《A color-based particle filter》这篇文章(下载)实现了一个基于颜色直方图特征的粒子滤波跟踪代码。流程是这样的:
a. 确定初始时目标的位置,提取目标的颜色特征,即颜色直方图,8*8*4(H*S*V)
b. 初始化粒子,当前粒子一般权重相等,在目标附近高斯分布
c. 获取新一帧的图像,提取粒子区域的图像特征,即颜色直方图。根据颜色直方图和目标的颜色直方图之间的***距离,确定粒子的权重
d. 根据粒子的权重,以加权平均的方式确定出目标的位置
e. 根据粒子的权重,对粒子进行重采样,回到c
以上步骤中颜色特征可以换成其他图像特征,相应的粒子权重的计算过程也可以进行改变。
具体代码保存在Github,可下载。
转载来自:http://guoyb.com/Tech/32.html
相关文章推荐
- 计算机视觉 | Python OpenCV 3 使用背景减除进行目标检测
- 计算机视觉基础(二)——使用标定出的R和T进行摄像机坐标系定位
- 计算机视觉之目标跟踪——论文Learning to Track at 100 FPS with Deep Regression Networks
- 【计算机视觉】粒子滤波跟踪
- 计算机视觉-论文阅读笔记-基于高性能检测器与表观特征的多目标跟踪
- MATLAB开发计算机视觉——目标检测与跟踪
- 【计算机视觉】基于Kalman滤波器的进行物体的跟踪
- 目标跟踪技术发展情况梳理(Object Tracking)--计算机视觉专题4
- 【计算机视觉】基于Kalman滤波器的进行物体的跟踪
- 论文总结——《基于视觉的目标识别与跟踪综述》(1)
- 计算机视觉中,目前有哪些经典的目标跟踪算法
- 《OpenCV 3计算机视觉:Python语言实现》学习笔记——目标跟踪中基本运动检测的思考
- 【计算机视觉】多目标跟踪代码
- 【计算机视觉】目标检测与跟踪简介1
- 计算机视觉之运动目标跟踪
- 【碎片知识(6)· 计算机视觉基础】基于背景提取的目标跟踪算法
- 使用RfileLogger在真机上通过Log进行事件跟踪
- 使用Ghost32.exe进行点对点计算机克隆
- 使用网络摄像头进行人脸跟踪(网站已恢复和更新)
- Symbian编程总结-图形图像篇-使用双缓存进行图形的绘制