首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >视频帧的卡尔曼滤波跟踪与预测

视频帧的卡尔曼滤波跟踪与预测
EN

Stack Overflow用户
提问于 2014-07-05 17:09:19
回答 3查看 1.3K关注 0票数 3

我是卡尔曼滤波的新手,但是用MATLAB可以应用卡尔曼滤波来预测和跟踪视频帧中的目标吗?

进一步的信息:我有一组连续的20张子弹从枪里射出来的图像(一张照片的爆发)。我在画面上做了一些图像处理,现在我可以把子弹作为一个点。我能预测子弹在第21帧中的位置吗?

注:我已经知道了,我需要循环图像帧,并制作一个视频,然后把它用于卡尔曼滤波预测。但是,在不把帧变成视频的情况下,做预测是可能的吗?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-06 06:09:04

如果你已经应用卡尔曼滤波开始的20帧,那么你将理解以下的答案。

如果你没有21帧的话。

然后是X(t+1) = A*X(t)+B(u)+Noise

这是“预测”语句,您可以在第21帧预测值。A=状态,atrix,B=控制矩阵。X(t) =子弹在卡尔曼滤波器分配的第20帧中的位置。

如果您没有第21帧,那么您可以使用上面的值来显示21帧中的项目。这是卡尔曼滤波的主要特点之一,即使你没有观测值,也可以预测下一帧的值,这是一个很常见的实际情况,因为大多数时候传感器不选择物体,也没有观测值。

如果你得到了第21帧,然后取观察值并更新你的预测。

我建议查看youtube上的学生戴夫教程,看看卡尔曼滤波和跟踪。然后转到udacity 链接上的Udacity课程。

对于您的问题,kalman滤波函数应该是

代码语言:javascript
复制
    void Kalman_Filter(float *Zx, float *Zy)
{

    Mat Zt = (Mat_<float>(2, 1) << *Zx, *Zy);

    //prediction
    Predict = A*Prior;// +B*a;

    //covariacne
    P = P*P*A.t() + Ex;

    //measurement uopdate
    Mat Kt = P*H.t()*(H*P*H.t() + Ez);
    //
    Prior = Predict + Kt*(Zt - H*Predict);
    //
    P = (I - Kt*H)*P;
    //
    *Zx = Prior.at<float>(0, 0);
    *Zy = Prior.at<float>(1, 0);
    //
    return;

}

这里*Zx和*Zy是观察值,包含点大小子弹的x和y位置,您已经找到了。

票数 2
EN

Stack Overflow用户

发布于 2014-07-05 17:57:18

“计算机视觉系统Tooblox”实现了卡尔曼滤波器vision.KalmanFilter

文档中有一个演示,显示了这一点的实际操作:

基于卡尔曼滤波的目标跟踪

请注意,框架来自何处并不重要(可以是图像序列,也可以是实际视频)。

票数 1
EN

Stack Overflow用户

发布于 2014-07-06 10:47:02

预测这个位置并不难。您平均位置的变化随着时间的推移,并使用它来预测新的立场。

例如,假设你的子弹处于50,46,41,37的位置,在随后的帧中,有一个已知的(和恒定的)帧速率。位置差异是-4,-5,-4。用你喜欢的平均标准。(卡尔曼滤波采用指数平均)平均速度为-4.33。

因此,下一帧的预测位置为37 + (-4.33) = 32.67像素。

据我所见,你不需要卡尔曼滤波器。如果你只观察位置的话。预测和更新,你不需要它。当你有多个传感器来测量相关的事物,或者一个复杂的系统行为时,卡尔曼滤波器就会发光。(在高速成像中,你通常可以忽略重力。因为你所有的运动都是线性的,所以你有一个简单的系统。)

要回答这个问题:是的,你可以用卡尔曼滤波器来追踪子弹.然而,对于这样一个简单的用例来说,这似乎是过火了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24588756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档