c++ - 单个多对象卡尔曼滤波器与多个单对象卡尔曼滤波器(复数)

标签 c++ opencv time-complexity kalman-filter

Gidday cobbers/尊敬的同事,

通过实现卡尔曼预测/校正的多对象跟踪,我在其他 SO 线程中看到建议的一般方法是简单地为每个对象提供一个卡尔曼滤波器的 vector/数组。

即“多单对象卡尔曼滤波器”

但是知道如果你正确地定义了你的状态空间矩阵,彼此独立的状态将保持不变,所以一旦任何(连贯的)数学被说出来并完成 - 为什么我们不只是增加各种状态和相关的矩阵/包含所有对象“数据”的滤波器中涉及的 vector 并使用一个卡尔曼滤波器? (是的,大多数矩阵中都会有很多零)。

无论哪种方式都有算法复杂性优势吗?我的直觉是,使用一个过滤器与使用多个过滤器可能会减少开销?

也许在处理多个过滤器时,在人类可读性方面更容易管理?

还有其他原因吗?

谢谢

附:最终代码将采用 openCV/C++ 格式

最佳答案

如果通过增强你的意思是将所有对象的状态(均值和协方差)组合成一个 super 状态,然后使用单个过滤器来预测/估计这个 super 状态,那么我担心你对此的直觉提高效率很可能是错误的。

您需要考虑到 KF 方程涉及矩阵求逆等运算,计算复杂度为 O(n^3)(或非常接近该数字),其中 n 是矩阵的维数。如果将多个对象聚合为一个状态,计算复杂度将会飙升,即使如您所说大部分都是零。

在我看来,处理多个过滤器(每个跟踪对象一个)从设计角度来看既更干净,也是一种更有效的方法。如果您确实受到 KF 性能瓶颈(首先分析),请考虑在连续数组中分配卡尔曼滤波器数据,以最大限度地减少缓存未命中。

关于c++ - 单个多对象卡尔曼滤波器与多个单对象卡尔曼滤波器(复数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28541106/

相关文章:

c++ - 从具有基类函数的派生类打印

c++ - MS Visual Studio 2010 Professional Project Designer 没有出现?

opencv - OPEN_CV ERROR 没有足够的值来解包(预期为 3,实际为 2)

algorithm - 通过归纳关系证明

c - GCD代码的时间复杂度

algorithm - 如果 n > 3,求关系 T (n) =T (n-1)+T(n-2)+T(n-3) 的时间复杂度

c++ - 如何将 qprocess 带到前面?

c++ - 在 C++ 中运行 CMD 行使用变量(不是字符串文字)作为参数

opencv - 深度 CNN 不会学习,准确率只是保持在相同值

python - 使用 OpenCV 进行 RaspiCam 鱼眼校准