粒子滤波的理论实在是太美妙了,用一组不同权重的随机状态来逼近复杂的概率密度函数。其再非线性、非高斯系统中具有优良的特性。opencv给出了一个实现,但是没有给出范例,学习过程中发现网络上也找不到。learning opencv一书中有介绍,但距离直接使用还是有些距离。在经过一番坎坷后,终于可以用了,希望对你有帮助。
本文中给出的例子跟 我的另一篇博文是同一个应用例子,都是对二维坐标进行平滑、预测
使用方法:
1.创建并初始化
const int stateNum=4;//状态数
const int measureNum=2;//测量变量数
const int sampleNum=2000;//粒子数
CvConDensation* condens = cvCreateConDensation(stateNum,measureNum,sampleNum);
在不影响性能的情况下,粒子数量越大,系统表现的越稳定
其他初始化内容请参考learning opencv
2.预测
3.更新例子可信度,也就是权重。本例中更新方法与learning opencv中有所不同,想看代码
4.更新CvConDensation
代码:
kalman filter 视频演示:
演示中粒子数分别为100,200,2000
请仔细观测效果
http://v.youku.com/v_show/id_XMjU4MzE0ODgw.html
demo snapshot:
//上面这一篇是演示点跟踪,原文http://blog.csdn.net/onezeros/article/details/6319180