0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用质心法进行目标追踪--文末送书

OpenCV学堂 来源:OpenCV学堂 2023-10-31 15:47 次阅读

如今,“图像分类”、“目标检测”、“语义分割”、“实例分割”和“目标追踪”等5大领域是计算机视觉的热门应用。其中“图像分类”与“目标检测”是最基础的应用,在此基础上,派生出了“语义分割”、“实例分割”和“目标跟踪”等相对高级的应用。

、基于目标检测的追踪概述

基于目标检测的目标追踪方法(Tracking By Detecting,简称TBD)一般使用目标检测模型(如YOLO),在每个视频帧上进行目标检测,然后将检测出来的目标进行关联,找到每个目标的运行轨迹。如图1所示,先使用目标检测模型检测出7个目标,然后通过算法,将5b7dfc4c-77c1-11ee-939d-92fbcf53809c.png5b91784e-77c1-11ee-939d-92fbcf53809c.png进行关联,从而追踪到这两个足球的运行轨迹。

5b9d6492-77c1-11ee-939d-92fbcf53809c.png

1基于目标检测的目标追踪方法

TBD方法完整的流程如图2所示,该方法共有5个步骤,其中最关键的是“目标检测”和“目标关联”两个步骤,“目标检测”需要一个训练好的目标检测模型,用来发现图像中的各个目标,“目标关联”需要一个关联算法,用来进行目标的配对。

(1)目标检测,检测出要追踪目标的位置坐标、目标分类等信息,初始化每个目标的轨迹。

2)目标关联,使用算法,给当前帧中的目标和前一帧的目标进行配对。

3)关联成功,在上一帧中找到了当前帧中检测到的目标,配对成功,记录目标的轨迹。

4)新出现目标,在上一帧中没有找到当前帧中检测到的目标,初始化新目标的轨迹。

5)目标消失,在当前帧中没有找到上一帧中检测出来的目标,删除该目标的轨迹。

5bae60b2-77c1-11ee-939d-92fbcf53809c.png

2 基于目标检测的目标追踪方法(TBD)流程图

在基于目标检测的目标追踪方法中,为了实现目标的关联,容易想到的方法是“通过目标识别进行目标关联”:对每一帧图像进行目标检测,然后对每一个目标提取特征,通过特征识别出每一个目标,从而实现目标关联。

但是,“通过目标识别进行目标关联”需要在每一帧图像中,提取出每一个目标的特征,这需要大量的计算资源,同时还需要稳定的特征提取器,在实际场景中很难做到,因此,通常采用其他方法进行目标的关联,如常用的质心法。

二、使用质心法进行目标关联

质心法是一种基于目标检测的目标追踪方法,只在目标首次出现的时候,对目标进行识别,在后续的视频帧中,通过欧氏距离将检测到的目标进行关联,如图3所示。

1)目标检测,使用深度学习模型,对视频帧进行目标检测。

2)计算质心坐标,使用目标预测框的中心点作为质心坐标。

3)计算质心距离,计算视频的上一帧和当前帧中目标之间的欧式距离。

4)目标关联,距离相近的为同一目标,如AC是同一目标,B是新出现目标。

(5)目标更新,更新已知目标的坐标,生成新目标ID,如果有目标消失,则注销消失目标ID。

5bb8f0fe-77c1-11ee-939d-92fbcf53809c.png

3 使用质心法实现目标关联

三、质心法使用示例

质心法是目标关联算法,在进行目标追踪时,还需要配合目标检测模型使用,下面代码使用YOLO模型进行目标检测(已经在coco数据集上训练好的YOLO模型),使用质心法进行目标关联,实现目标的追踪。

在以下代码中,详细介绍了两帧图像中的目标(足球)的追踪过程,在本书配套的源代码中,还演示了对视频中的目标进行追踪的方法。

(1)导入库用到的库(在配套代码目录下的yolo_detect.py文件里,封装了YOLO模型的使用)

1 import cv2,math
  2 import numpy as np
  3 import IPython.display as display
  4 from yolo_detect import Init_Yolo,Detect,Draw #封装YOLO模型的检测操作
  5 from matplotlib import pyplot as plt
  6 plt.rcParams['font.sans-serif']=['SimHei'] #在统计图上显示中文

2)初始化YOLO模型(模型的初始化方法请查看yolo_detect.py文件中的Init_Yolo函数)。

1 model,labels = Init_Yolo('./models/yolov3-tiny.cfg',
  2                          './models/yolov3-tiny.weights',
3'./models/coco.names')

(3)读取两帧图像,并转换为RGB格式,其中frame_1是上一帧图像,frame_2是当前帧图像。

 1 frame_1 = cv2.imread('./images/ball_1.png')
  2 frame_1 = cv2.cvtColor(frame_1, cv2.COLOR_BGR2RGB)
  3 frame_2 = cv2.imread('./images/ball_2.png')
4frame_2=cv2.cvtColor(frame_2,cv2.COLOR_BGR2RGB)

4)检测两帧图像中的足球目标(调用yolo_detect.py文件中的Detect函数)。

1 #使用YOLO检测两帧图像中的目标
  2 b1 = Detect(model,labels,frame_1)
  3 b2 = Detect(model,labels,frame_2)
  4 #只保留足球的检测结果
  5 filter=np.where(b1[:,-1]=='sports ball')
  6 bbox1 = b1[filter]
  7 filter=np.where(b2[:,-1]=='sports ball')
8bbox2=b2[filter]

(5)计算质心坐标,根据第4步检测结果bbox1和bbox2,计算目标的质心(即绑定框的中心)。

1 A = (int(bbox1[0][0])+int(bbox1[0][2])/2,int(bbox1[0][1])+int(bbox1[0][3])/2)
  2 B = (int(bbox2[0][0])+int(bbox2[0][2])/2,int(bbox2[0][1])+int(bbox2[0][3])/2)
  3 C = (int(bbox2[1][0])+int(bbox2[1][2])/2,int(bbox2[1][1])+int(bbox2[1][3])/2)
4print("第一帧目标A",A,"第二帧目标B",B,"第二帧目标C",C)

使用第4和第5步代码,在第一帧图像中检测到目标A,在第二帧图像中检测到目标BC,并分别计算这3个目标的质心。如图4所示,图中白色边框为检测到的目标边界框,中间的绿点为目标的质心(即边界框的中心)。

5bca9980-77c1-11ee-939d-92fbcf53809c.png

4 检测到的目标与质心

6)计算第一帧中的目标和后一帧中目标的欧氏距离,根据最近距离,确定AB是同一目标。

 1 AB = math.sqrt(math.pow((A[0]-B[0]),2)+math.pow((A[1]-B[1]),2))
  2 AC = math.sqrt(math.pow((A[0]-C[0]),2)+math.pow((A[1]-C[1]),2))
3print("AB距离",AB,"AC距离",AC,"AB是同一目标")

(7)显示追踪的结果,将两帧图像合并到一起,用连线表示目标的运行轨迹,如图5所示。

 1 mask1 = Draw(frame_1,bbox1)  #绘制在第一帧中检测到的目标
  2 mask2 = Draw(frame_2,bbox2)  #绘制在第二帧中检测到的目标
  3 all_img = np.hstack((mask1, mask2)) #将两帧图像合并成一幅图像
  4 #绘制运动轨迹
  5 H,W = mask1.shape[:2]
  6 cv2.line(all_img,(int(A[0]),int(A[1])),(W+int(C[0]),int(C[1])),(0,255,255),2)
  7 ##显示追踪结果
  8 plt.title('目标运行轨迹')
9plt.imshow(all_img)

5bd94f5c-77c1-11ee-939d-92fbcf53809c.png

5目标的运行轨迹


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模型
    +关注

    关注

    1

    文章

    2707

    浏览量

    47706
  • 图像分类
    +关注

    关注

    0

    文章

    87

    浏览量

    11839
  • 目标检测
    +关注

    关注

    0

    文章

    185

    浏览量

    15456

原文标题:如何使用质心法进行目标追踪--文末送书

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    追踪跳线都用哪些场景

    鹰眼追踪跳线是一种用于机房管理的工具,可以查询铜缆和光缆(包括超五类、六类、超六类屏蔽/非屏蔽,单模/多模光纤等)。其应用场景包括但不限于: 机房管理:机房是网络设备的核心区域,鹰眼追踪跳线可用
    的头像 发表于 03-21 10:03 96次阅读

    在ELF 1 开发板上实现读取摄像头视频进行目标检测

    当前,将AI或深度学习算法(如分类、目标检测和轨迹追踪)部署到嵌入式设备,进而实现边缘计算,正成为轻量级深度学习算法发展的一个重要趋势。今天将与各位小伙伴分享一个实际案例:在ELF1开发板上成功部署
    的头像 发表于 01-24 10:38 282次阅读
    在ELF 1 开发板上实现读取摄像头视频<b class='flag-5'>进行</b><b class='flag-5'>目标</b>检测

    西门子PLC进行连续数据采集、时序和故障追踪的方法

    西门子可以通过博图软件进行PLC数据的采集和状态记录,但是,仅适用于S7-1200和S7-1500,且不能连续录波。如果需要连续记录PLC内的数据,或者进行长时间的时序和故障追踪,可以采用第三方的软件。
    的头像 发表于 01-05 10:30 732次阅读

    设计制作一个运动目标控制与自动追踪系统

    红色激光笔发射的光斑用来模拟运动目标。光斑落在正前方距离 1m 处的白色屏幕上,光斑直径≤1cm。红色光斑位置控制系统控制光斑能在屏幕范围内任意移动。
    的头像 发表于 12-14 16:21 1355次阅读
    设计制作一个运动<b class='flag-5'>目标</b>控制与自动<b class='flag-5'>追踪</b>系统

    追踪器arduino原理

    追踪器 (LDR) 是一种基于光敏电阻的光测量器件,常用于测量光强度和控制感应器。在 Arduino 上使用 LDR,可以实现对光线进行检测、测量和控制的功能。本文将详细介绍 LDR
    的头像 发表于 12-08 10:22 613次阅读

    如何快速利用蓝牙 AoA 和 AoD 进行室内物流追踪

    作者:Jeff Shepard 仓库和工厂的实时资产追踪是工业 4.0 的一个重要方面。有各种技术可用来部署实时定位服务 (RTLS) ,以进行资产追踪和改善物流系统。全球定位系统(GPS) 已广泛
    的头像 发表于 10-03 14:54 1080次阅读
    如何快速利用蓝牙 AoA 和 AoD <b class='flag-5'>进行</b>室内物流<b class='flag-5'>追踪</b>

    如何使用CoreSight Access Library 1.0版本进行目标跟踪

    的跟踪并分析Linux内核本身内函数的使用情况。 用户空间的例子可以被修改为实时的“飞行记录器”监控,或者用于飞机坠毁后的分析。 使用CoreSight访问库CoreSight跟踪对Linux内核进行
    发表于 08-12 07:52

    电线追踪器电路原理图讲解

    电线追踪器专门设计用于帮助定位通电和断电的电线、电缆和管道,无论是地下还是隐藏在墙壁中。它们的工作原理是 在目标电线或管道上感应信号,并使用该信号来确定目标的位置及其行进方向 。
    的头像 发表于 08-02 15:49 2137次阅读
    电线<b class='flag-5'>追踪</b>器电路原理图讲解

    基于未知物体进行6D追踪和3D重建的方法

    如今,计算机视觉社区已经广泛展开了对物体姿态的 6D 追踪和 3D 重建。本文中英伟达提出了同时对未知物体进行 6D 追踪和 3D 重建的方法。该方法假设物体是刚体,并且需要视频的第一帧中的 2D
    的头像 发表于 07-03 11:24 339次阅读
    基于未知物体<b class='flag-5'>进行</b>6D<b class='flag-5'>追踪</b>和3D重建的方法

    远足追踪器开源分享

    电子发烧友网站提供《远足追踪器开源分享.zip》资料免费下载
    发表于 07-03 09:29 0次下载
    远足<b class='flag-5'>追踪</b>器开源分享

    推杆速度追踪器开源分享

    电子发烧友网站提供《推杆速度追踪器开源分享.zip》资料免费下载
    发表于 06-29 11:19 0次下载
    推杆速度<b class='flag-5'>追踪</b>器开源分享

    自动焊缝追踪系统的作用

    焊接是现代制造业中常见的连接工艺,而焊缝的准确性对于焊接质量至关重要。传统的焊接过程中,操作人员需要准确地跟踪焊缝位置,以确保焊接的准确性。然而,这种手动追踪存在操作繁琐、容易出错等问题。随着自动化
    的头像 发表于 06-27 15:21 346次阅读
    自动焊缝<b class='flag-5'>追踪</b>系统的作用

    LoRa GPS追踪器教程

    电子发烧友网站提供《LoRa GPS追踪器教程.zip》资料免费下载
    发表于 06-27 14:26 0次下载
    LoRa GPS<b class='flag-5'>追踪</b>器教程

    基于机器视觉的典型多目标追踪算法应用实践

    TBD(Tracking-by-Detection)与DFT(Detection-Free Tracking)也即基于检测的多目标跟踪与基于目标外形的先验知识无需检测器的多目标跟踪。TBD是目前学界业界研究的主流。
    的头像 发表于 06-15 17:22 1045次阅读
    基于机器视觉的典型多<b class='flag-5'>目标</b><b class='flag-5'>追踪</b>算法应用实践

    电磁仿真需要牢记的内功心法

    在射频、微波设计中,各种“强大”的商用电磁仿真软件的功能包罗万象,这篇“内功心法”从算法角度出发,提示大家如何谨慎选择仿真软件。
    的头像 发表于 06-07 11:06 383次阅读
    电磁仿真需要牢记的内功<b class='flag-5'>心法</b>