如何实现用于视觉跟踪的粒子滤波器?

时间:2015-09-21 13:09:03

标签: computer-vision robotics particle-filter

所以我只是做了sebsastian thrun关于人工智能的课程。在那里,他提到了如何构建一个粒子过滤器,用于根据标题θ和向前运动跟踪移动的xy机器人。

代码在这里: https://gist.github.com/soulslicer/b4765ee8e01958374d3b

在他的实施中,他做了以下事情:

1. Get Range from Sensor of all bearings after moving R=1, Theta=0.5
2. Move all the particles by R=1, Theta=0.5
3. Compute the weights of all particles ranges against the measured range from sensor
4. Resample and draw new particles

这适用于动作模型很棒。这怎么能用于计算机视觉跟踪?例如,我想跟踪黄色圆形斑点。 我将如何“移动”粒子?我的成本函数可能是什么?特别是移动部分,我不知道我是如何为计算机视觉跟踪做那个步骤

以下是我认为可行的方法,但我可能错了:

1. Get features from image, and compute the optical flow velocities of each feature
2. Place alot of particles in the scene with varying x,y,xvel,yvel
3. For the computation of weights, we can compare the each particle's velocity and position against all features
    If we can threshold out the object based on color/shape, can match image features to shapes and put that in the cost function
4. Resample and draw new particles

1 个答案:

答案 0 :(得分:0)

要使用粒子过滤,您需要:

  • 过渡模型(例如,用于移动机器人的运动模型)和
  • 观察模型(即用于根据传感器读数计算权重的模型)

明确定义空格也很有帮助

  • 观察(例如,传感器读数的范围)
  • 跟踪状态(例如,机器人位置的范围)

现在,基于您的问题描述,我假设目标是根据计算出的最佳流量特征跟踪黄色斑点的位置。然后我会建模

  • 转换是通过仅采样噪声来采样给定先前位置的新位置的函数,例如,假设仅使用+ random.gauss(0.0, self.turn_noise)中的+ random.gauss(0.0, self.forward_noise)def move(self, turn, forward):部分
  • 观察功能可为可能的观察和状态输入对返回高分

我看到的问题是定义观察模型,斑点位置和最佳流量输出之间的似然函数,这并非微不足道/直观的,例如,黄色斑点是否可能位于高光流量输出区域的中心?如果可以,我如何将这种关系表示为似然函数?因此,我会研究使用不同的观察结果,例如使用嘈杂的黄色斑点检测器的输出。

我的答案基于http://www.probabilistic-robotics.org/上的粒子过滤器.ppt文件的第16页。