opencv怎么实现卡尔曼滤波

本篇内容主要讲解“opencv怎么实现卡尔曼滤波”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“opencv怎么实现卡尔曼滤波”吧!

创新互联-专业网站定制、快速模板网站建设、高性价比阿拉山口网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式阿拉山口网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖阿拉山口地区。费用合理售后完善,十多年实体公司更值得信赖。

卡尔曼滤波就是将模型预测的数据和观测数据进行融合,来过滤掉观测误差,进而得到更精确的数据。

opencv怎么实现卡尔曼滤波

以一个小车在平面上走为例子,小车的程序让它以初速度为V0,加速度为a的运动方式向前运动,但由于各种误差和原因(比如有风,或者上坡等),我们的小车并不严格按照这个模型走,存在噪声(并且假设高斯分布)。

并且我们不断的用传感器来测量小车的位置,但传感器也存在高斯分布的噪声。

卡尔曼滤波主要有五大公式,在这个例子的基础上,我们依次来看一下。

第一个公式:

opencv怎么实现卡尔曼滤波

  • Xk:当前状态描述矩阵

  • Fk:状态转移矩阵

  • Bk:控制矩阵

  • Uk:控制向量

对于小车来说,状态描述就是它的一维的位置x,以及运动速度v:

opencv怎么实现卡尔曼滤波

状态转移矩阵就是从上一时刻到下一时刻之间的过渡:

opencv怎么实现卡尔曼滤波

我们将Fk和Xk-1相乘,就可以得到:

opencv怎么实现卡尔曼滤波

显而易见,就是在小车匀速运动下的状态变化了。

但我们的小车是匀加速运动的,我们将加速度视为控制向量Uk,因为加速度是由踩油门啊之类的产生的(姑且这么理解吧)。

因为我们只有一个控制变量,及加速度a,所以

opencv怎么实现卡尔曼滤波

控制矩阵Bk就是将控制向量转换,将控制变量体现到状态Xk上:

opencv怎么实现卡尔曼滤波

到此为止,我们用第一个公式推导出了小车从上一个时刻到当前时刻状态的理想变化。

第二个公式:

opencv怎么实现卡尔曼滤波

  • Pk:描述状态量之间的互相关性,是Xk的协方差矩阵,也就是Cov(Xk)

  • Fk:状态转移矩阵

  • Qk:外界噪声的协方差

Pk是Xk的协方差,我们第一个公式更新了状态向量Xk,第二个公式就是更新Xk的协方差Pk,并加上一个外界噪声Qk。

因为我们用的是卡尔曼滤波,我们目标对象的状态都是呈现高斯分布,所以我们有两个需要关注的变量:均值以及协方差。所以我们需要在更新了Xk,也就包含均值和方差之后,还需要更新协方差,来关注各状态量之间的关联程度。

第三个公式:

opencv怎么实现卡尔曼滤波

  • K:卡尔曼增益矩阵

  • Hk:传感器数据

  • Pk :传感器测量的噪声的协方差

第三个公式的意义就是求出K,而K是为了在公式四五中使用,单独拎出来并没有什么直观上的意义。

我们知道,卡尔曼滤波就是将传感器的观测数据和模型的预测数据相融合,而公式一二做的就是给出模型的预测数据,公式三四五做的就是将预测数据和观测数据相融合来得到一个新的,更准确的数据。

在这两者之间有观测数据的采集这一步,但这不属于卡尔曼滤波算法要做的。

那怎么融合呢?我们的预测数据和观测数据都是高斯分布,两者大概呈下图关系:

opencv怎么实现卡尔曼滤波

而显然两者的重叠部分就是最优的最可能的分布了,如何得到中间这一块呢?就是将两个高斯分布相乘。

两者相乘之后(也就是融合之后),得到的大概如下图:

opencv怎么实现卡尔曼滤波

为了简便,我们用一个k来简化一下:

opencv怎么实现卡尔曼滤波

这个k,就是我们公式三求的卡尔曼增益了!(一维情况下)

而后面的两个公式,就是我们公式四五的一维表达了,不过因为我们实际问题有可能是多维的,所以我们实际的公式用矩阵表示,看着可能更复杂一些。

第四个公式:

opencv怎么实现卡尔曼滤波

  • Xk' :数据融合之后的状态分布

  • Xk:模型预测的Xk状态分布

  • Zk:Xk的均值

  • HkXk:传感器观测数据的均值

第五个公式:

opencv怎么实现卡尔曼滤波

更新状态描述量的互相关性。

到此,相信大家对“opencv怎么实现卡尔曼滤波”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


文章名称:opencv怎么实现卡尔曼滤波
地址分享:http://hbruida.cn/article/ighidh.html