Computer vision 如何配置卡尔曼滤波器并定义状态向量以正确模拟投射物运动?

Computer vision 如何配置卡尔曼滤波器并定义状态向量以正确模拟投射物运动?,computer-vision,tracking,kalman-filter,projectile,Computer Vision,Tracking,Kalman Filter,Projectile,我正在试验用Matlab实现卡尔曼滤波器。我想用卡尔曼滤波器模拟一个孩子在空中抛起的球的运动。我已经手动标注了球在图像帧中的位置,以用作初始化和更新卡尔曼滤波器的测量值(地面真值)。我将状态定义为6维向量,如下所示: [X Vx Ax Y Vx Ay] X-X坐标Vx-X坐标中的速度Ax-X坐标中的加速度Y-X坐标中的速度Vy-X坐标中的速度Ay-X坐标中的加速度 使用以下调用配置卡尔曼滤波器: kalmanFilter=myConfigureKalmanFilter('ConstantaCel

我正在试验用Matlab实现卡尔曼滤波器。我想用卡尔曼滤波器模拟一个孩子在空中抛起的球的运动。我已经手动标注了球在图像帧中的位置,以用作初始化和更新卡尔曼滤波器的测量值(地面真值)。我将状态定义为6维向量,如下所示:

[X Vx Ax Y Vx Ay]

X-X坐标Vx-X坐标中的速度Ax-X坐标中的加速度Y-X坐标中的速度Vy-X坐标中的速度Ay-X坐标中的加速度

使用以下调用配置卡尔曼滤波器:

kalmanFilter=myConfigureKalmanFilter('ConstantaCeleration',质心,[0.50.50.5]*1e2,[25,10,10],25)

其中,质心对应于第一帧的(X,Y)地面真值(根据excel文档为985)

使用以下调用生成(帧986以后的)预测值:

[predictedCentroid,state]=预测(kalmanFilter)

使用以下调用更新卡尔曼滤波器,并使用与帧(986以后)对应的地面真值:

正确(卡尔曼滤波器,质心)

这个实验的结果如图所示

问题:观察到Ay的值不是常数,并且似乎以不规则的方式增减。由于这是一种弹丸运动的情况,重力在y方向上提供恒定加速度,因此这些值不应漂移太大,事实并非如此


注意:这些值以像素坐标表示。

我认为这里的部分问题是球在三维空间中移动,但您正在跟踪其运动的二维投影。此外,即使在3D空间中,由于空气阻力,加速度也不是恒定的

尽管如此,在这种情况下,恒定加速度可能仍然是最好的运动模型。我会尝试增加过程噪声协方差,以解释运动模型不完全正确的事实

您可能还需要对协方差进行一些微调。例如,您对加速度的估计可能比对位置的估计更嘈杂

编辑:

镜头畸变是另一个问题。如果你能纠正它,那永远是件好事。但我所说的是,球在3D中运动,但你看到的视频显示了该运动的2D投影

在真实的3D世界中,由于重力向下,你有一个恒定的加速度,而球的轨迹在3D中是一条抛物线。当你看球移动的视频时,它的轨迹是抛物线的2D投影,根据相机角度的不同,抛物线可能会倾斜。因此,该2D轨迹可能没有恒定加速度

以极端情况为例。球被抛过场地。摄像机位于视野上方,向下看。在3D中,球实际上是以抛物线形式飞行,首先减速,然后加速,直到它撞到地面,因为恒定的加速度指向下方。但在上面的摄像机看来,球似乎是在直线运动,先加速,然后减速。在视频中,没有三维空间,因此,您将观察沿轨迹的可变加速度,而不是恒定的向下加速度


唯一可行的方法是,如果图像平面与球的运动平面平行。然后,3D抛物线轨迹将作为2D抛物线投影到图像上,恒定加速度将沿Y轴向下。

通过“跟踪2D投影”你的意思是说我应该考虑在处理之前对图像进行无失真,因为目前我使用的是扭曲的图像,在很大程度上有桶变形。我同意抛物线曲线会歪斜。但如果我们假设球的运动平面和相机之间的角度恒定,相对倾斜仅限于一个方向,那么这意味着加速度在y方向上应该保持恒定,因为这是一个在球运动方向上取g分量的问题,这是一个常数。