为什么要卡曼滤波? 简单来说,因为噪声影响,测量不准确,应用卡曼滤波来尽量去除噪声影响。
应用场景: 当预估的模型可知,如恒定、线性或多项式等。
opencv中kalmanfilter保留的接口很简单,只有三个: init, predict及correct。 init仅仅是初始化卡曼滤波的维数; predict就能得到估计的结果; correct要将测量结果作为输入,得到最优化的估计,并为下次predict做准备。
除此之外,kalmanfilter类中还有10个比较复杂的参数,它们与kalmanfilter的原理密切相关。 5个矩阵是基本参数: Mat transitionMatrix; //!< state transition matrix (A) 5个矩阵是kalmanfilter公式计算的结果 Mat statePre; //!< predicted state (x'(k)): x(k)=A*x(k-1)+B*u(k) transitionMatrix processNoiseCov:过程噪声 measurementNoiseCov测量噪声
而 measurementMatrix: 直接观察测量,一般为1 controlMatrix:没有时,为0
errorCovPost 需要初始化,当其为1时,比为0时,收敛快的多。由公式可以看出。 statePost初始化尽量接近下一个状态值, 如果收敛很快,这个不是太重要。
kalmanfilter示例可以参考,opencv samples下的kalman.cpp。 白色:真实位置 红色:测量位置 绿色:估计位置 青色:最优化位置
|
|
来自: 黑尘子 > 《OpenCV教程》