通过阅读一些论文,我在c++上实现了一个bootstrap Particle filter,我首先实现了一个1D鼠标跟踪器,它的表现非常好。我在这次考试中使用正态高斯加权。
我将算法扩展到使用Local motion和HSV 32 bin Histogram两个特征来跟踪人脸。在这个例子中,我的权重函数变成了运动概率x直方图概率。(这是正确的吗?)
如果这是正确的,那么我对重新采样函数感到困惑。现在我的重采样函数如下:
对于每个粒子N = 50;
计算提供生成一个随机数(通过高斯)X更新索引X处的粒子对所有N个粒子重复此步骤。这是我现在的重采样函数。注意:第二步,我通过高斯分布使用随机数来获得索引,而我的加权函数是运动概率和直方图。
我的问题是:我应该使用运动和直方图的概率生成随机数,还是通过高斯生成随机数就可以了。
在SIR(顺序重要性重采样)粒子滤波器中,重采样旨在复制权重较高的粒子,同时去除权重较低的粒子。
因此,当你对粒子进行加权时(通常是使用可能性),重新采样的一种方法是创建权重的累积分布,然后生成一个随机数,遵循均匀分布,并选择与CDF槽对应的粒子。这样就有更大的概率选择一个质量更大的粒子。
此外,不要忘记在生成粒子副本后添加一些噪声,否则您的点估计可能会在一段时间内产生偏差。