基于matlab多运动目标跟踪监测算法实现(附源码)

news2024/11/16 23:59:57

一、前言

此示例演示如何对来自固定摄像机的视频中的移动对象执行自动检测和基于运动的跟踪。

二、介绍

移动物体检测和基于运动的跟踪是许多计算机视觉应用的重要组成部分,包括活动识别、交通监控和汽车安全。基于运动的对象跟踪问题可以分为两部分:

检测每帧中的移动物体

关联一段时间内对应于同一对象的检测

运动物体的检测使用基于高斯混合模型的背景减法算法。形态学操作应用于生成的前景掩模以消除噪声。最后,斑点分析检测连接的像素组,这些像素组可能对应于移动对象。

检测与同一对象的关联仅基于运动。每条轨道的运动由卡尔曼滤波器估计。过滤器用于预测轨迹在每个帧中的位置,并确定将每个检测分配给每个轨迹的可能性。

轨道维护成为此示例的一个重要方面。在任何给定帧中,可以将某些检测分配给轨道,而其他检测和轨道可能保持未分配状态。分配的轨迹使用相应的检测进行更新。未分配的轨道标记为不可见。未分配的检测将开始新跟踪。

每个轨道都会记录连续帧数,其中它保持未分配状态。如果计数超过指定的阈值,该示例假定对象离开了视野,并删除了轨迹。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

编辑切换为居中

添加图片注释,不超过 140 字(可选)

三、创建系统对象

创建用于读取视频帧、检测前景对象和显示结果的系统对象。

四、初始化轨道

该函数创建一个轨道数组,其中每个轨道都是表示视频中移动对象的结构。该结构的目的是维护跟踪对象的状态。状态由用于检测以跟踪分配、跟踪终止和显示的信息组成。initializeTracks

该结构包含以下字段:

id:轨道的整数 ID

bbox:对象的当前边界框;用于显示

kalmanFilter:用于基于运动的跟踪的卡尔曼滤波器对象

age:自首次检测到轨道以来的帧数

totalVisibleCount:检测到轨道的帧总数(可见)

consecutiveInvisibleCount:未检测到轨道的连续帧数(不可见)。

嘈杂的检测往往会导致短暂的磁道。因此,该示例仅在跟踪了一定数量的帧后显示对象。当超过指定的阈值时,会发生这种情况。

当连续几帧没有检测与轨道关联时,该示例假定对象已离开视野并删除轨道。当超过指定的阈值时,会发生这种情况。如果跟踪了很短的时间,并且大多数帧都标记为不可见,则轨道也可能作为噪声被删除。

五、检测对象

该函数返回检测到的对象的质心和边界框。它还返回二进制掩码,该掩码的大小与输入帧相同。值为 1 的像素对应于前景,值为 0 的像素对应于背景。detectObjects

该功能使用前景检测器执行运动分割。然后,它对生成的二进制掩码执行形态学操作,以消除噪声像素并填充剩余斑点中的孔洞。

六、预测现有轨道的新位置

使用卡尔曼滤波器预测当前帧中每个轨迹的质心,并相应地更新其边界框。

七、将检测分配给轨道

将当前帧中的对象检测分配给现有轨道是通过最大限度地降低成本来完成的。成本定义为与轨迹对应的检测的负对数可能性。

该算法涉及两个步骤:

步骤 1:使用 System 对象™的方法计算将每个检测分配给每个轨道的成本。成本考虑了轨迹的预测质心与检测质心之间的欧氏距离。它还包括预测的置信度,该置信度由卡尔曼滤波器保持。结果存储在 MxN 矩阵中,其中 M 是磁道数,N 是检测数。

第 2 步:使用该函数求解由成本矩阵表示的分配问题。该函数采用成本矩阵和不向轨道分配任何检测的成本。

不将检测分配给磁道的成本值取决于 的方法返回的值范围。此值必须通过实验进行调整。将其设置得太低会增加创建新轨道的可能性,并可能导致轨道碎片化。将其设置得太高可能会导致单个轨道对应于一系列单独的移动对象。

该函数使用匈牙利算法的蒙克雷斯版本来计算最小化总成本的赋值。它返回一个 M x 2 矩阵,其中包含其两列中分配的跟踪和检测的相应索引。它还返回未分配的跟踪和检测的索引。

八、 更新分配的轨道

该函数使用相应的检测更新每个分配的轨道。它调用 来校正位置估计的方法。接下来,它存储新的边界框,并将轨道的年龄和可见总数增加 1。最后,该函数将不可见计数设置为 0。

九、更新未分配的轨道

将每个未分配的轨道标记为不可见,并将其年龄增加 1。

十、删除丢失的曲目

该函数删除连续帧太多不可见的轨道。它还会删除最近创建的轨道,这些轨道在总体上不可见太多帧。

十一、创建新曲目

从未分配的检测创建新轨道。假设任何未分配的检测都是新轨道的开始。在实践中,您可以使用其他提示来消除干扰检测,例如大小、位置或外观。

十二、显示跟踪结果

该函数为视频帧和前景掩码上的每个轨道绘制边界框和标签 ID。然后,它会在各自的视频播放器中显示帧和蒙版。

十三、总结

此示例创建了一个基于运动的系统,用于检测和跟踪多个移动对象。尝试使用其他视频,看看您是否能够检测和跟踪对象。尝试修改检测、分配和删除步骤的参数。

本例中的跟踪完全基于运动,假设所有对象都以恒定的速度沿直线移动。当物体的运动明显偏离此模型时,该示例可能会产生跟踪误差。请注意跟踪标记为#12的人时的错误,当他被树遮挡时。

通过使用更复杂的运动模型(例如恒定加速度)或为每个对象使用多个卡尔曼滤波器,可以降低跟踪误差的可能性。此外,还可以合并其他提示,以便随时间关联检测,例如大小、形状和颜色。

十四、程序

下载方式一: 基于matlab多运动目标跟踪监测资源-CSDN文库

下载方式二:基于matlab多运动目标跟踪监测算法实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/688000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【KitBash3D Cargo插件】向UE中直接导入免费模型

步骤 1. 进入KitBash3D官网,点击右上角按钮来下载Cargo 2. 下载好后是个压缩包,需要进行解压 3. 解压后运行安装程序 4. 我就安装到默认的安装路径 5. 安装好后打开软件,注册账号(如果点击创建账户按钮没反应就去KitBash3D官网注…

VS依赖注入(DI)构造函数自动生成局部私有变量

前言 依赖注入(DI)在开发中既是常见的也是必需的技术。它帮助我们优化了代码结构,使得应用更加灵活、易于扩展,同时也降低了各个模块之间的耦合度,更容易进行单元测试,提高了编码效率和质量。我们经常会先定义局部变量&#xff0…

OpenCL编程指南-6.2程序对象

创建和构建程序 要创建程序对象,可以传入OpenCL C源代码文本,或者利用程序二进制码来创建。由OpenCL C源代码创建程序对象是开发人员创建程序对象的一般做法。OpenCL C程序的源代码放在一个外部文件中(例如,就像我们的示例代码中…

【网络知识面试】初识协议栈和套接字及连接阶段的三次握手

接上一篇:【网络面试必问】浏览器如何委托协议栈完成消息的收发 1. 协议栈 一直对操作系统系统的内核协议栈理解的模模糊糊,借着这一篇博客做一下简单梳理。 我觉得最直白的理解,内核协议栈就是操作系统中的一个网络控制软件,就是…

【git】git常用指令(项目一般使用流程示例)

文章目录 创建开发环境clone到本地查看分支创建自己的开发分支切换到开发分支 开发完成上传到仓库判断目前本地仓库的状态新内容提交到暂存区新内容更新到本地仓库新内容推到远端仓库dev1.0并入主分支1.切换到主分支2.合并3.推主分支上远端仓库 回退版本主分支更新了&#xff0…

软件产品登记测试为何如此重要?

软件产品登记测试为何如此重要? 软件产品登记测试报告,是对客户的软件产品进行功能性的检测和验证,确保这些功能都得以实现并能正常运行,可作为国家高新、增值税退税、双软评估、首套台软件的检测证明材料。 软件登记测试是“双软…

three.js中聚光灯及其属性介绍

一、聚光灯及其属性介绍 Three.js中的聚光灯(SpotLight)是一种用于在场景中创建聚焦光照的光源类型。它有以下属性: color:聚光灯的颜色。 intensity:聚光灯的强度。 distance:聚光灯的有效距离。 angl…

知识管理工具:在信息时代下的组织智慧管理

随着信息时代的到来,企业面临着前所未有的信息爆炸和快速变化的挑战。如何高效地管理和利用这些信息已经成为了企业生存和发展的关键。在这种背景下,知识管理工具应运而生,为企业提供了优秀的解决方案。 知识管理工具的定义与特点 知识管理的…

DAMA数据治理CDGA/CDGP认证考试备考经验分享

一,关于DAMA中国和CDGA/CDGP考试 国际数据管理协会(DAMA国际)是一个全球性的专业组织,由数据管理和相关的专业人士组成,非营利性机构,厂商中立。协会自1980年成立以来,一直致力于数据管理和数字…

gralylog介绍与安装

介绍 Graylog是一个开源的日志管理和分析平台,用于收集、存储、分析和可视化大量日志数据。它提供了一个集中化的解决方案,可以帮助组织有效地处理分散在各种系统和应用程序中的日志信息。 以下是Graylog的主要特点和功能: 日志收集&#x…

【AI工具】-MockingBird-语音合成语音克隆

简介 MockingBird: 英文翻译:反舌鸟,也可能来自《杀死一只知更鸟》(英语:To Kill a Mockingbird),台译“梅冈城故事”,中国大陆译“杀死一只知更鸟”,直译应为“杀死一…

【Python】python进阶篇之数据库操作

数据库操作 pip3安装mysql依赖 pip3 list|grep mysqlpip3 install mysql-connector-python #指定版本 pip3 install mysql-connector-python版本号 #升降版本 pip3 install --upgrade mysql-connector-python版本号原生SQL操作 操作mysql可以使用pymsql或mysql-connector-py…

基于html+css的图展示138

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

第三章 决策树

文章目录 第三章 决策树3.1基本流程3.2划分选择3.2.1信息增益3.2.2增益率3.2.3基尼指数 3.3剪枝处理3.3.1预剪枝3.3.2后剪枝 3.4连续与缺失值3.4.1连续值处理3.4.2缺失值处理 3.5多变量决策树3.7实验 第三章 决策树 3.1基本流程 决策过程: 基本算法: …

灵雀云获Gartner® 首份《DevOps平台魔力象限报告》“荣誉提及”

随着平台工程理念的崛起,企业使用的独立的DevOps工具链逐渐向更先进、更便捷的DevOps平台演进。Gartner发布了首份DevOps平台魔力象限报告(Gartner Magic Quadrant for DevOps Platforms)。在这个备受关注的报告中,中国云原生厂商…

大势智慧软硬件技术答疑第五期

1.控制点误差表达到多少就可以? 答:水平和高程误差在0.01左右就可以,图示精度是满足的。 2.三维影像有颜色,为什么生成的是二维影像是黑色的? 答:使用dasviewer的工具-输出正射图再试试。 3.最新模方对ps版…

JMeter中常见的四种参数化实现方式是什么?

1 参数化释义 什么是参数化?从字面上去理解的话,就是事先准备好数据(广义上来说,可以是具体的数据值,也可以是数据生成规则),而非在脚本中写死,脚本执行时从准备好的数据中取值。 参…

浅析移动警务App中的技术痛点与挑战

移动警务是指警务机关利用移动通信技术和移动设备,实现警务信息化、智能化和移动化的一种工作模式。通过移动警务,警务人员可以随时随地进行警务工作,提高警务反应速度和效率。 移动警务通常包括以下方面的内容: 移动巡逻&#x…

【ArcGIS Pro二次开发】(43):线闭合

当我们需要将多段线【polyline】转为面【polygon】的时候,必须保证线是闭合的,不然是无法生成面的,如下图: 如果cad线段,可以在属性里将闭合选项设置为是,实现线的闭合: 但如果是在ArcGIS Pro里…

【inpho精品教程】07 动连点自动提取和区域网平差

【inpho精品教程】07 动连点自动提取和区域网平差 文章目录 【inpho精品教程】07 动连点自动提取和区域网平差一、数据及参数检查二、参数设置三、运行四、 连接点提取失败的原因五、 连接点较差的原因一、数据及参数检查 在动连点自动提取和区域网平差之前,首先要检查工程中…