13

我正在尝试研究如何使用卡尔曼滤波器自己跟踪在视频序列中移动的物体(球),所以请在我还是个孩子的时候向我解释一下。

  • 通过一些算法(颜色分析,光流......),我能够获得每个视频帧的二进制图像,其中有跟踪对象(白色像素)和背景(黑色像素)->我知道对象大小,对象质心,对象位置 -> 只需简单地在对象周围绘制一个边界框 -> 完成。为什么我需要在这里使用卡尔曼滤波器?

  • 好的,有人告诉我,因为我无法在每个视频帧中检测到物体,因为噪声,我需要使用卡尔曼滤波器来估计物体的位置。好的。但据我所知,我需要向卡尔曼滤波器提供输入。它们是先前的状态和测量值。

    • 以前的状态(所以我认为它是前一帧中物体的位置、速度、加速度……)-> 好的,这对我来说很好。
    • 当前状态的测量:这是我无法理解的。测量可以是什么?- 对象在当前帧中的位置?这很有趣,因为如果我知道对象的位置,我只需要在对象周围绘制一个简单的边界框(矩形)。为什么我在这里不再需要卡尔曼滤波器?因此,不可能将物体在当前帧中的位置作为测量值。- “视频监控系统中基于卡尔曼滤波器的跟踪”文章说

      卡尔曼滤波模块的主要作用是为从光流分析模块进入系统的每个测量值分配一个跟踪滤波器。

      如果您阅读全文,您会看到作者将 blob 的最大数量和 blob 的最小大小作为卡尔曼滤波器的输入。这些参数如何用作度量

我想我现在处于一个循环中。我想使用卡尔曼滤波器来跟踪对象的位置,但我需要知道该对象的位置作为卡尔曼滤波器的输入。到底是怎么回事?

还有1个问题,我不明白“卡尔曼滤波器的数量”这个词。在视频序列中,如果有 2 个对象需要跟踪 -> 需要使用 2 个卡尔曼滤波器?是这个意思吗?

4

6 回答 6

22

你不使用卡尔曼滤波器来给你一个初步的估计;您可以使用它根据一系列嘈杂的估计为您提供改进的估计。

为了更容易理解,假设您正在测量非动态的东西,例如成年人的身高。您测量了一次,但不确定结果的准确性,因此连续 10 天再次测量,每次测量都略有不同,例如相隔几毫米。那么,您应该选择哪种测量值作为最佳值?我认为很容易看出,与使用任何单一测量值相比,取平均值可以更好地估计人的真实身高。

好的,但这与卡尔曼滤波器有什么关系?

如上所述,卡尔曼滤波器本质上是对一系列测量值取平均值,但对于动态系统。例如,假设您正在测量马拉松运动员在赛道上的位置,使用由连接到跑步者的 GPS + 发射器单元提供的信息。GPS 每分钟为您提供一次读数。但是这些读数是不准确的,您想提高对跑步者当前位置的了解。您可以通过以下方式执行此操作:

步骤 1) 使用最后几个读数,您可以估计跑步者的速度并估计他在未来的任何时间会在哪里(这是卡尔曼滤波器的预测部分)。

步骤 2) 每当您收到新的 GPS 读数时,对读数和您在步骤 1 中获得的估计值进行加权平均(这是卡尔曼滤波器的 更新部分)。加权平均的结果是一个新的估计,它位于预测位置和测量位置之间,并且比任何一个本身都更准确。

请注意,您必须指定希望卡尔曼滤波器在预测部分使用的模型。在马拉松运动员示例中,您可以使用等速模型。

于 2011-01-20T16:56:28.777 回答
11

卡尔曼滤波器的目的是减轻测量中的噪声和其他不准确之处。在您的情况下,测量值是已从框架中分割出来的对象的 x,y 位置。如果您可以完美地分割出球,并且每帧只从背景中分割出球,则不需要卡尔曼滤波器,因为您的测量实际上不包含噪声。

在大多数应用中,由于多种原因(照明变化、背景变化、其他移动物体等),无法保证完美的测量,因此需要一种过滤测量的方法以产生对真实轨迹的最佳估计.

卡尔曼滤波器所做的是使用模型来预测下一个位置应该假设模型成立,然后将该估计值与您传入的实际测量值进行比较。实际测量值与预测和噪声特性结合使用形成最终的位置估计并更新噪声的特征(测量测量值与模型的差异程度)。

该模型可以是对您尝试跟踪的系统进行建模的任何东西。一个常见的模型是恒速模型,它只是假设物体将继续以与先前估计相同的速度移动。这并不是说该模型不会跟踪速度变化的事物,因为测量值将反映速度的变化并影响估计。

有多种方法可以解决同时跟踪多个对象的问题。最简单的方法是对每个轨道使用独立的卡尔曼滤波器。这就是卡尔曼滤波器真正开始发挥作用的地方,因为如果您使用仅使用边界框质心的简单方法,如果两个对象相互交叉会发生什么?你能在它们分开后再次区分哪个对象是哪个吗?使用卡尔曼滤波器,您拥有模型和预测,有助于在其他物体干扰时保持轨道正确。

还有更高级的方法可以联合跟踪多个对象,例如JPDAF

于 2011-01-20T16:40:32.043 回答
7

Jason 对卡尔曼滤波器是什么有了一个良好的开端。关于您关于论文如何使用最大 blob 数和 blob 最小大小的问题,这正是卡尔曼滤波器的威力。

测量不必是位置、速度或加速度。测量可以是您在某个时间实例中可以观察到的任何量。如果您可以定义一个模型,在给定当前测量值的情况下预测下一次的测量值,卡尔曼滤波器可以帮助您减轻噪声。

我建议您查看有关图像处理和计算机视觉的更多介绍性材料。这些材料几乎总是会覆盖卡尔曼滤波器。

这是关于跟踪器的 SIGGRAPH 课程。它不是介绍性的,但应该让您更深入地了解该主题。 http://www.cs.unc.edu/~tracker/media/pdf/SIGGRAPH2001_CoursePack_08.pdf

于 2011-01-20T16:48:16.363 回答
0

如果您可以在每一帧中准确找到球,则不需要卡尔曼滤波器。仅仅因为您发现一些可能是球的博客,并不意味着该斑点的中心将是完美的球中心。将其视为您的测量错误。此外,如果您碰巧选择了错误的博客,使用卡尔曼滤波器将有助于防止您相信一个错误的测量值。就像你之前说的,如果你在一个框架中找不到球,你也可以使用过滤器来估计它可能在哪里。

以下是您将需要的一些矩阵,我猜想它们会适合您。由于球的 x 和 y 位置是独立的,所以我认为有两个过滤器会更容易,每个过滤器一个。两者看起来都像这样:

x = [位置; velocity] //这是滤波器的输出 P = [1, 0 ; 0 ,1] //这是估计的不确定性,我不太确定你应该从什么开始,但是一旦过滤器运行它就会收敛。F = [ 1,dt ; 0,1] 当您执行 x*F 时,这将预测球的下一个位置。请注意,这假设球以与以前相同的速度移动,并且只是更新位置。Q = [ 0,0 ; 0,vSigma^2] 这是“过程噪声”。这是您调整以使过滤器预成型良好的矩阵之一。在你的系统中,速度可以随时改变,但位置永远不会改变,而速度不会改变它。这令人困惑。该值应该是这些速度变化可能是什么的标准偏差。z = [x 或 y 中的位置] 这是您的测量值 H = [1,0 ; 0, 0]这就是您的测量如何应用于您当前的状态。由于您只是测量位置,因此第一行只有一个 1。R = [?] 我认为您只需要 R 的标量,这是您的测量误差。

使用这些矩阵,您应该能够将它们插入卡尔曼滤波器无处不在的公式中。

一些值得阅读的好东西: 卡尔曼滤波演示 另一个很棒的内容,阅读第三段中链接的页面

于 2015-01-24T02:02:16.807 回答
0

几周前我有这个问题。我希望这个答案可以帮助其他人。

  • 如果你能在每一帧(整个球)上得到很好的分割,你就不需要使用卡尔曼滤波器。但是分割可以给你一组不相连的斑点(只有球的几个部分)。问题是要知道哪些部分(斑点)属于对象或只是噪声。使用卡尔曼滤波器,我们可以将估计位置附近的斑点分配为对象的一部分。例如,如果球的半径为 10 个像素,则距离大于 15 的斑点不应被视为对象的一部分。
  • 卡尔曼滤波器使用先前的状态来预测当前状态。但是,使用当前测量值(当前对象位置)来改进其下一个预测。例如,如果车辆在位置 10(之前的状态)并且以 5 m/s 的速度行驶,卡尔曼滤波器会在位置 15 预测下一个位置。但是如果我们测量物体的位置,我们发现物体是在位置 18。为了改进估计,卡尔曼滤波器将速度更新为 8 m/s。

综上所述,卡尔曼滤波器主要用于解决视频跟踪中的数据关联问题。估计物体位置也很好,因为它考虑了源和观察中的噪声。

对于你最后一个问题,你是对的。它对应于要跟踪的对象数量(每个对象一个卡尔曼滤波器)。

于 2016-02-11T16:33:33.300 回答
-2

在视觉应用中,通常使用每一帧的结果作为测量,例如每帧中球的位置是很好的测量。

于 2011-12-03T09:39:00.130 回答