首页 游戏 软件 资讯 排行榜 专题
首页
AI
多目标跟踪之卡尔曼滤波

多目标跟踪之卡尔曼滤波

热心网友
16
转载
2025-07-22
卡尔曼滤波适用于含不确定信息的动态系统,可推测系统下一步状态,优点是内存占用小、速度快,适合实时和嵌入式系统。在多目标跟踪中,能处理目标位置等测量值的噪声,实现对目标位置的滤波、预测等。其通过高斯分布、协方差矩阵等,结合预测与传感器读数来优化估计。

多目标跟踪之卡尔曼滤波 - 游乐网

多目标跟踪之卡尔曼滤波

为后期写多目标跟踪准备的算法(用来多目标跟踪预测)多目标跟踪匹配算法:多目标跟踪之二分图无权匹配——匈牙利算法多目标跟踪加权二分图匹配 ——KM

1 定义

只要是存在不确定信息的动态系统,卡尔曼滤波就可以对系统下一步要做什么做出有根据的推测。即便有噪声信息干扰,卡尔曼滤波通常也能很好的弄清楚究竟发生了什么,找出现象间不易察觉的相关性因此卡尔曼滤波非常适合不断变化的系统,它的优点还有内存占用较小(只需保留前一个状态)、速度快,是实时问题和嵌入式系统的理想选择。

2 应用

比如跟踪目标,但目标的位置、速度、加速度的测量值往往在任何时候都有噪声。卡尔曼滤波利用目标的动态信息,设法去掉噪声的影响,得到一个关于目标位置的好的估计。这个估计可以是对当前目标位置的估计(滤波),也可以是对于将来位置的估计(预测),也可以是对过去位置的估计(插值或平滑)。

3 卡尔曼滤波眼里的行人跟踪问题

下面是图例公式的描述,初学同学可能有点蒙,建议去查一下卡尔曼滤波相关视频(然后发现还是蒙/坏笑/,但每次的学习都会有新的发现/加油/)下面是UP学习了不错文章作者Bzarg

一个包含位置信息和速度信息的状 x=(p,v)

卡尔曼滤波假设两个变量(在我们的例子里是位置和速度)都应该是随机的,而且符合高斯分布。如下图 多目标跟踪之卡尔曼滤波 - 游乐网

位置和速度是不相关的,这意味着我们不能从一个变量推测另一个变量。那么如果位置和速度相关呢?如下图所示,人前往特定位置的可能性取决于它拥有的速度。多目标跟踪之卡尔曼滤波 - 游乐网

这不难理解,如果基于旧位置估计新位置,我们会产生这两个结论:如果速度很快,人可能移动得更远,所以得到的位置会更远;如果速度很慢,人就走不了那么远。

这种关系对目标跟踪来说非常重要,因为它提供了更多信息:一个可以衡量可能性的标准。这就是卡尔曼滤波的目标:从不确定信息中挤出尽可能多的信息!

为了捕获这种相关性,我们用的是协方差矩阵。简而言之,矩阵的每个值是第i个变量和第j个变量之间的相关程度(由于矩阵是对称的,i和j的位置可以随便交换)。我们用表示协方差矩阵,在这个例子中,就是多目标跟踪之卡尔曼滤波 - 游乐网

多目标跟踪之卡尔曼滤波 - 游乐网

为了把以上关于状态的信息建模为高斯分布(图中色块),我们还需要k时的两个信息:最佳估计多目标跟踪之卡尔曼滤波 - 游乐网(均值,也就是多目标跟踪之卡尔曼滤波 - 游乐网,协方差矩阵多目标跟踪之卡尔曼滤波 - 游乐网。(虽然还是用了位置和速度两个变量,但只要和问题相关,卡尔曼滤波可以包含任意数量的变量)

多目标跟踪之卡尔曼滤波 - 游乐网

接下来,我们要通过查看当前状态(k-1时)来预测下一个状态(k时)。这里我们查看的状态不是真值,但预测函数无视真假,可以给出新分布:多目标跟踪之卡尔曼滤波 - 游乐网

我们可以用矩阵多目标跟踪之卡尔曼滤波 - 游乐网表示这个预测步骤:

多目标跟踪之卡尔曼滤波 - 游乐网

它从原始预测中取每一点,并将其移动到新的预测位置。如果原始预测是正确的,系统就会移动到新位置。这是怎么做到的?为什么我们可以用矩阵来预测人下一刻的位置和速度?下面是个简单公式:

多目标跟踪之卡尔曼滤波 - 游乐网

换成矩阵形式:

多目标跟踪之卡尔曼滤波 - 游乐网

这是一个预测矩阵,它能给出人的下一个状态,但目前我们还不知道协方差矩阵的更新方法。这也是我们要引出下面这个等式的原因:如果我们将分布中的每个点乘以矩阵A,那么它的协方差矩阵会发生什么变化

多目标跟踪之卡尔曼滤波 - 游乐网

把这个式子和上面的最佳估计多目标跟踪之卡尔曼滤波 - 游乐网 结合,可得:

多目标跟踪之卡尔曼滤波 - 游乐网

外部影响但是,除了速度和位置,外因也会对系统造成影响。比如模拟火车运动,除了列车自驾系统,列车操作员可能会手动调速。在我们的机器人示例中,导航软件也可以发出停止指令。对于这些信息,我们把它作为一个向量多目标跟踪之卡尔曼滤波 - 游乐网,纳入预测系统作为修正。假设油门设置和控制命令是已知的,我们知道火车的预期加速度a。根据运动学基本定理,我们可得:

多目标跟踪之卡尔曼滤波 - 游乐网

把它转成矩阵形式:

多目标跟踪之卡尔曼滤波 - 游乐网

多目标跟踪之卡尔曼滤波 - 游乐网是控制矩阵,多目标跟踪之卡尔曼滤波 - 游乐网是控制向量。如果外部环境异常简单,我们可以忽略这部分内容,但是如果添加了外部影响后,模型的准确率还是上不去,这又是为什么呢?

外部不确定性

但是,如果存在我们不知道的力量呢?当我们监控无人机时,它可能会受到风的影响;当我们跟踪轮式机器人时,它的轮胎可能会打滑,或者粗糙地面会降低它的移速。这些因素是难以掌握的,如果出现其中的任意一种情况,预测结果就难以保障。这要求我们在每个预测步骤后再加上一些新的不确定性,来模拟和“世界”相关的所有不确定性:

多目标跟踪之卡尔曼滤波 - 游乐网

如上图所示,加上外部不确定性后,多目标跟踪之卡尔曼滤波 - 游乐网的每个预测状态都可能会移动到另一点,也就是蓝色的高斯分布会移动到紫色高斯分布的位置,并且具有协方差多目标跟踪之卡尔曼滤波 - 游乐网。换句话说,我们把这些不确定影响视为协方差多目标跟踪之卡尔曼滤波 - 游乐网的噪声。

多目标跟踪之卡尔曼滤波 - 游乐网

这个紫色的高斯分布拥有和原分布相同的均值,但协方差不同。

多目标跟踪之卡尔曼滤波 - 游乐网

我们在原式上加入多目标跟踪之卡尔曼滤波 - 游乐网

多目标跟踪之卡尔曼滤波 - 游乐网

新的最佳估计是基于原最佳估计和已知外部影响矫正后得到的预测新的不确定性是基于原不确定性和外部环境不确定性得到的预测

通过测量来细化估计值

我们可能有好几个传感器,它们一起提供有关系统状态的信息。传感器的作用不是我们关心的重点,它可以读取位置,可以读取速度,重点是,它能告诉我们关于状态的间接信息——它是状态下产生的一组读数。

多目标跟踪之卡尔曼滤波 - 游乐网

请注意,读数的规模和状态的规模不一定相同,所以我们把传感器读数矩阵设为多目标跟踪之卡尔曼滤波 - 游乐网

多目标跟踪之卡尔曼滤波 - 游乐网

把这些分布转换为一般形式

多目标跟踪之卡尔曼滤波 - 游乐网

卡尔曼滤波的一大优点是擅长处理传感器噪声。换句话说,由于种种因素,传感器记录的信息其实是不准的,一个状态事实上可以产生多种读数。

多目标跟踪之卡尔曼滤波 - 游乐网

我们将这种不确定性(即传感器噪声)的协方差设为多目标跟踪之卡尔曼滤波 - 游乐网,读数的分布均值设为多目标跟踪之卡尔曼滤波 - 游乐网。现在我们得到了两块高斯分布,一块围绕预测的均值,另一块围绕传感器读数。

多目标跟踪之卡尔曼滤波 - 游乐网

如果要生成靠谱预测,模型必须调和这两个信息。也就是说,对于任何可能的读数多目标跟踪之卡尔曼滤波 - 游乐网,这两种方法预测的状态都有可能是准的,也都有可能是不准的。重点是我们怎么找到这两个准确率。最简单的方法是两者相乘:

多目标跟踪之卡尔曼滤波 - 游乐网

两块高斯分布相乘后,我们可以得到它们的重叠部分,这也是会出现最佳估计的区域。换个角度看,它看起来也符合高斯分布:

多目标跟踪之卡尔曼滤波 - 游乐网

事实证明,当你把两个高斯分布和它们各自的均值和协方差矩阵相乘时,你会得到一个拥有独立均值和协方差矩阵的新高斯分布。最后剩下的问题就不难解决了:我们必须有一个公式来从旧的参数中获取这些新参数!

结合高斯

两条高斯曲线相乘

多目标跟踪之卡尔曼滤波 - 游乐网

按照一维方程进行扩展,可得

多目标跟踪之卡尔曼滤波 - 游乐网

用k简化一下

多目标跟踪之卡尔曼滤波 - 游乐网

以上是一维的内容,如果是多维空间,把这个式子转成矩阵格式

多目标跟踪之卡尔曼滤波 - 游乐网

这个矩阵多目标跟踪之卡尔曼滤波 - 游乐网就是我们说的卡尔曼增益结合在一起截至目前,我们有用矩阵多目标跟踪之卡尔曼滤波 - 游乐网预测的分布,有用传感器读数多目标跟踪之卡尔曼滤波 - 游乐网预测的分布。把它们代入上节的矩阵等式中:

多目标跟踪之卡尔曼滤波 - 游乐网

相应的,卡尔曼增益就是:

多目标跟踪之卡尔曼滤波 - 游乐网

考虑到多目标跟踪之卡尔曼滤波 - 游乐网里还包含着一个多目标跟踪之卡尔曼滤波 - 游乐网,我们再精简一下上式

多目标跟踪之卡尔曼滤波 - 游乐网

最后,多目标跟踪之卡尔曼滤波 - 游乐网是我们的最佳估计值,我们可以把它继续放进去做另一轮预测

多目标跟踪之卡尔曼滤波 - 游乐网

4 代码实现

In [9]
import matplotlib.pyplot as plt# 模拟数据t = np.linspace(1,100,100)# print(t)a = 0.5position = (a * t**2)/2# print(position)position_noise = position+np.random.normal(0,120,size=(t.shape[0])) plt.plot(t,position,label='truth position')  # 原值plt.plot(t,position_noise,label='only use measured position')  # 加入噪声的值# 初始的估计的位置就直接用GPS测量的位置predicts = [position_noise[0]]position_predict = predicts[0]predict_var = 0odo_var = 120**2 #这是我们自己设定的位置测量仪器的方差,越大则测量值占比越低v_std = 50 # 测量仪器的方差for i in range(1,t.shape[0]):      dv =  (position[i]-position[i-1]) + np.random.normal(0,50) # 模拟从惯性测量单元IMU读取出的速度    position_predict = position_predict + dv # 利用上个时刻的位置和速度预测当前位置    predict_var += v_std**2 # 更新预测数据的方差    # 下面是Kalman滤波    position_predict = position_predict*odo_var/(predict_var + odo_var)+position_noise[i]*predict_var/(predict_var + odo_var)    predict_var = (predict_var * odo_var)/(predict_var + odo_var)**2    predicts.append(position_predict)    plt.plot(t,predicts,label='kalman filtered position')  # 滤波后的值plt.legend()plt.show()# 卡尔曼滤波将噪声值(橙色线),滤波后(绿色线),尽量去拟合原值(蓝色线)
登录后复制
登录后复制
来源:https://www.php.cn/faq/1422131.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

Java 字符串常量池优化指南 Stringintern 方法减少内存占用
编程语言
Java 字符串常量池优化指南 Stringintern 方法减少内存占用

String intern()方法可将重复字符串存入常量池以共享内存,适用于大量重复且长生命周期的字符串,如日志级别或状态码。但需谨慎使用,避免对唯一或临时字符串调用,以防性能下降和内存浪费。高并发时其全局同步可能成为瓶颈,可考虑使用ConcurrentHashMap等替代方案实现可控缓存。优化前应借助工具验证实际效果。

热心网友
05.07
怎么通过 for 循环实现斐波那契数列的迭代式计算并优化内存占用开销
编程语言
怎么通过 for 循环实现斐波那契数列的迭代式计算并优化内存占用开销

怎么通过 for 循环实现斐波那契数列的迭代式计算并优化内存占用开销 说到计算斐波那契数列,很多人第一反应是递归。但递归有个明显的短板:随着n增大,不仅速度变慢,内存开销也急剧上升。其实,用for循环进行迭代计算,才是兼顾效率和资源占用的经典解法。它的核心思路很巧妙:只保留最近两个数值,像滚雪球一样

热心网友
05.01
怎么利用 Netty 的 PooledByteBufAllocator 池化技术实现在极高吞吐下的平滑堆外内存占用
编程语言
怎么利用 Netty 的 PooledByteBufAllocator 池化技术实现在极高吞吐下的平滑堆外内存占用

怎么利用 Netty 的 PooledByteBufAllocator 池化技术实现在极高吞吐下的平滑堆外内存占用 这里有个核心误区需要先澄清:仅仅开启池化,并不能“自动”实现平滑的内存占用。真正的平滑,必须建立在严格控制分配器实例数量、显式管理线程缓存生命周期,以及精细配比 pageSize 与

热心网友
05.01
Linux查看CPU和内存占用情况 top和free命令【教程】
系统平台
Linux查看CPU和内存占用情况 top和free命令【教程】

别被top的“内存耗尽”骗了:看懂a vailable才是关键 在Linux系统里判断内存是否真的不够用,一个最常见的误区就是只看top命令。很多人一看到used值接近总量就慌了,其实这很可能是个假警报。真正决定系统内存余量的,是free命令输出的a vailable字段,而不是top里的used或

热心网友
04.29
mysql如何控制DML语句的内存占用_调整ReadRndBufferSize参数
数据库
mysql如何控制DML语句的内存占用_调整ReadRndBufferSize参数

MySQL DML内存调优:避开ReadRndBufferSize的误区,抓住真正关键 ReadRndBufferSize 是什么,它真能控制 DML 内存占用吗? 先说一个核心判断:ReadRndBufferSize 这个参数,和 DML 语句的内存占用,完全是两码事。很多朋友在遇到 INSERT

热心网友
04.28

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

领克GT概念跑车北京车展首发 百公里加速仅2秒
科技数码
领克GT概念跑车北京车展首发 百公里加速仅2秒

领克首款GT概念跑车亮相北京车展,由中欧团队联合打造。新车采用经典GT比例与低趴宽体设计,配备液态金属蓝涂装与2+2座舱,设有高性能模式按键可激活空气动力学套件。车辆采用后驱布局与AI智能运动控制系统,百公里加速约2秒,设计融合瑞典极简美学并参考全球用户反馈。

热心网友
05.14
英伟达RTX 5070移动版GPU发布 12GB显存性能大幅提升
科技数码
英伟达RTX 5070移动版GPU发布 12GB显存性能大幅提升

英伟达推出12GB显存版RTX5070移动GPU,与8GB版同步上市。两者均基于Blackwell架构,核心规格相同,仅显存容量不同。此举旨在缓解GDDR7芯片供应压力,为OEM提供灵活配置,加速笔记本产品布局,更大显存可更好满足游戏与AI应用需求。

热心网友
05.14
微星新款雾面WOLED显示器MAG 276QRY28与276QRDY54正式发售
科技数码
微星新款雾面WOLED显示器MAG 276QRY28与276QRDY54正式发售

微星将于5月15日推出两款26 5英寸雾面WOLED显示器MAG276QRY28和276QRDY54,售价分别为2499元和6299元。均采用第四代WOLED面板,具备QHD分辨率、VESADisplayHDRTrueBlack500认证、1500尼特峰值亮度及99 5%DCI-P3色域覆盖。276QRY28刷新率为280Hz,高阶款276QRDY54支持4

热心网友
05.14
中芯国际一季度净利润13.61亿元 同比增长0.4%
科技数码
中芯国际一季度净利润13.61亿元 同比增长0.4%

中芯国际2026年第一季度营收176 17亿元,同比增长8 1%;净利润13 61亿元,同比增长0 4%。公司预计第二季度收入环比增长14%至16%,毛利率指引上调至20%至22%。这反映出公司在行业复苏中展现出财务韧性,并通过运营优化增强了短期增长势头。

热心网友
05.14
AI图像处理训练数据存在色差问题 16种算法经小改动全面提升
AI
AI图像处理训练数据存在色差问题 16种算法经小改动全面提升

手机修图、相机降噪、视频去雾……这些我们日常使用的图像处理功能,其背后都离不开人工智能(AI)技术的驱动。通常,AI模型的训练逻辑是:向模型展示大量“低质图像”与“优质图像”的配对数据,让它学习如何将前者转化为后者。然而,天津大学计算机视觉团队近期发表的一项研究(arXiv:2604 08172)揭

热心网友
05.14