现在我们有一个视频流,可以拆解出 N 个帧出来,这时候初始帧/某一帧中出现了一个我们感兴趣目标,我们希望在后续帧中对这个目标进行追踪,这时候就需要 CV 中的目标追踪;

目标追踪的效果如下:

虽然效果看起来和实时人脸检测效果一样,但是只对初始帧进行了人脸检测/识别,后续帧不需要再进行检测/识别,这也是目标跟踪可以提高程序性能的优势所在;

因为做目标追踪所需要的计算时间成本,要低于进行检测/识别的;

为了实现目标追踪,我们按照以下步骤进行:

  1. 对于初始帧(视频流中的第一帧),输入/通过检测算法,得到一系列目标的位置坐标;
  2. 为这些 ROI 创建 ID;
  3. 在视频流中的后续帧,寻找帧之间目标对象的关系,将帧之间的目标关联起来;

目标跟踪可以让我们对于每一个追踪的目标指定一个唯一的 ID,所以让我们可以对视频中的跟踪物体进行计数,应用于计算人数的场景;

一个理想化的目标追踪算法能够实现:

  1. 只需要初始化的时候进行目标检测;
  2. 处理速度能够很快;
  3. 可以处理被跟踪目标,消失或者超过边界的情况;
  4. 可以处理帧之间目标消失,然后再出现的特殊情况;

上图 gif 中只有一个目标,所以其实后续帧中的检测出来的目标,如果还是一个,肯定就是我们第一帧中识别出来的 person_X;

但是往往是一帧中出现多目标,我们就需要对于前后帧中的多目标进行比对匹配;

以下图为例,比如左边是第 N 帧 ,有两个目标,我们检测识别出来是 ID#1 和 ID#2,在 N+1 帧中,也检查出来两个目标,我们知道这两个目标就是 ID#1 和 ID#2,但是不知道到底哪个是 ID#1 哪个是 ID#2;

所以就需要 质心追踪算法(Centroid Tracking)来进行判定后续帧中的 ID:

 质心追踪算法(Centroid Tracking,依赖于在视频流的连续帧中,比较已知目标和新出现目标之间质心的欧氏距离;

步骤一:取特征框并计算质心

对于视频流,通过检测算法对于每帧图像进行检测;

比如上图中有两个特征框 / 或者我们假定两个特征框给它,分别为 ID #1 和 ID #2,可以计算出两个特征框的质心,分别得到位置坐标 (x,y);

以实际视频流为例:

步骤二:计算新旧目标特征框质心的欧氏距离

对于视频流中的后续帧,我们利用检测算法来计算特征框,但是我们不会再去给对于每一个检测到的物体,添加新的 ID 或者标记什么的,而是希望将新的目标能够和旧目标联系起来;

我们通过计算每对新旧目标的欧式距离来得到这些目标之间的关系;

如下图所示,比如帧 N 时候有两个目标(绿色),帧 N+1 时候有三个目标(红色),所以对于我们希望知道,这两个旧目标(绿色),在后续帧中变成了哪一个新目标(红色);

所以我们想知道如下质心之间的关系:

  • 绿1->红1,绿1->红2,绿1->红3;
  • 绿2->红1,绿2->红2,绿2->红3;

步骤三:更新已知目标的质心坐标

质心追踪算法的前提是:对于一个给定目标,将会在后续帧中都出现,而且在第 N 帧和 N+1 帧中的质心欧氏距离,要小于不同目标之间的欧式距离;

因此我们在视频流的连续帧之间,根据欧氏距离最小原则,将这些帧中特征框的质心联系起来,可以得到一个目标 X 在这些连续帧中的变化联系,就达到了我们目标追踪的目的;

步骤四:注册新目标

有时候会有新目标的加入,比如帧 N 的时候有 x 个目标,而帧 N+1 的时候有 x+1 个目标,增加了一个目标;

所以对于这个新增的目标,我们按照以下顺序进行注册:

  1. 给这个新目标一个目标 ID;
  2. 储存这个目标特征框的质心位置;

然后从步骤二开始,对于视频流中的每一帧进行计算欧氏距离,更新坐标等步骤;

步骤五:注销旧目标

一个目标在后续帧中可能会消失,我们的目标追踪算法也要能够处理这种情况;

但是对于消失目标的处理方法,要根据于你实际部署应用的场景;

  • 第 N 帧丢失目标,注销旧目标
  • 第 N 帧丢失目标,而且第 N 帧中的后续 n 帧中都没有找回来,那就注销旧目标

因为每次重新注册的成本(进行检测/识别)的成本要大于欧氏距离比对进行目标追踪的成本;

# 请尊重他人劳动成果,转载或者使用源码请注明出处:http://www.cnblogs.com/AdaminXie

# 欢迎关注我的 Github:https://github.com/coneypo/

# 如有问题请留言或者联系邮箱: coneypo@foxmail.com

目标追踪(Object Tracking)概念的简要介绍的更多相关文章

  1. CVPR2018 关于视频目标跟踪(Object Tracking)的论文简要分析与总结

    本文转自:https://blog.csdn.net/weixin_40645129/article/details/81173088 CVPR2018已公布关于视频目标跟踪的论文简要分析与总结 一, ...

  2. 论文笔记:目标追踪-CVPR2014-Adaptive Color Attributes for Real-time Visual Tracking

    基于自适应颜色属性的目标追踪 Adaptive Color Attributes for Real-Time Visual Tracking 基于自适应颜色属性的实时视觉追踪 3月讲的第一篇论文,个人 ...

  3. Multiple Object Tracking using K-Shortest Paths Optimization简要

    参考文献:Multiple Object Tracking using K-Shortest Paths Optimization 核心步骤: 两步:一.detection 二.link detect ...

  4. Dalvik虚拟机简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8852432 我们知道,Android应用程序是 ...

  5. A brief introduction to weakly supervised learning(简要介绍弱监督学习)

    by 南大周志华 摘要 监督学习技术通过学习大量训练数据来构建预测模型,其中每个训练样本都有其对应的真值输出.尽管现有的技术已经取得了巨大的成功,但值得注意的是,由于数据标注过程的高成本,很多任务很难 ...

  6. correlation filters in object tracking

    http://www.cnblogs.com/hanhuili/p/4266990.html Correlation Filter in Visual Tracking系列一:Visual Objec ...

  7. Correlation Filter in Visual Tracking系列一:Visual Object Tracking using Adaptive Correlation Filters 论文笔记

    Visual Object Tracking using Adaptive Correlation Filters 一文发表于2010的CVPR上,是笔者所知的第一篇将correlation filt ...

  8. 论文笔记之:Spatially Supervised Recurrent Convolutional Neural Networks for Visual Object Tracking

    Spatially Supervised Recurrent Convolutional Neural Networks for Visual Object Tracking  arXiv Paper ...

  9. 基于粒子滤波的物体跟踪 Particle Filter Object Tracking

    Video来源地址 一直都觉得粒子滤波是个挺牛的东西,每次试图看文献都被复杂的数学符号搞得看不下去.一个偶然的机会发现了Rob Hess(http://web.engr.oregonstate.edu ...

随机推荐

  1. Django学习路18_F对象和Q对象

    F 对象: 可以使用模型的 A 属性和 B 属性进行比较 写法: 需要的数据对象 = 数据表(类名).objects.filter(列名__条件=F('列名2')) 需求: 查看男生数量比女生少 的公 ...

  2. Django学习路6_修改数据库为 mysql ,创建mysql及进行迁徙

    在项目的 settings 中修改 DATABASES = { 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os. ...

  3. Kafka和SpringBoot

    事先必备: kafka已安装完成 1.目录结构 2.父pom <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns ...

  4. PHP array_key_exists() 函数

    实例 检查键名 "Volvo" 是否存在于数组中: <?php $a=array("Volvo"=>"XC90","B ...

  5. Idea风格的快捷键

    在使用IntelliJ IDEA时,是可以定义快捷键风格的:File --> Setting --> Keymap 里进行选择,因为我以前用Eclipse开发,后来换成Idea有2年的时间 ...

  6. WPF桌面程序在请求接口时如何防止被常用的抓包软件Fiddler抓包

    问题:在我开发了一个WPF桌面应用程序的时候,由于涉及到登录等等操作通过Fiddler可以很直观的看到账号密码.首先问题有两点:1.数据提交的时候对于密码等重要的数据没有进行加密操作.2.没有防止抓包 ...

  7. WebMvcConfigurerAdapter在2.x向上过时问题

    在spring boot2.x向上,书写配置类时集成的WebMvcConfigurerAdapter会显示此类已经过时. 解决:不继承WebMvcConfigurerAdapter类,该实现WebMv ...

  8. gotoblas,mpich,hpl,hpcg的安装

    gotoblas的安装 mpich 安装 tar zxvf mpich-3.2.1.tar.gz cd mpich-3.2 ./configure --prefix=/usr/local/mpich( ...

  9. [leetcode/lintcode 题解] Google面试题:合法组合

    给一个单词s,和一个字符串集合str.这个单词每次去掉一个字母,直到剩下最后一个字母.求验证是否存在一种删除的顺序,这个顺序下所有的单词都在str中.例如单词是’abc’,字符串集合是{‘a’,’ab ...

  10. C#设计模式之14-命令模式

    命令模式(Command Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/413 访问. 命令模式属于行 ...