美文网首页
OpenCV 卡尔曼滤波

OpenCV 卡尔曼滤波

作者: 乔大叶_803e | 来源:发表于2020-02-17 10:54 被阅读0次

什么是卡尔曼滤波

假设我们有两个传感器,测的是同一个型号。可是他每次的读数都不太一样,怎么办呢?

取平均

再假设其中贵的那个传感器准确一些,便宜的那个差一些,有比取平均更好的办法吗

加权平均

怎么进行加权?假设两个传感器都是正态分布的,假设你知道这两个正态分布的方差,用着两个方差,你可以得到一个最优的权重。
接下来,重点来了:假设你只有一个传感器,但是你还有一个数学模型。模型可以帮你算出一个值,但也不是那么准。怎么办?

把模型算出来的值,和传感器测出的值,(就像两个传感器那样),取加权平均。

OK,最后一点说明:你的模型其实只是一个步长的,也就是说,知道x(k),我可以求x(k+1)。问题是x(k)是多少呢?答案:x(k)就是你上一步卡尔曼滤波得到的、所谓加权平均之后的那个、对x在k时刻的最佳估计值。

于是迭代也有了。

这就是卡尔曼滤波。

总而言之,kalman滤波用在当测量值与模型预测值均不准确的情况下,用来计算预测真值的一种滤波方法。这在目标识别与追踪任务中经常用到。

import numpy as np
import matplotlib.pyplot as plt
 
pos = np.array([
        [10,    50],
        [12,    49],    
        [11,    52],     
        [13,    52.2],     
        [12.9,  50]], np.float32)    
 
'''
它有3个输入参数,dynam_params:状态空间的维数,这里为2;measure_param:测量值的维数,这里也为2; control_params:控制向量的维数,默认为0。由于这里该模型中并没有控制变量,因此也为0。
'''
kalman = cv2.KalmanFilter(2,2)
 
kalman.measurementMatrix = np.array([[1,0],[0,1]],np.float32)
kalman.transitionMatrix = np.array([[1,0],[0,1]], np.float32)
kalman.processNoiseCov = np.array([[1,0],[0,1]], np.float32) * 1e-3
kalman.measurementNoiseCov = np.array([[1,0],[0,1]], np.float32) * 0.01
'''
kalman.measurementNoiseCov为测量系统的协方差矩阵,方差越小,预测结果越接近测量值,kalman.processNoiseCov为模型系统的噪声,噪声越大,预测结果越不稳定,越容易接近模型系统预测值,且单步变化越大,相反,若噪声小,则预测结果与上个计算结果相差不大。
'''
 
kalman.statePre =  np.array([[6],[6]],np.float32)
 
for i in range(len(pos)):
    mes = np.reshape(pos[i,:],(2,1))
 
    x = kalman.correct(mes)
 
    y = kalman.predict()
    print (kalman.statePost[0],kalman.statePost[1])
    print (kalman.statePre[0],kalman.statePre[1])
    print ('measurement:\t',mes[0],mes[1])  
    print ('correct:\t',x[0],x[1])
    print ('predict:\t',y[0],y[1])     
    print ('='*30)  

相关文章

  • 卡尔曼滤波器 opencv

    卡尔曼滤波器 opencv http://blog.csdn.net/akunainiannian/article...

  • OpenCV 卡尔曼滤波

    什么是卡尔曼滤波 假设我们有两个传感器,测的是同一个型号。可是他每次的读数都不太一样,怎么办呢? 取平均 再假设其...

  • 卡尔曼滤波及其无人驾驶应用

    无人驾驶汽车系统感知模块的重要技术——卡尔曼滤波,应用包括:卡尔曼滤波与行人状态估计扩展卡尔曼滤波(EKF)与传感...

  • 图文并茂,卡曼滤波

    ​卡尔曼滤波是如何工作? 看图说话! 我务必向大家介绍卡尔曼滤波器(Kalman Filter),因为它之所能, ...

  • iOS-卡尔曼滤波算法

    一:前言 滤波算法 用于过滤掉连续的数据中出现偏差较大的数据 二:卡尔曼滤波算法 <0>卡尔曼滤波的原理请自行百度...

  • 卡尔曼滤波

    把卡尔曼滤波写一下吧,思想很简单,不详细写了,就是根据方差实现的一种最优估计方法。 卡尔曼滤波五个基本的公式 1....

  • 卡尔曼滤波

    卡尔曼公式 先以状态协方差随时间的传播性,得到先验估计(时间更新),再利用测量值和最小二乘估计,得到后验估计(状态...

  • 卡尔曼滤波

    话不多说,我这里先给出我们的系统的模型方程,状态转移方程: 测量方程: 需要说明的是,这里的也可以是随变化的,但是...

  • 卡尔曼滤波

    概述   卡尔曼滤波(Kalman filter)是一种高效率的递归滤波器(自回归滤波器),它能够从一系列的不完全...

  • 卡尔曼滤波

    为什么看卡尔曼滤波 因为想要对变化/趋势进行预测,应用偏向于机械等故障类的预测。也看了不少卡尔曼滤波相关的东西,大...

网友评论

      本文标题:OpenCV 卡尔曼滤波

      本文链接:https://www.haomeiwen.com/subject/jztbfhtx.html