点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本文转载自:OpenCV学堂(CVSCHOOL)

卡尔曼滤波原理
卡尔曼滤波最早可以追溯到Wiener滤波,不同的是卡尔曼采用状态空间来描述它的滤波器,卡尔曼滤波器同时具有模糊/平滑与预测功能,特别是后者在视频分析与对象跟踪应用场景中被发扬光大,在离散空间(图像或者视频帧)使用卡尔曼滤波器相对简单。假设我们根据一个处理想知道一个变量值如下:最终卡尔曼滤波完整的评估与空间预测模型工作流程如下:OpenCV API
cv::KalmanFilter::KalmanFilter(int dynamParams, int measureParams,int controlParams = 0,int type = CV_32F
)
# dynamParams表示state的维度
# measureParams表示测量维度
# controlParams表示控制向量
# type表示创建的matrices
代码演示
import cv2
from math import cos, sin, sqrt
import numpy as npif __name__ == "__main__":img_height = 500img_width = 500kalman = cv2.KalmanFilter(2, 1, 0)cv2.namedWindow("Kalman", cv2.WINDOW_AUTOSIZE)while True:state = 0.1 * np.random.randn(2, 1)# 初始化kalman.transitionMatrix = np.array([[1., 1.], [0., 1.]])kalman.measurementMatrix = 1. * np.ones((1, 2))kalman.processNoiseCov = 1e-5 * np.eye(2)kalman.measurementNoiseCov = 1e-1 * np.ones((1, 1))kalman.errorCovPost = 1. * np.ones((2, 2))kalman.statePost = 0.1 * np.random.randn(2, 1)while True:def calc_point(angle):return (np.around(img_width/2 + img_width/3*cos(angle), 0).astype(int),np.around(img_height/2 - img_width/3*sin(angle), 1).astype(int))state_angle = state[0, 0]state_pt = calc_point(state_angle)# 预测prediction = kalman.predict()predict_angle = prediction[0, 0]predict_pt = calc_point(predict_angle)measurement = kalman.measurementNoiseCov * np.random.randn(1, 1)# 生成测量measurement = np.dot(kalman.measurementMatrix, state) + measurementmeasurement_angle = measurement[0, 0]measurement_pt = calc_point(measurement_angle)# plot pointsdef draw_cross(center, color, d):cv2.line(img,(center[0] - d, center[1] - d), (center[0] + d, center[1] + d),color, 1, cv2.LINE_AA, 0)cv2.line(img,(center[0] + d, center[1] - d), (center[0] - d, center[1] + d),color, 1, cv2.LINE_AA, 0)img = np.zeros((img_height, img_width, 3), np.uint8)cv2.line(img, state_pt, measurement_pt, (0, 0, 255), 3, cv2.LINE_AA, 0)cv2.line(img, state_pt, predict_pt, (255, 0, 0), 3, cv2.LINE_AA, 0)# 校正预测与测量值差异kalman.correct(measurement)# 更新noise矩阵与状态process_noise = sqrt(kalman.processNoiseCov[0,0]) * np.random.randn(2, 1)state = np.dot(kalman.transitionMatrix, state) + process_noisecv2.imshow("Kalman", img)code = cv2.waitKey(100)if code != -1:breakif code in [27, ord('q'), ord('Q')]:breakcv2.destroyWindow("Kalman")
好消息,小白学视觉团队的知识星球开通啦,为了感谢大家的支持与厚爱,团队决定将价值149元的知识星球现时免费加入。各位小伙伴们要抓住机会哦!下载1:OpenCV-Contrib扩展模块中文版教程在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。交流群欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

我竟然用OpenCV实现了卡尔曼滤波相关推荐

  1. opencv 卡尔曼 java_卡尔曼滤波经典例子(opencv)

    在机器视觉中追踪时常会用到预测算法,kalman是你一定知道的.它可以用来预测各种状态,比如说位置,速度等.关于它的理论有很多很好的文献可以参考.opencv给出了kalman filter的一个实现 ...

  2. opencv入门_【OpenCV入门之十八】通过形态学操作提取水平与垂直线

    小白导读 学习计算机视觉最重要的能力应该就是编程了,为了帮助小伙伴尽快入门计算机视觉,小白准备了[OpenCV入门]系列.新的一年文章的内容进行了很大的完善,主要是借鉴了更多大神的文章,希望让小伙伴更 ...

  3. 漫话:如何给女朋友解释为什么Windows上面的软件都想把自己安装在C盘

    周末,我在家里面看电视,女朋友正在旁边鼓捣她的电脑,但是好像并不是很顺利,于是就有了以下对话. 计算机存储 我们使用的计算机中,保存信息的介质有两类: 一类是内部存储器,一断电就会把记住的东西丢失. ...

  4. 学习OpenCV2——卡尔曼滤波(KalmanFilter)详解

    本文将简要回顾一下卡尔曼滤波理论,然后详细介绍如何在OpenCV中使用卡尔曼滤波进行跟踪,最后给两个程序实例. 1. 卡尔曼滤波理论回顾 对于一个动态系统,我们首先定义一组状态空间方程 状态方程:  ...

  5. 卡尔曼滤波原理及实现

    卡尔曼滤波原理及实现 前一段时间,做项目研究了一下卡尔曼滤波,并且在项目当中实现了一个物体跟踪的功能,所以,借着新鲜劲儿,本次博客对卡尔曼滤波进行一次整理. 卡尔曼滤波是什么 卡尔曼滤波能做什么 卡尔 ...

  6. OpenCV--卡尔曼滤波(KalmanFilter)详解【转载】

    本文将简要回顾一下卡尔曼滤波理论,然后详细介绍如何在OpenCV中使用卡尔曼滤波进行跟踪,最后给两个程序实例. 1. 卡尔曼滤波理论回顾 对于一个动态系统,我们首先定义一组状态空间方程 状态方程: 测 ...

  7. 读书笔记 -《Python 黑帽子》 ( 三 )

    读书笔记系列文章 一直都在读书,读了忘,忘了再读.不如把每次学到的东西都写下来 第四章 Scapy: 网络的掌控者 Scapy 的十分强大的,前两章的东西可以用 Scapy 用简单的几行代码就能实现. ...

  8. 基于树莓派(ARM)的人脸识别摄像头(QT5.8+OPENCV3.4.5)开发总结

    前言 这是帮学妹做的一个毕业设计,觉得有趣就接了.功能较为简单,更像是一个带了人脸识别功能的行车记录仪.从18年12月开始做,大部分代码在3月写出来,到现在大概花了20个工作日的样子.期间从零开始学了 ...

  9. OpenCV卡尔曼滤波介绍与代码演示

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 卡尔曼滤波原理 卡尔曼滤波最早可以追溯到Wiener滤波,不同的是 ...

最新文章

  1. java.lang.ArithmeticException: divide by zero
  2. three相机在模型上_基于 three.js 的 3D 粒子动效实现
  3. Xampp安装PHPUnit
  4. python内置函数用来打开或创建文件_2020年《python程序设计》基础知识及程序设计598题XS[含参考答案]...
  5. 小程序数据框有重影_微信小程序云开发数据库增删改查
  6. 编程程序的名称要记住吗_学习编程时要记住的5件事
  7. php 安装zip,php zip拓展安装
  8. 《C++ Primer Plus》14.2 私有继承 学习笔记
  9. 一个简单的重命名,在git中也有这么多学问
  10. 学习Flask-SQLAlchmy管理数据库知识记录点
  11. 洛谷 p1434 滑雪【记忆化搜索】
  12. HTML中的行内元素和框元素详解
  13. 计算机相关技能简历,简历计算机技能有哪些
  14. 长文解读:迟到的Libra与即将到来的Commodity 2.0
  15. 用html制作QQ彩贝
  16. 计算机病毒扩散最快的是什么,根据统计,当前计算机病毒扩散最快的途径是( )...
  17. 微信Log日志分析——初步探索
  18. Nginx平滑升级与自定义错误页面
  19. 怀揣梦想,我依靠自己,往后余生越来越精彩
  20. hu丫丫收集到的web测试方法总结

热门文章

  1. 一文看懂机器学习中的常用损失函数
  2. 面试官:聊一聊 Spring Boot 服务监控机制
  3. 为什么阿里强制 boolean 类型变量不能使用 is 开头?
  4. 当 Docker 遇到 Intellij IDEA,再次解放了生产力~
  5. 高并发下秒杀商品,你必须知道的9个细节
  6. 灰度发布系统架构设计
  7. jar包又冲突了?如何快速确定与哪个jar包冲突?
  8. Spring 中的bean 是线程安全的吗?
  9. 支付宝二面:Mybatis接口Mapper内的方法为啥不能重载吗?我直接懵逼了...
  10. 8种方案解决重复提交问题!