Python Time/Position 列表中的低通滤波器

Python low-pass filter on list of Time/Position

让我先解释一下我的目标和我的问题。 我有一个 物体在一个 bocal(准确地说是一只老鼠)内绕圈 移动,我需要知道它在一分钟内旋转了多少圈。运动不是一个完美的圆圈,可以是 混乱的。它可以停止几秒钟,然后重新开始移动。

但我所知道的是,我每分钟旋转 3 到 20 次 => 低频(在 0.05 赫兹和 0.33 赫兹之间).

我正在用 30 fps 的相机拍摄这个物体 30 分钟。 使用 Python 和 OpenCV,我设法提取 (X,Y) 坐标。由于 30 fps 对于我正在寻找的频率来说有点高,我选择了 15 上的一帧,以便 采样频率为 2 Hz

第一个问题是,有时我漏掉了一点,因为 OpenCV 找不到对象。这是我无法解决的问题,因为我使用 HSV 颜色蒙版跟踪的点有时会被隐藏。

其实我要过滤的数据是:

例如,我有这样的列表:

This is the king of movement I get, as you can see, I need to filter the high frequency.

现在我的问题:即使我有一些过滤和编码方面的基础知识,我也不知道该怎么做,也不知道该使用哪个库。 我读到 scipy 应该具有所有必需的功能,但我不知道该使用哪一个以及如何使用。

我不确定,但我认为我应该这样做:

能否请您告诉我我是否正确,并为我指明编码部分的正确方向?

感谢您的帮助,

马修

在深入研究傅里叶变换之前,您可以只应用一阶或二阶低通滤波器。您可以先对数据进行线性插值,这样您就可以获得恒定的 2Hz 频率。然后您可以对数据点应用一阶低通滤波器。

y_k = a * x_k + (1-a) * y_km1, a in [0,1]

x_k 是您的观察结果,y_k 是您的过滤估计值。

然后,如果第一个原型产生了一些有用的结果,您也许可以使用一些物理模型来获得更好的估算器。卡尔曼滤波器可以更好地利用您的潜在物理现实。但是为此,您首先需要了解如何模拟物理现实。

https://en.wikipedia.org/wiki/Kalman_filter

在这里你也许还可以找到一个更接近计算机视觉跟踪运动的例子: http://www.diss.fu-berlin.de/docs/servlets/MCRFileNodeServlet/FUDOCS_derivate_000000000473/2005_12.pdf