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

    文章

    3648

    浏览量

    51710
  • 图像分类
    +关注

    关注

    0

    文章

    96

    浏览量

    12413
  • 目标检测
    +关注

    关注

    0

    文章

    230

    浏览量

    16378

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    预告 多目标追踪24G雷达传感

    在智能家居、智慧商业、物联网设备日益普及的今天,精准、可靠的人体感知与定位技术成为产品智能化的核心。深圳市海凌科电子有限公司正式推出HLK-LD2453高精度多目标识别毫米波雷达传感器,以毫米波技术
    的头像 发表于 12-01 11:08 305次阅读
    预告 多<b class='flag-5'>目标</b><b class='flag-5'>追踪</b>24G雷达传感

    广和通小尺寸低功耗Cat.M模组MQ771-GL实现样,专注资产追踪应用

    11月,广和通宣布Cat.M模组MQ771-GL正式进入工程样阶段。MQ771-GL凭借极致尺寸、超低功耗、全球频段覆盖和稳定网络兼容性四大核心优势,为资产追踪等物联网场景提供高性价比的连接
    的头像 发表于 11-20 10:59 128次阅读
    广和通小尺寸低功耗Cat.M模组MQ771-GL实现<b class='flag-5'>送</b>样,专注资产<b class='flag-5'>追踪</b>应用

    目标追踪的简易实现:模板匹配

    往往是先在一个静态的图象中寻找到某一片像素区域(比如从背景画面中框选出人脸或文字),然后再对这片像素区域作分析(比如提取人脸关键点信息等等);而目标追踪则是在一段视频流中进行,它根据指定的追踪
    发表于 10-28 07:21

    瑞芯微RV1126B开发套件评测大赛正式开赛!(文末附报名二维码)

    瑞芯微RV1126B开发套件评测大赛正式开赛!(文末附报名二维码)
    的头像 发表于 10-27 14:27 299次阅读
    瑞芯微RV1126B开发套件评测大赛正式开赛!(<b class='flag-5'>文末</b>附报名二维码)

    基于RT-Thread与K230(玄铁C908)的运动目标控制与追踪系统 | 技术集结

    题目:运动目标控制与追踪系统本项目基于K230平台实现运动目标位置复位、屏幕边框巡航、胶带正方形巡航、数字8循迹演示;并预留自动追踪红色光斑的扩展接口。目录项目概述题目要求—功能对照硬
    的头像 发表于 08-29 17:04 5245次阅读
    基于RT-Thread与K230(玄铁C908)的运动<b class='flag-5'>目标</b>控制与<b class='flag-5'>追踪</b>系统 | 技术集结

    如何使用树莓派与OpenCV实现面部和运动追踪的云台系统?

    大家好,这是一个树莓派和OpenCV的连载专题。使用树莓派与OpenCV实现姿态估计和面部特征点追踪使用树莓派与OpenCV实现面部和运动追踪的云台系统使用树莓派和OpenCV实现手部识别与手指识别
    的头像 发表于 08-14 17:45 957次阅读
    如何使用树莓派与OpenCV实现面部和运动<b class='flag-5'>追踪</b>的云台系统?

    使用aicube进行目标检测识别数字项目的时候,在评估环节卡住了,怎么解决?

    使用aicube进行目标检测识别数字项目的时候,前面一切正常 但是在评估环节卡住了,一直显示正在测试,但是完全没有测试结果, 在部署完模型后在k230上运行也没有任何识别结果 期待结果和实际结果
    发表于 08-13 06:45

    【GM-3568JHF开发板免费体验】OpenCV 视频目标跟踪 ( CamShift)

    的调整,使其能够适应目标在视频中的尺寸和旋转变化。 CamShift 算法的基本步骤如下: 1)初始化窗口:与 MeanShift 相同,在视频的第一帧中选择初始窗口。 2)计算质心:在当前窗口中,计算
    发表于 08-09 13:19

    如何在树莓派 AI HAT+上进行YOLO目标检测?

    YOLO目标检测?如何在树莓派AIHAT+上进行YOLO姿态估计?今天是第三部分:如何在树莓派AIHAT+上进行YOLO目标检测?如果大家对这个专题感兴趣,记得
    的头像 发表于 07-19 08:34 1189次阅读
    如何在树莓派 AI HAT+上<b class='flag-5'>进行</b>YOLO<b class='flag-5'>目标</b>检测?

    资产追踪与室内导航

    在数字化转型的浪潮中,资产追踪与室内导航作为两项关键技术,正在改变企业管理空间和资源的方式。从医院高效管理医疗设备,到商场为顾客提供无缝导航体验,这两项技术在提升效率、降低成本和优化用户体验方
    的头像 发表于 07-04 18:22 366次阅读

    传感器数据计算质心位移轨迹,结果不理想

    背景如下 : 想要使用惯性传感器数据(包含时间戳、三轴加速度、三轴陀螺仪数据、三轴磁力计数据、四元数)计算质心的位移轨迹。 计算步骤如下: 1、使用低通滤波对加速度、陀螺仪数据、磁力计数据 进行滤波
    发表于 06-24 17:07

    RFID在资产追踪中的应用

    RFID是一种通过无线电波进行数据读写和物体识别的技术。它由电子标签、读写器和天线组成,能够实现非接触式的数据交互。相比传统的条形码技术,RFID具有更高的效率、更强的抗污染能力和更远的读取距离
    的头像 发表于 04-11 16:39 647次阅读
    RFID在资产<b class='flag-5'>追踪</b>中的应用

    RFID在物流追踪中的应用

    RFID是一种通过无线电波进行数据读写和物体识别的技术。它由标签、读写器和天线组成,能够实现非接触式的数据交互。相比传统的条形码技术,RFID具有更高的效率、更强的抗污染能力和更远的读取距离一
    的头像 发表于 04-03 15:03 754次阅读
    RFID在物流<b class='flag-5'>追踪</b>中的应用

    睿创微纳双光谱追踪系统破解行业难题

    目标隐匿于浓雾、黑夜或密林,传统监控束手无策?当车牌藏身车流、无人机画面剧烈抖动,追踪系统频频“失明”?
    的头像 发表于 02-26 13:56 639次阅读

    智慧园区人员定位及轨迹追踪技术哪个好?

    智慧园区作为城市发展的重要组成部分,其管理和服务效率的提升日益受到重视。人员定位及轨迹追踪技术作为智慧园区建设的核心环节之一,对于提高园区安全性、优化资源配置、提升服务体验具有重要意义。然而,传统
    的头像 发表于 01-22 11:18 879次阅读
    智慧园区人员定位及轨迹<b class='flag-5'>追踪</b>技术哪个好?