object - 使用卡尔曼滤波器来跟踪物体的位置,但需要知道该物体的位置作为卡尔曼滤波器的输入。到底是怎么回事?

标签 object image-processing video-processing kalman-filter

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

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

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

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

      The main role of the Kalman filtering block is to assign a tracking filter to each of the measurements entering the system from the optical flow analysis block.

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

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

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

最佳答案

你不使用卡尔曼滤波器来给你一些东西的初步估计;您可以使用它根据一系列噪声估计来给出改进的估计

为了让这一点更容易理解,想象一下您正在测量一些非动态的东西,比如成年人的高度。你测量了一次,但你不确定结果的准确性,所以你连续10天再次测量,每次测量都略有不同,比如说相差几毫米。那么您应该选择哪个测量值作为最佳值呢?我认为很容易看出,与使用任何单一测量值相比,取平均值可以让您更好地估计人的真实高度。

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

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

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

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

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

关于object - 使用卡尔曼滤波器来跟踪物体的位置,但需要知道该物体的位置作为卡尔曼滤波器的输入。到底是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4749084/

相关文章:

python - 无法重建分解图像

python - 使用 python 绘制图像

algorithm - tv logo自动查找/定位/检测的建议或方法

c++ - 将临时对象传递给函数

JavaScript 对象函数

javascript - 根据精确值重新排序数组

c - 如何通过scanf为opencv中的cvloadimage提供文件名

c# - 在处理大文件时,通过 Windows 服务运行 ffmpeg.exe 无法完成

video - FFMPEG 选项逐帧输入到输出

php - 检查对象是否存在于数组中