目标跟踪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

相关文章

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定