目标跟踪CLE绘图 OTB数据跟踪绘图 mat文件txt文件 相互转换

2024-08-28 03:38

本文主要是介绍目标跟踪CLE绘图 OTB数据跟踪绘图 mat文件txt文件 相互转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

跟踪  OTB数据集 绘图

文章主要3个内容  

1.txt文件数据--》转换 mat文件 (在matlab上画图)

2.mat文件--》txt文件 画CLE图

3.CLE画图代码  跟踪目标中心距离误差 

1.txt文件转换成 mat文件

把python跟踪得到txt数据集 转换成 matlab使用mat文件  画图

matlab程序代码


clear;clc;
close all;
% txt路径
txt_path  = 'D:\atom\default_000\';
% mat路径
mat_path = 'D:\atom\default\';
mkdir(mat_path);
% 跟踪器名字
tracker='ATOM';txt_files = dir([txt_path '*.txt']);txt_files={txt_files.name};for i=1:numel(txt_files)region=csvread([txt_path txt_files{i}]);results{1}.type = 'rect';results{1}.res = region;results{1}.len = length(region);videoname=txt_files{i};videoname=videoname(1:length(videoname)-4);save([mat_path videoname '_' tracker '.mat'], 'results');end

把得到mat文件放入OTB下面results文件目录下  perfplot.m一下 

 

2.mat文件转换txt文件

matlab程序代码

clear;clc;
close all;
% txt路径
txt_path  = 'D:\liux_code\deep_sort_yolov3\results\txtpsps1\';
% mat路径
%mat_path = 'D:\liux_code\deep_sort_yolov3\results\mat\';
mat_path = 'D:\OTB\tracker_benchmark_v1\results\results_OPE_CVPR12\';mkdir(txt_path);
% 跟踪器名字
tracker='bacf';mat_files = dir([mat_path '*.mat']);mat_files={mat_files.name};for i=1:numel(mat_files)region=load([mat_path mat_files{i}]);results= region.results{1};results=results.res;
%     results{1}.res = region;
%     results{1}.len = length(region);videoname=mat_files{i};videoname=videoname(1:length(videoname)-4);%fid = fopen([txt_path videoname '_' tracker '.txt'] ,'wt');fid = fopen([txt_path videoname '.txt'] ,'wt');[M,N]=size(results);for m =1:Mfor n= 1:Nif n ==4 fprintf(fid,'%d',results(m,n));elsefprintf(fid,'%d\t',results(m,n));endendfprintf(fid,'\n');endfclose(fid);%save([txt_path videoname '_' tracker '.txt'  ], 'results','-ASCII', '-tabs');%'-ASCII -double'end

TRE只需要转换第一栏第一个数据集代码  

转换后这样算正常

如果出现这样的 说明你的mat文件  出现问题 在跟踪程序里需要修改

在跟踪程序中(matlab 相关滤波跟踪)

寻找box 跟踪框

box = [floor(pos([2,1])) - floor(target_sz([2,1])/2), floor(target_sz([2,1]))];rect_results(frame,:)=box;%visualization

floor是取实数 代码更改成类似的 只要跟踪结果mat文件 都是实数就可以 

得到txt跟踪数据集  我们来画CLE图像  

3.CLE绘图 

python程序代码

from pylab import *
import math
import matplotlib.pyplot as plt
import numpyimport os# calculate the Pre,CLE is CENTOR LOCATION ERROR,and it is a list
def calculatePre(CLE):res = []for thresh in range(1, 100):tmp = numpy.array(CLE)  # get the temporary variabletmp[tmp <= thresh] = 1tmp[tmp > thresh] = 0num = sum(tmp)rate = float(num) / float(tmp.size)res.append(rate)return res# 定义画中心位置误差图像的函数
def drawCLE(title, ResGroundLines, ResKcfLines, ResKcfILines,ResKcfILines2,ResKcfILines3):CleKcf = []list1 =['Car4','CarScale','Couple', 'Crossing', 'Faceocc1','Girl','Singer1','Subway','Walking','Walking2','Woman','Sylvester','Jogging-1',]# 读取groundtruth_rect里数据 CleKcfI = []                                        # 有的 , 隔开  有的是空格 隔开 CleKcfI2 = []CleKcfI3 = []num_of_frame = len(ResGroundLines)   # 帧数,去掉表头和最后一帧(主要是我结果好像少写了一帧)for index in range(1, (num_of_frame )):# 每一行拿出来,第一列是分别是 frame   x   y   width   height,分离出来并转换成数字if title  in list1:GroundPos = (ResGroundLines[index]).split('\t')else:GroundPos = (ResGroundLines[index]).split(',')#KcfPos = (ResKcfLines[index]).split('\t')KcfIPos = (ResKcfILines[index]).split('\t')# KcfIPos = KcfIPos.replace('\n')KcfIPos2 = (ResKcfILines2[index]).split('\t')KcfIPos3 = (ResKcfILines3[index]).split('\t')GroundPos = list(map(int, GroundPos))#KcfPos = list(map(int, KcfPos))KcfIPos = list(map(int, KcfIPos))KcfIPos2 = list(map(int, KcfIPos2))KcfIPos3 = list(map(int, KcfIPos3))# 提取中心位置P_G = [GroundPos[0] + GroundPos[2] / 2, GroundPos[1] + GroundPos[3] / 2]#P_K = [KcfPos[0] + KcfPos[2] / 2, KcfPos[2] + KcfPos[3] / 2]P_KI = [KcfIPos[0] + KcfIPos[2] / 2, KcfIPos[2] + KcfIPos[3] / 2]P_KI2 = [KcfIPos2[0] + KcfIPos2[2] / 2, KcfIPos2[2] + KcfIPos2[3] / 2]P_KI3 = [KcfIPos3[0] + KcfIPos3[2] / 2, KcfIPos3[2] + KcfIPos3[3] / 2]#CLE_KCF = math.sqrt((P_K[0] - P_G[0]) ** 2 + (P_K[1] - P_G[1]) ** 2)CLE_KCF_I = math.sqrt((P_KI[0] - P_G[0]) ** 2 + (P_KI[1] - P_G[1]) ** 2)CLE_KCF_I2 = math.sqrt((P_KI2[0] - P_G[0]) ** 2 + (P_KI2[1] - P_G[1]) ** 2)CLE_KCF_I3 = math.sqrt((P_KI3[0] - P_G[0]) ** 2 + (P_KI3[1] - P_G[1]) ** 2)#CleKcf.append(CLE_KCF)CleKcfI.append(CLE_KCF_I)CleKcfI2.append(CLE_KCF_I2)CleKcfI3.append(CLE_KCF_I3)plt.figure()  # CLE  CENTOR LOCATION ERRORplt.title(title + "CLE Plot")#plt.plot(CleKcf, color='red', label="atom")#####################################################plt.plot(CleKcfI, color='black', label="samf")#plt.plot(CleKcfI2, color='red', label="samfpaceauto")plt.plot(CleKcfI3, color='red', label="our")mpl.rcParams['font.sans-serif'] = ['SimHei']plt.xlabel('帧数',fontsize =13)plt.ylabel('中心位置误差',fontsize =13)plt.legend()# 保存图片plt.savefig("results//samfpsps1//" + title + ".png", dpi=600)# PreKcf = calculatePre(CleKcf)# PreKcfI = calculatePre(CleKcfI)## plt.figure()  # PRECISION PERCENT# plt.title(title + "Precision Plot")# plt.plot(PreKcf, color='red', label='atom')# plt.plot(PreKcfI, color='blue', label="bacf")# plt.legend()# plt.savefig("results//" + title + "_Pre.png", dpi=600)# 主函数
# for target in lines:# target有个回车,这里需要把这个回车给去掉,然后下面把当前target下的文件读取# AveFpsKcf = open(path + target[:-1] + ave_fps_kcf)# AveFpsKcfI = open(path + target[:-1] + ave_fps_kcf_inter)
#s = "basketball"
a = ['Jogging-1','Basketball', 'Bolt', 'Boy', 'Car4', 'CarDark', 'CarScale','Coke', 'Couple', 'Crossing', 'David2', 'David3', 'David', 'Deer','Dog1', 'Doll', 'Dudek', 'Faceocc1', 'Faceocc2', 'Fish', 'Fleetface','Football', 'Football1', 'Freeman1', 'Freeman3', 'Freeman4', 'Girl','Ironman',  'Jumping', 'Lemming', 'Liquor', 'Matrix','Mhyang', 'MotorRolling', 'MountainBike', 'Shaking', 'Singer1','Singer2', 'Skating1', 'Skiing', 'Soccer','Subway', 'Suv','Sylvester','Tiger2', 'Trellis','Walking', 'Walking2', 'Woman']  #'Jogging-1''Tiger1',path = "results//"
otbpath = "D://OTB//OTB100//"
txtfile = "txtpsps1//"
#os.makedirs(r"results//samfpsps1" )
for s in a:if s =='Jogging-1':res_ground = otbpath+'jogging'+"./groundtruth_rect.1.txt"else:res_ground = otbpath + s + "./groundtruth_rect.txt"res_bacfapceauto = "./results/" + txtfile + s +"_samfapceauto.txt"res_bacf = "./results/"+txtfile + s +"_samf.txt"res_bacfapce = "./results/" +txtfile + s +"_samfpsps1.txt"ResGround = open(res_ground)#Resatom= open(res_atom)Resbacfauto = open(res_bacfapceauto)Resbacf = open(res_bacf)Resbacfapce = open(res_bacfapce)# AveFpsKcfLines = AveFpsKcf.readlines()# AveFpsKcfILines = AveFpsKcfI.readlines()ResGroundLines = ResGround.readlines()#ResKcfLines = Resatom.readlines()ResKcfLines = 0ResKcfILines = Resbacf.readlines()ResKcfILines2 = Resbacfauto.readlines()ResKcfILines3 = Resbacfapce.readlines()target = sdrawCLE(target, ResGroundLines, ResKcfLines, ResKcfILines,ResKcfILines2,ResKcfILines3)

这篇关于目标跟踪CLE绘图 OTB数据跟踪绘图 mat文件txt文件 相互转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

Nacos日志与Raft的数据清理指南

《Nacos日志与Raft的数据清理指南》随着运行时间的增长,Nacos的日志文件(logs/)和Raft持久化数据(data/protocol/raft/)可能会占用大量磁盘空间,影响系统稳定性,本... 目录引言1. Nacos 日志文件(logs/ 目录)清理1.1 日志文件的作用1.2 是否可以删除

使用Python实现网页表格转换为markdown

《使用Python实现网页表格转换为markdown》在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,本文将使用Python编写一个网页表格转Markdown工具,需... 在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,以便在文档、邮件或

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp

Python Pandas高效处理Excel数据完整指南

《PythonPandas高效处理Excel数据完整指南》在数据驱动的时代,Excel仍是大量企业存储核心数据的工具,Python的Pandas库凭借其向量化计算、内存优化和丰富的数据处理接口,成为... 目录一、环境搭建与数据读取1.1 基础环境配置1.2 数据高效载入技巧二、数据清洗核心战术2.1 缺失

Python将字符串转换为小写字母的几种常用方法

《Python将字符串转换为小写字母的几种常用方法》:本文主要介绍Python中将字符串大写字母转小写的四种方法:lower()方法简洁高效,手动ASCII转换灵活可控,str.translate... 目录一、使用内置方法 lower()(最简单)二、手动遍历 + ASCII 码转换三、使用 str.tr

Python处理超大规模数据的4大方法详解

《Python处理超大规模数据的4大方法详解》在数据的奇妙世界里,数据量就像滚雪球一样,越变越大,从最初的GB级别的小数据堆,逐渐演变成TB级别的数据大山,所以本文我们就来看看Python处理... 目录1. Mars:数据处理界的 “变形金刚”2. Dask:分布式计算的 “指挥家”3. CuPy:GPU