Particle Filter粒子滤波,其本质是大数定律。其通过从后验概率中抽取的随机状态粒子来表示其分布情况,是一种顺序重要性采样法(Sequential Importance Sampling)。
最开始对粒子滤波没有认识的人,推荐看http://www.cnblogs.com/yangyangcv/archive/2010/05/23/1742263.html,这篇文章写的形象生动,让算法脱离了枯燥乏味。
1. 跟踪特征选取
跟踪目标的选择可用户自己选取设定,亦可通过目标检测的方法来确定待跟踪的目标(目标位置,目标大小等信息为已经)。提取待跟踪目标的某特征,作为跟踪的依据。在MeanShift和Particle Filter中Hue histogram通常作为特征向量被选取。
2. 初始化粒子
粒子滤波的本质就是选择大量的粒子去探测待跟踪目标的位置。选择N个粒子,并初始化粒子的位置(可选择均匀分布,或以物体为中心的高斯分布方式放出粒子)。
3. 粒子更新(粒子权值计算&重采样)
计算粒子特征向量和待跟踪物体的特征向量的相似度,给出该粒子的权值。得到N个粒子的权值后按大小进行排序,设定权值阈值,将小于阈值的粒子舍弃,在权值较大的粒子处或其周围再补充粒子,使粒子总数达到N。
4. 期望值获取
采用N个粒子的位置期望值作为跟踪结果(在别人博客中有看到一种做法是采用权值最高的粒子位置作为跟踪位置,似乎准确率更好)。
如此反复上述3-4过程,即可完成粒子跟踪。
疑问:OpenCV中有关于粒子滤波的代码实现,路径为opencv\modules\legacy\src\condens.cpp, 粒子transform martix如何确定?这个是和粒子分布有关,如何联系到一起呢?