质心跟踪算法

2023-05-16

质心跟踪算法依赖于(1)现有对象质心(即,质心跟踪器之前已经看到的对象)与(2)视频中后续帧之间的新对象质心之间的欧几里得距离 。质心跟踪算法的主要假设是一个给定的对象将潜在地移动在后续的帧之间,但距离为帧中的质心之间和将小比对象之间的所有其它距离。因此,如果我们选择将质心与后续帧之间的最小距离相关联,则可以构建对象跟踪器。另外,我们将在旧对象无法与任何现有对象匹配的情况下(总共N个后续帧)注销旧对象。

步骤1:接受边界框坐标并计算质心

步骤2:计算新边界框与现有对象之间的欧几里得距离

步骤3:更新(x,y) -现有对象的坐标

步骤4:注册新对象

步骤5:注销旧对象

初始化下一个唯一的对象ID和两个有序的用于跟踪映射给定对象的字典 ID到它的质心和它拥有的连续帧数分别被标记为“消失”

存储给定的最大连续帧数对象被标记为“消失”,直到我们需要注销跟踪对象,CentroidTracker为质心跟踪器

    # import the necessary packages
    from scipy.spatial import distance as dist
    from collections import OrderedDict
    import numpy as np
    class CentroidTracker():
        def __init__(self, maxDisappeared=50):
            self.nextObjectID = 0
            self.objects = OrderedDict()
            self.disappeared = OrderedDict()
            self.maxDisappeared = maxDisappeared

注册对象时,我们使用下一个可用的对象ID存储质心。register为注册新对象的方法。

        def register(self, centroid):
            self.objects[self.nextObjectID] = centroid
            self.disappeared[self.nextObjectID] = 0
            self.nextObjectID += 1

注销一个对象ID,我们删除对象ID和我们各自的字典 ,deregister注销对象的方法

        def deregister(self, objectID):
            del self.objects[objectID]
            del self.disappeared[objectID]

update方法可以使用多种对象检测器比如Haar级联,HOG +线性SVM,SSD,Faster R-CNN等。代码功能依次包括检查输入边框是否为矩形是空的、循环所有已存在的跟踪对象并标记它们一样消失了、如果我们已经达到最大连续数指定对象被标记为的帧失踪,注销它、返回早,因为没有质心或跟踪信息更新。

        def update(self, rects):
            if len(rects) == 0:
                for objectID in list(self.disappeared.keys()):
                    self.disappeared[objectID] += 1
                    if self.disappeared[objectID] > self.maxDisappeared:
                        self.deregister(objectID)
                return self.objects

始化NumPy数组以存储每个的质心:

            inputCentroids = np.zeros((len(rects), 2), dtype="int")
            for (i, (startX, startY, endX, endY)) in enumerate(rects):
                cX = int((startX + endX) / 2.0)
                cY = int((startY + endY) / 2.0)
                inputCentroids[i] = (cX, cY)

如果当前没有要跟踪的对象,我们将注册每个新对象,

     
            if len(self.objects) == 0:
                for i in range(0, len(inputCentroids)):
                    self.register(inputCentroids[i])

否则,我们需要根据质心位置更新任何现有的对象(x,y)坐标,以最小化它们之间的欧几里得距离,are正在跟踪对象,所以我们需要尝试将输入的质心与现有对象匹配重心,然后获取一组对象id和相应的质心,计算每一对对象之间的距离centroids和输入centroids,分别——我们的目标是将输入质心与现有质心匹配物体质心。为了执行这个匹配,我们必须(1)找到每一行的最小值,然后(2)排序行索引基于它们的最小值,以便行的最小值位于索引的*front*处列表,接下来,我们对列执行类似的处理找出每一列中最小的值,然后使用先前计算的行索引列表进行排序。

     
            else:
                objectIDs = list(self.objects.keys())
                objectCentroids = list(self.objects.values())
                D = dist.cdist(np.array(objectCentroids), inputCentroids)
                rows = D.min(axis=1).argsort()
                cols = D.argmin(axis=1)[rows]

根据距离来查看是否可以关联对象ID,在这段代码中为了确定我们是否需要更新、注册、或注销需要跟踪的对象我们已经检查过的行和列索引的,循环(行,列)索引的组合元组,如果我们已经检查了行或列值前面,忽略它。否则,获取当前行的对象ID,设置它的新质心,并重置消失的,表示我们已经检查了每一行和列索引。

     
                usedRows = set()
                usedCols = set()
                for (row, col) in zip(rows, cols):
                    if row in usedRows or col in usedCols:
                        continue
                    objectID = objectIDs[row]
                    self.objects[objectID] = inputCentroids[col]
                    self.disappeared[objectID] = 0
                    usedRows.add(row)
                    usedCols.add(col)

在我们的索引中可能有 使用的行 + 用过的颜色  我们尚未检查,计算我们还没有的行和列索引。

                unusedRows = set(range(0, D.shape[0])).difference(usedRows)
                unusedCols = set(range(0, D.shape[1])).difference(usedCols)

因此,我们必须确定尚未检查的质心索引,并将它们存储在两个新的列表中方便集中。

我们的最终检查将处理丢失的或可能已消失的所有对象,在对象质心的数量为的情况下等于或大于输入质心的数目我们需要检查这些对象是否有可能消失了。循环遍历未使用的行索引,获取对应行的对象ID
索引和增加消失的计数器,检查是否有连续的数字物体被标记为“消失”取消对象注册的权证。

            
                if D.shape[0] >= D.shape[1]:
                    for row in unusedRows:
                        objectID = objectIDs[row]
                        self.disappeared[objectID] += 1
                        if self.disappeared[objectID] > self.maxDisappeared:
                            self.deregister(objectID)

否则,输入质心的数量大于现有对象质心的数量,因此我们要注册和跟踪新对象,返回可跟踪对象的集合,我们循环 未使用的颜色索引,然后注册每个新质心。最后,我们将可跟踪对象的集合返回给调用方法。

质心跟踪器程序编写完成!
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

质心跟踪算法 的相关文章

  • 一颗MCU可以搞定无人机的电机驱动+飞控算法!

    i MX RT跨界处理器具有实时操作和应用处理器级的功能 xff0c 其已经实际应用在智能交互 工厂自动化 智能支付终端 语音处理和语音识别等领域 xff0c 这些应用场景已经足以证明i MX RT的强大与广泛的适应性 除了前述的应用方向之
  • 重磅!美国最新14类技术出口管制来了,想买的基本都买不到了

    根据2018年国会通过的 出口管制改革法案 xff08 Export Control Reform Act xff09 要求 xff0c 美国商务部工业安全署 xff08 Department of Commerce Bureau of I
  • 从行业到技术,10+年资深工程师带你进行嵌入式行业职业规划!

    找一个好工作 xff0c 谈一份好薪水详细这也是大部分人的心愿 xff0c 那么嵌入式行业该如何规划呢 xff1f 下面我们从几方面来深入探讨 1 了解嵌入式行业 嵌入式系统的应用已经覆盖到我们的生产 工作和生活的各个方面 小到智能家电 x
  • mitmproxy下载安装配置

    具体介绍可以参考 xff1a Mitmproxy mitmdump中文文档以及配置教程 守护式等待 博客园 我记录下自己操作过程中的一些细节 目录 一 下载 二 PC证书生成及安装 三 安卓端证书安装 xff08 雷电模拟器 xff09 x
  • 5G,带给嵌入式产业的机会在哪里?

    从现在开始 我们将会目睹5G 的爆发式成长 5G最突出的优点在于低时延和点对点的快速高效通信 那么它会给嵌入式产业带来哪些机会呢 嵌入式工程师面对5G的到来 又需要做哪些方面的准备和改变呢 最近 单片机与嵌入式系统应用 邀请了业内专家 公司
  • 在ubuntu+vs code上通过HTTP协议实现服务器端和客户端通信

    一 操作系统 xff1a Ubuntu16 0 4 xff08 两台虚拟机 xff09 二 编译工具 xff1a vs code xff08 相关配置见之前的文章vs code安装与配置 xff0c 在搜索C 43 43 配件时 xff0c
  • 树莓派设置开机自启动任务导致无法进入系统

    环境 树莓派 32位 问题描述 使用 Hugo 搭建博客后 xff0c 每次启动树莓派都要手动执行在博客文件夹下执行 hugo server watch 命令 xff0c 想要使用开机自启动方式 按照网上方式 xff1a 将写好的脚本 sh
  • 功能齐全的串口调试工具——串口猎人

    1 xff0c 简介 官方介绍 xff1a 串口猎人 Serial Hunter 是一款强大实用的串口调试工具 xff0c 串口猎人调试工具能以十六进制显示信息 xff0c 可进行基本发码 xff0c 高级收码和发码 xff0c 显示波形及
  • 旷视张祥雨:高效轻量级深度模型的研究和实践 | AI ProCon 2019

    演讲嘉宾 张祥雨 xff08 旷视研究院主任研究员 基础模型组负责人 xff09 编辑 Just 出品 AI科技大本营 xff08 ID rgznai100 xff09 基础模型是现代视觉识别系统中一个至关重要的关注点 基础模型的优劣主要从
  • 深挖谷歌 DeepMind 和它背后的技术

    作者 James Murphy 译者 天道酬勤 责编 Carol 出品 AI科技大本营 xff08 ID rgznai100 xff09 人工智能 AI 的子集已经成倍增长 xff0c 并完成了只有人类才能完成的各种任务 像机器学习这样的技
  • 无限想象空间,用Python玩转3D人体姿态估计

    前言 姿态估计 xff0c 一直是近几年的研究热点 它就是根据画面 xff0c 捕捉人体的运动姿态 xff0c 比如 2D 姿态估计 xff1a 再比如 3D 姿态估计 xff1a 看着好玩 xff0c 那这玩应有啥用呢 xff1f 自动驾
  • 如何成为一名合格的算法工程师?我们做了一次技能拆分…

    文 张相於 成为一名合格的开发工程师不是一件简单的事情 xff0c 需要掌握从开发到调试到优化等一系列能力 xff0c 这些能力中的每一项掌握起来都需要足够的努力和经验 而要成为一名合格的机器学习算法工程师 xff08 以下简称算法工程师
  • 马上 2018 年了,该不该下定决心转型AI呢?

    本文授权转自知乎 如此火爆的AI xff0c 会不会像Android和iOS一样 xff0c 五年后归于平淡 xff1f 转型AI真的有必要吗 xff1f 2017年 xff0c AI就像一个点石成金的神器 xff0c 所有的行业 xff0
  • 一文看懂深度学习发展史和常见26个模型

    参加 2019 Python开发者日 xff0c 请扫码咨询 来源 AI部落联盟 xff08 ID xff1a AI Tribe xff09 作者简介 xff1a 沧笙踏歌 xff0c 硕士毕业于北京大学 xff0c 目前计算机科学与技术博
  • QT的QMessageBox

    QMessageBox是弹出的消息框 xff0c 分为 xff1a 错误 消息 问题 警告 span class token comment 具体参数如下 xff1a span span class token function criti
  • 我在旷视研究院做检测 | 技术头条

    作者 俞刚 xff0c 旷视研究院Detection组负责人 2014年博士毕业于新加坡南洋理工大学 xff0c 加入旷视 主要负责检测 xff0c 分割 xff0c 跟踪 xff0c 骨架 xff0c 动作行为等方面的研究以及算法落地工作
  • 63万张!旷视发布最大物体检测数据集Objects365 | 技术头条

    编辑 琥珀 来源 AI科技大本营 xff08 id xff1a rgznai100 xff09 昨日 xff0c 在旷视科技联合北京智源人工智能研究院举办的发布会上 xff0c 旷视研究院发布了物体检测数据集 Objects365 xff0
  • C语言中跨文件的全局变量

    声明 xff1a 突然看到这篇文章 xff0c 发现了c语言中使用全局变量的错误 xff0c 特转之 首先看一段代码 xff08 https gist github com 3760736 xff09 func c 1 2 3 4 5 6
  • debian/ubuntu增加自定义启动服务

    1 创建启动服务文件 vi lib systemd system sdvn service Unit Description 61 sdvn After 61 network target Service Type 61 forking E

随机推荐

  • ROS环境下Pixhawk+XPlane半实物仿真

    使用pixhawk作为飞控开发固定翼飞机的相关应用时 xff0c 半实物的仿真环境可以很好的模拟真实的飞行环境 本文介绍了借助Mavros软件包实现ROS环境下机载处理的半实物仿真环境搭建 实验所需软硬件 xff1a pixhawk xff
  • 天猫精灵家居对接第三方设备(详细版)

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言补充准备阶段 xff08 内网映射到外网 xff09 一 天猫精灵官网配置准备二 天猫精灵部分实现代码三 天猫精灵配置技能广
  • 网吧管理系统 java SpringBoot vue 前后端

    前言介绍 随着信息技术和网络技术的飞速发展 xff0c 人类已进入全新信息化时代 xff0c 传统管理技术已无法高效 xff0c 便捷地管理信息 为了迎合时代需求 xff0c 优化管理效率 xff0c 各种各样的管理系统应运而生 xff0c
  • 海康ISAPI透传ftp

    GET ISAPI System Network ftp security 61 0 xff0c security 61 0或者不设置 xff0c 否则用户名加密 获取不到密码password PUT ISAPI System Networ
  • [CMake笔记] CMake向解决方案添加源文件兼头文件(转)

    回顾 在上一篇笔记里总结的时候说到 xff0c aux source directory这个函数在添加源码文件时 xff0c 是不会把头文件添加进去的 xff0c 这里就介经一下另外一个方法 xff0c 也是我一直使用的 添加文件 cpp与
  • CmakeList语法介绍引入Vcpkg与使用Vcpkg导入Opencv

    简单CmakeList txt内容 欢迎使用Markdown编辑器 cmake minimum required VERSION 3 11 引入vcpkg set CMAKE TOOLCHAIN FILE 34 CMAKE SOURCE D
  • vim 中批量添加注释(块选择模式)

    批量注释 xff1a Ctrl 43 v 进入块选择模式 xff0c 然后移动光标选中你要注释的行 xff0c 再按大写的 I 进入行首插入模式输入注释符号如 或 xff0c 输入完毕之后 xff0c 按两下 ESC xff0c Vim 会
  • 在github找到指定版本代码并下载

    以MPC HC代码为例子 记下过程 备忘 具体版本为nightly 1 7 0 154 1 通过官网http mpc hc org downloads 找到github地址https github com mpc hc mpc hc 2 通
  • 光盘自动运行程序的秘密

    光盘自动运行程序的秘密 光盘一放入光驱就会自动被执行 xff0c 主要依靠两个文件 xff0c 一是光盘上的 Cdvsd vxd 会随时侦测光驱中是否有放入光盘的动作 xff0c 如果有的话 xff0c 便开始寻找光盘根目录下的AutoRu
  • mysql生成不重复随机数(unique number generation)

    问题来源 业务中有时会遇到要生成不重复随机数的情况 xff0c 例如 xff0c 新生成一个商品编号 房间编号 或者其他物品编号等 不愿意采用表的自增索引 id xff0c 同时又希望新生成的编号是不重复的 这就需要考验mysql的随机数功
  • 【2015/IE】Variational Autoencoder based Anomaly Detection using Reconstruction Probability

    原文首发于个人站点 xff1a 基于变分自编码器重构概率的异常检测模型 个人公众号 xff1a DreamHub 文章链接 xff1a Variational Autoencoder based Anomaly Detection usin
  • 计算机视觉:相机模型与参数标定

    一 相机投影模型 1 小孔成像 2 相机模型中的四个平面坐标系 3 像主点偏移 4 畸变现象与内参矩阵 5 外参矩阵 二 相机标定 xff1a 张正友棋盘格标定法 1 张正友棋盘格标定法描述 2 计算外参和内参 2 1 计算单应性矩阵H 2
  • 电子信息专业英语

    61 61 61 61 61 61 61 61 61 61 普通电子类 名词 1 diode 英 39 da d n 电子 二极管 2 oscillator 英 39 s le t r n 电子 振荡器 xff1b 摆动物 xff1b 动摇
  • 计算机视觉中的MAP的理解(mean average precision)

    计算机视觉中的MAP的理解 xff08 mean average precision xff09 精准率 Precision xff0c P值 和召回率 Recall xff0c R值 下面我们来讲AP xff08 average prec
  • 机器学习方法原理及编程实现--07.隐马尔科夫及其在卡尔曼滤波中的应用

    文章列表 1 机器学习方法原理及编程实现 01 K近邻法 实现MNIST数据分类 2 机器学习方法原理及编程实现 02 决策树 3 机器学习方法原理及编程实现 03 朴素贝叶斯分类器 实现MNIST数据分类 4 机器学习方法原理及编程实现
  • 安装realsense出现的一些问题

    借鉴代码 xff1a Ubuntu18 04安装librealsense2 SDK Linux 考高分网 报错 xff1a 之前安装的时候老是提示找不到realsense2 camera那几个包 xff0c 但是他就在 ros里面 xff0
  • Java程序员必读的10本书籍

    以下列出了10本书 xff0c 对于任何希望提高Java知识和理解的Java程序员来说都是必不可少的 如果你是一名程序员 xff0c 想知道如何提高你对Java的了解或者成为更好的Java开发人员 xff0c 那你就来对地方了 在本文中 x
  • ros基础必看之各个frame的理解

    文章目录 常见的坐标系坐标系的约定坐标系变换的计算Map之间的切换添加 如果觉得好请收藏点赞 frame id xff1a 用来告诉你 xff0c 发布的数据是来自哪一个坐标系的 ros中常见的坐标系 转载链接 现在小车进行移动 如图 1
  • 嵌入式 Rust 之书---第一章 引言

    目录 谁适合使用嵌入式Rust 范围 本书适用于谁 如何使用本书 为本书作贡献 1 1 了解你的硬件 1 2 一个no std的Rust环境 1 3 工具 1 4 安装工具 1 4 1 Linux 1 4 2 macOS 1 4 3 Win
  • 质心跟踪算法

    质心跟踪算法依赖于 xff08 1 xff09 现有对象质心 xff08 即 xff0c 质心跟踪器之前已经看到的对象 xff09 与 xff08 2 xff09 视频中后续帧之间的新对象质心之间的欧几里得距离 质心跟踪算法的主要假设是一个