问题标签 [particle-filter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7442 浏览

matlab - 粒子滤波-Matlab

我已经实现了粒子过滤器如下:

系统型号:

其中 V, omega 分别是速度和角速度。此外,观察结果包括距框左上角距离的噪声版本。

但是,我不确定我的代码是否正确。(粒子之间的距离正在增加),任何人都可以帮助我吗?

第二:我想在matlab中显示我想要跟踪的对象,但是我尝试了不同的方法,仍然不成功。你能帮我解决这部分的问题吗?

0 投票
2 回答
19132 浏览

c++ - 顺序蒙特卡罗方法的实现(粒子过滤器)

我对这里给出的粒子过滤器的简单算法感兴趣:http ://www.aiqus.com/upfiles/PFAlgo.png看起来很简单,但我不知道如何实际操作。关于如何实现它的任何想法(只是为了更好地理解它是如何工作的)?

编辑: 这是一个很好的简单示例,解释了它是如何工作的:http ://www.aiqus.com/questions/39942/very-simple-particle-filters-algorithm-sequential-monte-carlo-method-implementation?page= 1#39950

我尝试在 C++ 中实现它:http: //pastebin.com/M1q1HcN4但我确定我是否以正确的方式进行操作。你能检查一下我是否理解得很好,还是根据我的代码有一些误解?

0 投票
1 回答
836 浏览

algorithm - 粒子滤波算法应该如何初始化样本和权重?

我应该使用冷凝算法来跟踪视频中移动的对象。对象的初始位置(例如边界框中心的坐标)和大小(边界框的宽度和高度)是已知的。

对象在笛卡尔平面上的位置和大小就是它的状态。给定对象的位置和大小的初始值,我应该如何初始化样本?另外,我应该如何初始化权重?

0 投票
1 回答
209 浏览

algorithm - 如何在粒子滤波算法中确定性地选择基础样本?

粒子滤波算法因其用于跟踪视频序列中的对象而闻名:在每次迭代中,该算法都会生成关于对象运动的假设(或样本)。为了生成新假设,缩合算法的第一步涉及样本的选择:此网页中提供的示例显示了选择步骤的实现,该步骤使用二分搜索来选择一个碱基样本; 支持该pick_base_sample()功能的评论解释说

使用此例程使冷凝 O(NlogN),其中 N 是样本数。确定性地选择基础样本可能会更好,因为那时算法是 O(N) 并且可能稍微更有效,但是为了概念上的简单性并且因为它更好地映射到已发表的文献,这个例程被保留在这里。

确定性地选择基础样本意味着什么?如何确定性地选择基础样本?

0 投票
2 回答
6024 浏览

c++ - 如何使用 OpenCV 中可用的压缩算法?

我需要使用压缩算法和 OpenCV 库来实现一个软件来跟踪图像流中的移动对象。我读过 OpenCV 包含该算法的实现,但我没有找到解释如何使用 OpenCV 中可用的相应功能的示例或教程。

cvCreateConDensation函数分配CvConDensation结构并需要状态向量的维度 ( dynam_params)、测量向量的维度 ( measure_params) 和样本数 ( sample_count)。

  • 状态向量的维度应该是指物体的状态:例如,如果状态可以是被跟踪物体的中心点,那么状态向量应该包含物体中心的两个坐标,所以在这种情况下,状态向量应该是 2;以类似的方式,如果一个对象的状态是由属于其形状的S个点形成的,那么我将指定2*S作为dynam_params值(即坐标数等于2*S)。它是否正确?
  • 样本数是粒子数,因此sample_count必须将参数设置为用于跟踪对象的粒子数。
  • 测量向量的维数如何?参数的目的是measure_params什么?

cvConDensInitSampleSet函数为浓缩算法初始化样本集。哪个规则用于初始化样本集?哪个分布用于初始化样本集?给定待跟踪物体的起始位置和边界框,这个函数如何初始化样本集?

执行算法的完整交互(选择预测测量)的函数是什么?样本如何更新?

是否有任何教程详细解释了如何使用 OpenCV 中可用的功能?

0 投票
1 回答
1205 浏览

c++ - 如何正确设置随机数生成器?

为了开发粒子滤波器算法的实现,我需要生成与要跟踪的对象相关的运动的假设:如果我设置N个样本并且如果我使用2×1状态向量,那么在每一步我必须生成N对随机值(一个2×N矩阵)。此外,如果我知道运动的统计数据(平均值和标准偏差),那么我可以使用平均值和标准偏差来生成所有 N 值。最后,为了模拟运动的不确定性,我可以生成一个噪声矩阵(一个2×N矩阵)并将其添加到运动矩阵中。

基于这些前提,我实现了在 matlab 中运行的算法,并使用以下代码来生成运动假设。

当我不得不使用 C++ 和 OpenCV 实现相同的算法时出现了一个问题:基本上,虽然上面的 matlab 代码产生了很好的预测(它工作得很好),但用 C++ 编写的相同代码(见下面的代码)产生了很差的预测(即远离物体)。为什么?

如何确保 C++ 算法和 matlab 中实现的算法一样有效?

0 投票
3 回答
4867 浏览

opencv - OpenCV-2.4.3的粒子过滤器?

我在 c 中使用 opencv-2.4.3,我被人脸跟踪部分卡住了,我想使用粒子过滤器进行跟踪,我在 opencv-2.1 版本中得到了它,但是新的 opencv 版本似乎没有这个过滤器或者可能是名称将有所不同,有没有人使用过 opencv-2.4.3 并且可以告诉我如何在 opencv-2.4.3 中使用粒子(冷凝)过滤器

0 投票
0 回答
268 浏览

mobile-robots - 使用粒子滤波器进行局部定位

我正在使用声纳、粒子滤波器进行局部定位(即所有粒子最初都具有机器人姿势)。

我有环境的抓地图。当我在环境中执行算法(门关闭/打开)时,粒子无法跟随机器人。

我没有随机粒子,因为我完全知道机器人的初始位置。

添加随机粒子会改变机器人的姿态(我发现粒子的中位数作为机器人的姿态)。

如何提高本地化的任何想法/方法。

谢谢你。

更新 :

在这里,我使用嘈杂的运动模型,然后使用传感器模型和重新采样以将它们收敛到机器人姿势。我的问题是当地图环境发生变化时如何优化它(主要是房间内的门打开/关闭和杂乱)

0 投票
4 回答
16738 浏览

opencv - 用于多目标跟踪的粒子滤波器

我在跟踪计算机视觉中的人。我有观察结果(斑点作为背景减法后斑点检测的输出),我想推断产生这些观察结果的对象。

我对一些卡尔曼滤波器代码感到困扰。我很清楚,但我的问题是多对象跟踪:我的问题是有时观察结果不完整/嘈杂。让我更好地解释一下 - 在一个有明确观察的测试中,我为每个人准备了 1 个 blob。卡尔曼滤波器可以帮助我将人的嘈杂路径平滑成平滑曲线。但是,这不是我的问题;问题是有时 blob 检测并不完美,我有 1 个人的 2 个 blob(例如,如果我要跟踪的人穿着背景颜色相同的 T 恤),或者有时我有 2 个 blob人(例如,如果 2 个人拥抱自己或彼此靠得太近)。

我搜索了一些理论,发现很多论文都在用粒子滤波器解决目标跟踪问题。所以我研究了贝叶斯滤波器,蒙特卡洛方法,重要性采样,它有点清楚(我没有关于概率的数学知识来理解一切,但想法很清楚)。

无论如何,我仍然不明白粒子过滤器如何帮助我检测 2 个 blob 对应于 1 个对象或 1 个 blob 对应于 2 个对象的情况。

有人可以帮助理解这个问题吗?

0 投票
1 回答
1798 浏览

algorithm - 使用具有不同采样率的多个传感器的粒子过滤器

现在的情况:

我已经为室内定位系统实现了一个粒子过滤器。它使用磁场的指纹。粒子过滤器的实现非常简单:

  1. 我创建了均匀分布在整个区域的所有粒子
  2. 每个粒子都有一个速度(高斯分布,“正常”步行速度的平均值)和一个方向(均匀分布在所有方向上)
  3. 改变速度和方向(均为高斯分布)
  4. 在给定方向上移动所有粒子的速度乘以上一次和当前测量的时间差
  5. 找到每个粒子最近的指纹
  6. 通过比较最接近的指纹和给定的测量值来计算每个粒子的新权重
  7. 标准化
  8. 重采样
  9. 每次测量重复 #3 到 #9

问题:

现在我想做基本相同的事情,但在系统中添加另一个传感器(即 WiFi 测量)。如果测量值同时出现,就不会有问题。然后我只计算第一个传感器的概率并将其乘以第二个传感器的概率,得到我在#6 处的粒子重量。

但磁场传感器的采样率非常高(约 100 Hz),WiFi 测量值大约每秒出现一次。

我不知道处理这个问题的最佳方法是什么。

可能的解决方案:

  1. 我可以丢弃(或平均)所有磁场测量值,直到出现 WiFi 测量值,然后将最后一次磁场测量值(或平均值)和 WiFi 信号一起使用。所以基本上我将磁场传感器的采样率降低到 WiFi 传感器的采样率
  2. 对于每次磁场测量,我使用最后一次看到的 WiFi 测量
  3. 我使用分离的传感器。这意味着如果我测量一个传感器,我会执行所有步骤 #3 到 #9,而不使用另一个传感器的任何测量数据
  4. 我没有考虑过的任何其他解决方案;)

我不确定哪个是最好的解决方案。所有的解决方案似乎都不是很好。

对于#1,我会说我正在丢失信息。虽然我不确定为粒子滤波器使用大约 100 Hz 的采样率是否有意义。

在#2,我必须假设 WiFi 信号不会很快出现,这是我无法证明的。

如果我单独使用传感器,则磁场测量变得比 WiFi 测量更重要,因为所有步骤都将使用磁性数据发生 100 次,直到出现一次 WiFi 测量。

你知道处理这个问题的好论文吗?

是否已经有一个标准解决方案来处理粒子过滤器中具有不同样本大小的多个传感器?

100 Hz 的样本大小有意义吗?或者粒子过滤器的一个步骤的适当时间差是多少?

非常感谢您提供任何提示或解决方案:)