我正在做一个对象跟踪项目,我想改善使用卡尔曼滤波器获得的结果。
我在互联网上发现了许多有效的示例,但我真的很想了解其背后的原因。
使用opencv,这是代码的一部分:
KalmanFilter KF(6, 2, 0);
Mat_ state(6, 1);
Mat processNoise(6, 1, CV_32F);
...
KF.statePre.at(0) = mouse_info.x;
KF.statePre.at(1) = mouse_info.y;
KF.statePre.at(2) = 0;
KF.statePre.at(3) = 0;
KF.statePre.at(4) = 0;
KF.statePre.at(5) = 0;
KF.transitionMatrix = *(Mat_(6, 6) << 1,0,1,0,0.5,0, 0,1,0,1,0,0.5, 0,0,1,0,1,0, 0,0,0,1,0,1, 0,0,0,0,1,0, 0,0,0,0,0,1);
KF.measurementMatrix = *(Mat_(2, 6) << 1,0,1,0,0.5,0, 0,1,0,1,0,0.5);
这个给出的结果比KalmanFilter(4,2,0)更为平滑,但是我真的不明白为什么。有人可以解释一下这个(6,6)转换矩阵的背后是什么吗?
编辑:解决方案可能在这里,但显然我不足以独自找到它...
谢谢您的帮助。
您有一个由6个分量组成的状态向量X,其中前两个是对象的x和y位置;第二个是对象的x和y位置。假设其他四个是它们的速度和加速度:
X = [x,y,v_x,v_y,a_x,a_y] t
在卡尔曼滤波器中,您的下一个状态X t + 1等于前一个状态X t乘以过渡矩阵A,因此使用您发布的过渡矩阵,您将拥有:
x t + 1 = x t + v_x t + 0.5 a_x t
y t + 1 = y t + v_y t + 0.5 a_y t
v_x t + 1 = v_x t + a_x t
v_y t + 1 = v_t t + a_t t
a_x t + 1 = a_x t
a_y t + 1 = a_y t
如果两个状态之间的时间间隔等于1,则它们是物体以恒定加速度运动的方程的离散近似值(这就是为什么假设其他四个变量是速度和加速度的原因)。
这是一个卡尔曼滤波器,可以使速度估计更快地变化,因此与使用恒定速度模型的(4,2,0)滤波器相比,它引入了更低的延迟。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句