本次我们介绍的是卡尔曼滤波,卡尔曼滤波算法在机器控制中应用十分广泛,当需要校准前后两个数据的时候,就需要卡尔曼滤波的登场了。也就是通过卡尔曼滤波来实现对下次数据的最佳预测,最佳估计

总而言之,卡尔曼滤波是用在当测量值与模型预测值均不准确的情况下,用来计算预测真值的一种滤波方法。简而言之就是将卡尔曼滤波计算出来的值与当前的值进行加权平均。这在目标识别与追踪任务中经常用到。

如今,许多博客都有介绍卡尔曼滤波的简单应用-----,即实现对鼠标位置的跟踪。

首先,我们需要建立鼠标运动的模型,这就包括了两个状态变量:鼠标坐标x,y,以及两个需要测量,预测的变量:鼠标位置x,y。因为在我们使用的过程中,鼠标的运动是随机运动的,也就是并没有一个精确复杂的数学模型。因此,鼠标当前的位置主要是通过上一时刻的位置再叠加一个随机噪声来进行预测。

import cv2
import numpy as np
import matplotlib.pyplot as pltframe = np.zeros((800,800,3),np.uint8)
last_mes = current_mes = np.array((2,1),np.float32)
last_pre = current_pre = np.array((2,1),np.float32)def mousemove(event, x,y,s,p):global frame, current_mes, mes, last_mes, current_pre, last_prelast_pre = current_prelast_mes = current_mescurrent_mes = np.array([[np.float32(x)],[np.float32(y)]])kalman.correct(current_mes)current_pre = kalman.predict()lmx, lmy = last_mes[0],last_mes[1]lpx, lpy = last_pre[0],last_pre[1]cmx, cmy = current_mes[0],current_mes[1]    cpx, cpy = current_pre[0],current_pre[1]    cv2.line(frame, (lmx,lmy),(cmx,cmy),(0,200,0))cv2.line(frame, (lpx,lpy),(cpx,cpy),(0,0,200))cv2.namedWindow("Kalman")
cv2.setMouseCallback("Kalman", mousemove)
kalman = cv2.KalmanFilter(4,2)
kalman.measurementMatrix = np.array([[1,0,0,0],[0,1,0,0]],np.float32)
kalman.transitionMatrix = np.array([[1,0,1,0],[0,1,0,1],[0,0,1,0],[0,0,0,1]], np.float32)
kalman.processNoiseCov = np.array([[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]], np.float32) * 0.003
kalman.measurementNoiseCov = np.array([[1,0],[0,1]], np.float32) * 1while(True):cv2.imshow('Kalman',frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcv2.destroyAllWindows()

在此算法中,主要应用到的知识是协方差。也就是通过修正协方差来估计新的位置,然后再根据当前的位置迭代修正协方差,进行下一次预估。

kalman = cv2.KalmanFilter(4,2)
kalman.measurementMatrix = np.array([[1,0,0,0],[0,1,0,0]],np.float32)
kalman.transitionMatrix = np.array([[1,0,1,0],[0,1,0,1],[0,0,1,0],[0,0,0,1]], np.float32)
kalman.processNoiseCov = np.array([[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]], np.float32) * 0.003
kalman.measurementNoiseCov = np.array([[1,0],[0,1]], np.float32) * 1

在这里,我们需要进行初始化。在这里,我们使用cv2.KalmanFilter(4,2)表示转移矩阵维度为4,测量矩阵维度为2

以上四个矩阵分别是:测量矩阵、转移矩阵、过程噪声协方差矩阵、测量噪声协方差矩

那么什么是协方差呢?

协方差表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同。 如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。

当协方差绝对值越大,两者对彼此的影响越大,反之越小。噪声越大,预测结果越不稳定,越容易接近模型系统预测值,且单步变化越大,相反,若噪声小,则预测结果与上个计算结果相等。

基于OpenCV的卡尔曼滤波的设计相关推荐

  1. opencv对图像是软解码_基于opencv和c++的图像处理软件设计与实现(26页)-原创力文档...

    毕业设计中文摘要 基于opencv和c++的图像处理软件设计与实现 摘要: 本文主要对基于opencv和c++的图像处理软件设计与实现进行介绍.本软件由主界面和若干二级菜单组成,主界面功能有文件操作. ...

  2. 【毕业设计/课程设计】基于opencv的高精度人脸识别考勤系统设计与实现

    文章目录 0 项目说明 1 需求分析 2 总体设计 3 详细设计 4 程序运行结果测试与分析 5 实验心得 6 项目源码 0 项目说明 基于opencv的高精度人脸识别考勤系统设计与实现 提示:适合用 ...

  3. 基于OpenCv的照片美化工具的设计与实现

    随着我们对美好事物的向往,追求更美的自己,尤其是在手机拍照时,更能体现,现在不同的手机拍出的效果截然不同,像华为手机拍照拍出的就特别的清晰,opp手机拍出的效果就非常的柔和,像小米手机拍出的效果就非常 ...

  4. 基于OpenCV的车牌识别的设计与实现

    随着大数据和互联网技术的快速发展,利用人工智能技术实现车牌信息的自动识别推荐成为研究的热门话题.通过对基于OpenCV的车牌识别系统的网站功能需要进行讨论研究,这种跨平台计算机视觉和机器学习非常适用于 ...

  5. linux环境用opencv读取图片,基于Linux下OpenCV的人脸识别模块设计

    金笑雪 张琳琳 高丹 张黎 摘 要: 近年来,图像识别技术正在向更加直观.可靠的方向发展,其中人脸识别技术具有极高的研究价值,应用得也最为广泛.通过对Linux系统下OpenCV的研究,利用OpenC ...

  6. 图像工程课程设计 基于 OpenCV 、 Qt 库实现的图像处理软件 大学编程作业(TUST 天津科技大学 2023年)

    基于 OpenCV . Qt 库实现的图像处理软件 目录 基于 OpenCV . Qt 库实现的图像处理软件 一.项目简介 二.项目要求 三.项目源码 四.交流学习 图像处理工具说明文档 基于 Ope ...

  7. 【毕业设计_课程设计】基于opencv、dilb的员工人脸识别考勤系统

    文章目录 0 项目说明 1 需求分析 2 总体设计 3 详细设计 4 效果展示 5 实验心得 6 项目源码 7 最后 0 项目说明 基于opencv.dilb的员工人脸识别考勤系统 提示:适合用于课程 ...

  8. 《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  9. 笔记 基于OpenCV的目标跟踪软件与系统实现

    1.目标检测理论包括光流法.帧间差分法和背景差分法, 目标分割理论包括全局阈值法和局部阈值法, 目标跟踪的均值漂移法和卡尔曼滤波法. 2.基于opencv的目标跟踪软件设计于实现 在vc环境下,按照单 ...

最新文章

  1. 如何在 bash 中使用索引数组
  2. python中文乱码例子
  3. 中文分词工具的初步使用图解
  4. 改变跳转页面 英文_如何高效阅读英文文献?你可以试试它 | 知云文献翻译
  5. 接口测试的时候如何生成随机数据进行测试
  6. arcgis 4.x graphicslayer点击事件_ArcGis中X、Y值的巧用方法小记
  7. 查询SQL的null与''
  8. 华为数通部门怎么样_华为HCIA考试内容,考试费用及考试编号
  9. docker安装es+kibana
  10. 读书笔记--精通CSS高级Web标准解决方案(一)---CSS基础
  11. 太戈编程DEVC++教师答案库
  12. 利用ESP8266与米思齐从零制作模拟温室大棚--程序篇
  13. 基于dsp28035之Simulink实验系列(1)-点亮第一盏灯
  14. 极速办公(ppt)如何插入超链接
  15. Could not instantiate the executor. Make sure a planner module is on the classpath
  16. 清除office激活秘钥方法
  17. html5 游戏 响应式,关于html5:响应式游戏网页有什么特点呢
  18. ps多行文字如何左右对齐
  19. 关闭PyCharm的Run with Python Console模式
  20. 目标检测——day66 Scaled-YOLOv4: Scaling Cross Stage Partial Network

热门文章

  1. 手机收不到验证码问题
  2. 【历史上的今天】5 月 21 日:Simula 67 发布;微软推出 Xbox One;计算机先驱诞生日
  3. java 大臣的旅费_蓝桥杯 大臣的旅费(Java dfs)
  4. 嵌入式编程中volatile的重要性
  5. matlab下对齿轮图片的参数提取
  6. 批量执行ABAQUS的inp文件——整理
  7. 如何让BERT拥有视觉感知能力?两种方式将视频信息注入BERT
  8. 柯尼卡美能达C364e安装步骤(全)-柯美复印机如何装机-柯美C364e驱动安装-柯美复印机安装扫描
  9. 微信小程序自适应深色主题DarkMode源码
  10. Mac OS配置python虚拟环境