基本粒子滤波器

pfilter的Python项目详细描述


p过滤器

基本的python粒子过滤器。写得简单明了;不一定是最有效或最灵活的实现方式。仅依赖于NumPy

安装

可通过PYPI获得:

pip install pfilter

或者安装git版本:

pip install git+https://github.com/johnhw/pfilter.git

用法

创建一个ParticleFilter对象,然后使用观察数组调用update(observation)来更新粒子过滤器的状态。

您至少需要指定:

  • 一个观察函数observe_fn(state) => observation matrix,它将返回内部状态的预测观察。
  • 从所有内部状态变量的初始分布prior_fn=>(n,d) state matrix中采样的函数。这些通常是来自scipy.stats的分布效用函数independent_sample使连接采样函数以采样整个状态向量变得容易。
  • 一个weight函数,指定每个hyp_observed数组与实际观测值匹配的程度这必须产生严格的正权重值,其中较大的意味着更相似

通常,您还可以指定:

  • adynamics_fn根据内部(预测)动态更新状态,a
  • noise_fn将扩散添加到采样过程中

例如,假设有一个函数blob,它在某个大小(与观察值大小相同)的图像上绘制一个blob:

frompfilterimportParticleFilter,gaussian_noise,squared_error,independent_samplecolumns=["x","y","radius","dx","dy"]fromscipy.statsimportnorm,gamma,uniform# prior sampling function for each variable# (assumes x and y are coordinates in the range 0-32)    prior_fn=independent_sample([uniform(loc=0,scale=32).rvs,uniform(loc=0,scale=32).rvs,gamma(a=2,loc=0,scale=10).rvs,norm(loc=0,scale=0.5).rvs,norm(loc=0,scale=0.5).rvs])# very simple linear dynamics: x += dxdefvelocity(x):xp=np.array(x)xp[0:2]+=xp[3:5]returnxp# create the filterpf=pfilter.ParticleFilter(prior_fn=prior_fn,observe_fn=blob,n_particles=200,dynamics_fn=velocity,noise_fn=lambdax:gaussian_noise(x,sigmas=[0.2,0.2,0.1,0.05,0.05]),weight_fn=lambdax,y:squared_error(x,y,sigma=2),resample_proportion=0.1,column_names=columns)# assuming image of the same dimensions/type as blob will producepf.update(image)

有关使用skimageOpenCV跟踪移动白色圆圈的工作示例,请参见笔记本examples/test_filter.py

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么在ng构建之后使用404?   java Maven原型“quickstart”无法扩展其POM   java Arduino端口卡在满功率状态   java如何确保在参数化构造函数失败时不调用默认构造函数?   java检测Blackberry中的切换失败   java如何将安卓库(作为Angle)链接到Eclipse项目?   java压缩图片,但获取“未知压缩方法”   java无法对应该初始化的模拟实例进行测试   将现有eclipse项目导出到war文件时,java“模块名无效”   java如何防止AppletClassLoader在查找类/其他资源时击中服务器?   java正则表达式根据分隔组的分隔符的数量获取n个组   java在JLayeredPane后面与JPanel交互   Java中的xml Soap请求   webView中的java utf8代码页