很好的入门资料

向面试官一句话解释卡尔曼滤波

  1. 上一次的最优状态估计和最优估计误差去计算这一次的先验状态估计和先验误差估计
  2. 用1得到的本次先验误差估计和测量噪声,得到卡尔曼增益
  3. 用1,2步骤得到所有先验误差估计和测量噪声,得到本次的最优估计

一句话解释:对模型的预测值和实际的观测值进行加权,迭代计算出未来的状态。


对于上面三句话的一些解释:

  • 先验:根据以往的结果去推导
  • 后验:得到当前结果之后再去修正
  • 卡尔曼增益作用:将“粗略估计”变成“最准确的估计”

卡尔曼滤波解决的根本问题:如何让噪声的干扰最小(噪声:可以理解为 实际值-预测值 最小)

卡尔曼滤波的本质:参数化的贝叶斯模型

算法核心思想:根据当前的仪器“测量值”和上一刻的“预测值”和“误差”,计算得到当前的最优量,再预测下一刻的量。

为什么称卡尔曼滤波:首先,是卡尔曼本人提出来的;其次,输出变量都是输入变量的线性组合,所以可以看做是一种滤波算法。

卡尔曼滤波器可以从最小均方误差的角度推导出,也可以从贝叶斯推断的角度来推导。


下面从最小均方误差的角度推导卡尔曼滤波。

基础背景知识

卡尔曼的核心:预测+反馈

观测数据:代表传感器采集的实际数据,可能存在或多或少的误差

最优估计:算法计算出来接近于真实值的估计

均方误差:误差(每个估计值与真实值的差)的平方,再求和,再求平均。多样本时,均方误差等于每个样本的误差平方乘以该样本出现的概率,再求和。

方差:描述随机变量的离散程度,具体来说是变量值离期望值的距离。

最小均方误差估计:估计参数,使得估计出来的模型和真实值之间的误差平方期望最小。

两个变量之间的协方差:

x==y,就是方差。在协方差矩阵中,对角线元素即为方差。x, y都大于期望,协方差为正直;相应自行分析。

卡尔曼滤波核心公式及解释

V(k)为测量噪声

Z(K)为K时刻的测量值

python-opencv 中的kalman滤波模块

应用重点说明:

A: 转移矩阵

B: 控制矩阵

H:测量矩阵

一维中的卡尔曼滤波实现(注重原理的理解)
import numpy as np
import matplotlib.pyplot as plt #这里是假设A=1,H=1, B=0的情况
# 故动态模型 X(k) = X(k-1) + 噪声
# Z(K) = X(k)
# 动态模型是一个常量 # intial parameters
n_iter = 50
sz = (n_iter,) # size of array
x = -0.37727 # truth value (typo in example at top of p. 13 calls this z)
z = np.random.normal(x,0.1,size=sz) # observations (normal about x, sigma=0.1) Q = 1e-5 # process variance # allocate space for arrays
xhat=np.zeros(sz) # a posteri estimate of x
P=np.zeros(sz) # a posteri error estimate
xhatminus=np.zeros(sz) # a priori estimate of x
Pminus=np.zeros(sz) # a priori error estimate
K=np.zeros(sz) # gain or blending factor R = 0.1**2 # estimate of measurement variance, change to see effect # intial guesses
xhat[0] = 0.0
P[0] = 1.0 for k in range(1,n_iter):
# time update
xhatminus[k] = xhat[k-1] #X(k|k-1) = AX(k-1|k-1) + BU(k) + W(k),A=1,BU(k) = 0
Pminus[k] = P[k-1]+Q #P(k|k-1) = AP(k-1|k-1)A' + Q(k) ,A=1 # measurement update
K[k] = Pminus[k]/( Pminus[k]+R ) #Kg(k)=P(k|k-1)H'/[HP(k|k-1)H' + R],H=1
xhat[k] = xhatminus[k]+K[k]*(z[k]-xhatminus[k]) #X(k|k) = X(k|k-1) + Kg(k)[Z(k) - HX(k|k-1)], H=1
P[k] = (1-K[k])*Pminus[k] #P(k|k) = (1 - Kg(k)H)P(k|k-1), H=1 plt.figure()
plt.plot(z, 'k+', label='noisy measurements') # 测量值
plt.plot(xhat, 'b-', label='a posteri estimate') # 过滤后的值
plt.axhline(x, color='g', label='truth value') # 系统值
plt.legend()
plt.xlabel('Iteration')
plt.ylabel('Voltage')
plt.show()

卡尔曼滤波+单目标追踪+python-opencv的更多相关文章

  1. Video Target Tracking Based on Online Learning—TLD单目标跟踪算法详解

    视频目标跟踪问题分析         视频跟踪技术的主要目的是从复杂多变的的背景环境中准确提取相关的目标特征,准确地识别出跟踪目标,并且对目标的位置和姿态等信息精确地定位,为后续目标物体行为分析提供足 ...

  2. 机器学习进阶-目标追踪-SSD多进程执行 1.cv2.dnn.readnetFromCaffe(用于读取已经训练好的caffe模型) 2.delib.correlation_tracker(生成追踪器) 5.cv2.writer(将图片写入视频中) 6.cv2.dnn.blobFromImage(图片归一化) 10.multiprocessing.process(生成进程)

    1. cv2.dnn.readNetFromCaffe(prototxt, model)  用于进行SSD网络的caffe框架的加载 参数说明:prototxt表示caffe网络的结构文本,model ...

  3. 【python+opencv】直线检测+圆检测

     Python+OpenCV图像处理—— 直线检测 直线检测理论知识: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进 ...

  4. Python+opencv打开修图的正确方式get

    先逼逼两句: 图像是 Web 应用中除文字外最普遍的媒体格式. 流行的 Web 静态图片有 JPEG.PNG.ICO.BMP 等.动态图片主要是 GIF 格式.为了节省图片传输流量,大型互联网公司还会 ...

  5. 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台

    搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...

  6. .NET + OpenCV & Python + OpenCV 配置

    最近需要做一个图像识别的GUI应用,权衡了Opencv+ 1)QT,2)Python GUI,3).NET后选择了.NET... 本文给出C#+Opencv和Python+Opencv的相应参考,节省 ...

  7. RPi 2B python opencv camera demo example

    /************************************************************************************** * RPi 2B pyt ...

  8. Python+OpenCV图像处理(一)

    Python+OpenCV图像处理(一): 读取,写入和展示图片 调用摄像头拍照 调用摄像头录制视频 1. 读取.写入和展示图片 图像读入:cv2.imread() 使用函数cv2.imread() ...

  9. python opencv show图片,debug技巧

    debug的时候可以直接把图片画出来debug. imshow函数就是python opencv的展示图片的函数,第一个是你要起的图片名,第二个是图片本身.waitKey函数是用来展示图片多久的,默认 ...

随机推荐

  1. SOA的理解

    SOA架构的概念网上一大堆,笔者也没有发现一个准确.公认的定义.不过笔者在贴吧了发了一个比较好的解释,能够帮助理解: 一个产品有PC端.iOS端.Android端,有个数据查询的功能.传统的设计方法就 ...

  2. 好看的alert弹出框sweetalert

    转载:https://www.cnblogs.com/lamp01/p/7215408.html

  3. 【转】GT 的性能测试方案解析

    前言 本文将整理腾讯GT各个性能测试项的测试方法,目的是为了帮助移动性能专项测试同学快速过一遍腾讯GT各个性能数据是如何获取的.另外对腾讯GT还不了解或者不知道它能做什么的同学可以看看这篇文章:htt ...

  4. Python local error

    原来在python的函数中和全局同名的变量,如果你有修改变量的值就会变成局部变量,在修改之前对该变量的引用自然就会出现没定义这样的错误了,如果确定要引用全局变量,并且要对它修改,必须加上global关 ...

  5. linux后台运行命令:&和nohup

    常用后台运行命令包含:&和nohup 一.& 使用 当在前台运行某个作业时,终端被该作业占据:可以在命令后面加上& 实现后台运行.例如:sh test.sh & 适合在 ...

  6. tp3.2单函数总结

    A($name,$layer='',$level=0) // 实例化多层控制器 格式:[资源://][模块/]控制器         B($name, $tag='',&$params=NUL ...

  7. vue组件之时间组件

    效果图 主要有两个注意点,前面时分,通过定时器,1秒钟取一次,只要数据变了立刻让他展示,当然也可以1分钟取一次,我看了下定时器和真正的时间 其实有一定的偏差的,大约要1分多才会改变,所以我用了1秒取一 ...

  8. 转 node.js和 android中java加密解密一致性问题;

    原文地址,请大家去原文博客了解; http://blog.csdn.net/linminqin/article/details/19972751 我保留一份,防止删除: var crypto = re ...

  9. Vc 检测内存泄漏

    启用内存泄漏检测 检测内存泄漏是 C/c + + 调试器和 C 运行时库 (CRT) 的主要工具调试堆函数. 若要启用调试堆的所有函数,在 c + + 程序中,按以下顺序包含以下语句: C++复制 # ...

  10. maven解决omitted for duplicate(依赖冲突)

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...