当前位置: 首页 > news >正文

KF UKF

我需要Kalman 现在,主要是用来处理检测问题情况里的漏检,因为模拟了一段2D, (x,y)的数据,为了看效果,画的线尽量简单一点:

import numpy as np
import matplotlib.pyplot as pltdef generate_trace(initial_position, velocity, acceleration, num_points, noise_std):x = np.zeros(num_points)y = np.zeros(num_points)x[0], y[0] = initial_positionfor i in range(1, num_points):x[i] = x[i - 1] + velocity[0] + 0.5 * acceleration[0] * i ** 2y[i] = y[i - 1] + velocity[1] + 0.5 * acceleration[1] * i ** 2x[i] += np.random.normal(0, noise_std)y[i] += np.random.normal(0, noise_std)return x, ydef add_missing_points(trace, missing_percentage):num_missing = int(len(trace) * missing_percentage)missing_indices = np.random.choice(len(trace), num_missing, replace=False)print(missing_indices)return missing_indicesinitial_position = (0, 0)
velocity = (5, 3)
acceleration = (0.2, 0.1) 
num_points = 20
noise_std = 10
missing_percentage = 0.3x, y = generate_trace(initial_position, velocity, acceleration, num_points, noise_std)
plt.figure(figsize=(12, 6))
plt.plot(x, y, 'go', label='Original Trace')missing_pos = add_missing_points(x.copy(), missing_percentage)plt.plot(x[missing_pos], y[missing_pos], 'rx', label='Missing Points')x[missing_pos] = np.nan
y[missing_pos] = np.nan
plt.plot(x, y, 'y--', label='Original Trace')
trace = np.vstack((x, y)).T
np.savetxt("car_trace.csv", trace, delimiter=",")plt.xlabel('X Position')
plt.ylabel('Y Position')
plt.title('Traces')
plt.legend()
plt.savefig('car_trace.png')
plt.show()

在这里插入图片描述
绿色点:理想情况能检测到每个位置
红色×:假设的漏检情况
接下来就看KF 、 UKF怎么处理我的漏检了,这取决于它们的predict

Prior

Ok,在deep diveUKF & KF 前,有一些参数的definition需要我们的大脑建立一下短暂的存储,我经常分不清字母谁是谁…那我们就全程围绕filterpy这个库吧

class KF:def __init__(self, dt):self.dt = dtself.dim_x = 6  # x, y, vx, vy, ax, ayself.dim_z = 2  # Measurements: x, yself.kf = KalmanFilter(dim_x=self.dim_x, dim_z=self.dim_z)self.kf.F = np.array([[1, 0, dt, 0, 0.5*dt**2, 0],[0, 1, 0, dt, 0, 0.5*dt**2],[0, 0, 1, 0, dt, 0],[0, 0, 0, 1, 0, dt],[0, 0, 0, 0, 1, 0],[0, 0, 0, 0, 0, 1]])self.kf.H = np.array([[1, 0, 0, 0, 0, 0],[0, 1, 0, 0, 0, 0]])self.kf.P *= 1.0q = 0.1self.kf.Q = np.array([[q, 0, 0, 0, 0, 0],[0, q, 0, 0, 0, 0],[0, 0, q, 0, 0, 0],[0, 0, 0, q, 0, 0],[0, 0, 0, 0, q, 0],[0, 0, 0, 0, 0, q]])r = 0.5**2self.kf.R = np.array([[r, 0],[0, r]])
class EUKF:def __init__(self, dt):self.dt = dtself.dim_x = 6  # x, y, vx, vy, ax, ayself.dim_z = 2  # Measurements: x, yself.points = MerweScaledSigmaPoints(n=self.dim_x, alpha=0.001, beta=2.0, kappa=0)self.ukf = UKF(dim_x=self.dim_x, dim_z=self.dim_z, fx=self.f_process, hx=self.h_measurement,dt=self.dt, points=self.points)self.ukf.P = np.diag([1.0, 1.0, 100.0, 100.0, 1000.0, 1000.0])self.ukf.Q = np.diag([0.1, 0.1, 0.1, 0.1, 0.05, 0.05])self.ukf.R = np.diag([0.5**2, 0.5**2])

两个算法的common 参数如下:
dim_x : 这个代表你的feature维度,这个看需要设置,比如我的states是:x, y, vx, vy, ax, ay,那么这里就是6
dim_z:这个代表你的目标输出维度,比如我需要追踪,那么位置(x,y)是我的目标输出,这里就是2
dt:这个代表standard unit,物理上为1(我们常说的每秒)个单位长度,在CV处理上,我们是1秒30帧,因为处理的是图像信息,所以我们的标准单位应该是基于frame的秒,1个frame为1/30 秒的处理单位时长,这里一般赋值1/30

以下三个大写字母都是各种covariance
P:covariance estimate matrix表示对状态估计的不确定性

Q:process noise matrix影响滤波器在预测步骤中对过程模型的信任程度。较大的Q值表示滤波器认为过程模型的不确定性较大,从而对预测结果的置信度降低

R:measurement noise matrix表示测量中的噪声,较大的R值表示滤波器认为测量数据的不确定性较大,从而对测量更新的影响减小

Tips:

通常来说,P在用UKF/KF 过程,用不停的输入来调整自己。而Q,R是初始后就不变的。

KF:使用线性状态转移矩阵 F。状态预测由矩阵乘法完成
UKF:使用非线性状态转移函数 f_process。通过对 sigma 点进行无迹变换,实现状态预测。
在这里插入图片描述

相关文章:

KF UKF

我需要Kalman 现在,主要是用来处理检测问题情况里的漏检,因为模拟了一段2D, (x,y)的数据,为了看效果,画的线尽量简单一点: import numpy as np import matplotlib.pyplo…...

中伟视界:AI智能分析算法如何针对非煤矿山的特定需求,提供定制化的安全生产解决方案

非煤矿山智能化改造,除了政策文件,上级监管单位需要安装的AI智能分析算法功能之外的,矿方真正关心的,能解决矿方安全生产隐患的AI智能分析算法功能有哪些呢? 经过与矿方的现场交流沟通,收集第一现场人员对安…...

Unity 编辑器下 Android 平台 Addressable 加载模型粉红色,类似材质丢失

Unity 编辑器下 Android 平台 Addressable 加载模型粉红色,类似材质丢失 Addressable Play Mode Script加载模式 选择 Use Existiing Build 1.Unity 切换到 PC 平台,执行 Addressable Build 运行,加载 bundle 内的预制体 显示正常 2.Unit…...

Pytest-Bdd-Playwright 系列教程(10):配置功能文件路径 优化场景定义

Pytest-Bdd-Playwright 系列教程(10):配置功能文件路径 & 优化场景定义 前言一、功能文件路径的配置1.1 全局设置功能文件路径1.2. 在场景中覆盖路径 二、避免重复输入功能文件名2.1 使用方法2.2 functools.partial 的背景 三、应用场景总…...

rust逆向初探

rust 逆向葵花宝典 rust逆向技巧 rust逆向三板斧: [!NOTE] 快速定位关键函数 (真正的main函数):观察输出、输入,字符串搜索,断点等方法。定位关键 加密区 :根据输入的flag,打硬件断点,快速捕获…...

【Linux】apt 关闭 ssl 认证

【注意】apt 关闭 ssl 认证可能会引起软件安装风险,请尽量避免关闭。 执行以下命令可以实现全局关闭 sll 验证。 echo Acquire::https::Verify-Peer "false"; >> /etc/apt/apt.conf.d/99disable-signature-verificationecho Acquire::https::Verif…...

【算法】P5018 对称二叉树

题目 P5018 对称二叉树 https://www.luogu.com.cn/problem/P5018 代码 思路:领接表存储二叉树,unordered_map存储各个节点对应的值。dfs遍历一下各个子树的大小个数,再写个递归判断是否是对称二叉树,如果是就更新全局答案。 #…...

Unifying Top-down and Bottom-up Scanpath Prediction Using Transformers

Abstract 大多数视觉注意力模型旨在预测自上而下或自下而上的控制,这些控制通过不同的视觉搜索和自由观看任务进行研究。本文提出了人类注意力变换器(Human Attention Transformer,HAT),这是一个能够预测两种形式注意力…...

JavaSE(十四)——文件操作和IO

文章目录 文件操作和IO文件相关概念Java操作文件文件系统操作文件内容操作字节流FileOutputStreamFileInputStream代码演示 字符流FileWriterFileReader代码演示 缓冲流转换流 案例练习 文件操作和IO 文件相关概念 文件 通常指的是包含用户数据的文件,如文本文件、…...

【视觉SLAM】4b-特征点法估计相机运动之PnP 3D-2D

文章目录 0. 前言1. PnP求解1.1 直接线性变换DLT1.2 P3P1.3 光束平差法BA2. 实现0. 前言 透视n点(Perspective-n-Point,PnP)问题是计算机视觉领域的经典问题,用于求解3D-2D的点运动。换句话说,当知道 N N N个世界坐标系中3D空间点的坐标以及它们在图像上的投影点像素坐标…...

android 性能分析工具(04)Asan 内存检测工具

1 Asan工具简介 1.1 Asan工具历史背景 AddressSanitizer(ASan)最初由Google开发,并作为LLVM项目的一部分。ASan的设计目的是帮助开发者检测并修复内存错误,如堆栈和全局缓冲区溢出、使用已释放的内存等,这些问题可能…...

html中select标签的选项携带多个值

搜索参考资料&#xff1a;SELECT标签中的选项可以携带多个值吗&#xff1f; 【摘抄】&#xff1a; 它可能有一个select选项中的多个值&#xff0c;如下所示。 <select id"ddlEmployee" class"form-control"> <option value"">-- S…...

Lambda表达式如何进行调试

一、概述 Java8提供了lambda表达式&#xff0c;方便我们对数据集合进行操作&#xff0c;我们使用lambda表达式的时候&#xff0c;是不是有这样的疑问&#xff0c;如何对执行过程中的中间数据进行调试呢&#xff1f; 二、例子 在下面的例子中&#xff0c;我们实现随机最多生成…...

C++ —— 剑斩旧我 破茧成蝶—C++11

江河入海&#xff0c;知识涌动&#xff0c;这是我参与江海计划的第2篇。 目录 1. C11的发展历史 2. 列表初始化 2.1 C98传统的{} 2.2 C11中的{} 2.3 C11中的std::initializer_list 3. 右值引用和移动语义 3.1 左值和右值 3.2 左值引用和右值引用 3.3 引用延长生命周期…...

HTML5好看的音乐播放器多种风格(附源码)

文章目录 1.设计来源1.1 音乐播放器风格1效果1.2 音乐播放器风格2效果1.3 音乐播放器风格3效果1.4 音乐播放器风格4效果1.5 音乐播放器风格5效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&…...

C++设计模式行为模式———迭代器模式中介者模式

文章目录 一、引言二、中介者模式三、总结 一、引言 中介者模式是一种行为设计模式&#xff0c; 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互&#xff0c; 迫使它们通过一个中介者对象进行合作。 中介者模式可以减少对象之间混乱无序的依赖关系&…...

FFmpeg 4.3 音视频-多路H265监控录放C++开发十五,解码相关,将h264文件进行帧分隔变成avpacket

前提 前面我们学习了 将YUV数据读取到AVFrame&#xff0c;然后将AVFrame通过 h264编码器变成 AVPacket后&#xff0c;然后将avpacket直接存储到了本地就变成了h264文件。 这一节课&#xff0c;学习解码的一部分。我们需要将 本地存储的h264文件进行帧分隔&#xff0c;也就是变…...

力扣 LeetCode 104. 二叉树的最大深度(Day7:二叉树)

解题思路&#xff1a; 采用后序遍历 首先要区别好什么是高度&#xff0c;什么是深度 最大深度实际上就是根节点的高度 高度的求法是从下往上传&#xff0c;从下往上传实际上就是左右中&#xff08;后序遍历&#xff09; 深度的求法是从上往下去寻找 所以采用从下往上 本…...

如何高效实现汤臣倍健营销云数据集成到SQLServer

新版订单同步-&#xff08;Life-Space&#xff09;江油泰熙&#xff1a;汤臣倍健营销云数据集成到SQL Server 在企业信息化建设中&#xff0c;数据的高效集成和管理是提升业务运营效率的关键。本文将分享一个实际案例——如何通过新版订单同步方案&#xff0c;将汤臣倍健营销云…...

Vue3中使用:deep修改element-plus的样式无效怎么办?

前言&#xff1a;当我们用 vue3 :deep() 处理 elementui 中 el-dialog_body和el-dislog__header 的时候样式一直无法生效&#xff0c;遇到这种情况怎么办&#xff1f; 解决办法&#xff1a; 1.直接在 dialog 上面增加class 我试过&#xff0c;也不起作用&#xff0c;最后用这种…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...