目标跟踪实验结果转换txt转mat

做目标跟踪性能评价对比实验时,使用官方的评价工具箱需要的结果文件是.mat数据,而比较算法提供的结果文件为.txt数据。

将.txt文件转化为.mat文件的过程如下:

情况一:单个数据集文件存在一个文件夹

以跟踪算法SiamBAN为例,UAV123数据集

1、结果文件如下

2、转换代码:

clear;clc;
close all;
% txt路径
txt_path  = 'E:\Codes\MATLAB\Experiments\experimental_results\siamban_results\siamban_results\SiamBAN_UAV123\';
% mat路径
mat_path = 'E:\Codes\MATLAB\Experiments\experimental_results\siamban_results\siamban_results\SiamBAN_UAV123Mat\';
mkdir(mat_path);
% 跟踪器名字
tracker='SiamBAN';

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

3、转换结果

4、评价工具箱画图

情况二:所有数据集结果存在于一个文件夹,且有规律

以跟踪算法ATOM为例,UAV123数据集

1、结果文件如下:

2、转换代码:

先找到单个数据集结果的特点,将uav_开头的挑出来即可,然后再生成.mat文件。

clear;clc;
close all;
% txt路径
txt_path  = 'E:\Codes\MATLAB\Experiments\experimental_results\atom-20200626T063724Z-001\atom\default_000\';
% mat路径
mat_path = 'E:\Codes\MATLAB\Experiments\experimental_results\atom-20200626T063724Z-001\atom\atom_UAV123Mat\';
mkdir(mat_path);
% 跟踪器名字
tracker='ATOM';

txt_files = dir([txt_path 'uav_*.txt']);

txt_files={txt_files.name};

for i=1:numel(txt_files)
    
    [data1,data2,data3,data4]=textread([txt_path txt_files{i}],'%n%n%n%n');
    region=[data1 data2 data3 data4];
    results{1}.type = 'rect';
    results{1}.res = region;
    results{1}.len = length(region);
    
    videoname=txt_files{i};
    videoname=videoname(5:length(videoname)-4);
    save([mat_path videoname '_' tracker '.mat'], 'results');
    
end

 3、转换结果

4、评价工具箱画图

 

情况三:所有数据集结果存在于一个文件夹,且无规律

以跟踪算法ATOM为例,OTB-2015数据集

1、结果文件如下:各个数据集结果交叉在一起

2、转换代码

将需要转换的序列一个个列出来,如果序列不重复可以直接读取数据集中的目录,因为OTB-2015存在重复的情况,所以给出代码是将每个视频序列罗列出来的。

clear;clc;
close all;
% txt路径
txt_path  = 'E:\Codes\MATLAB\Experiments\experimental_results\atom-20200626T063724Z-001\atom\default_000\';
% mat路径
mat_path = 'E:\Codes\MATLAB\Experiments\experimental_results\atom-20200626T063724Z-001\atom\atom_OTB-2015Mat\';
mkdir(mat_path);
% 跟踪器名字
tracker='ATOM';

% 视频序列
% videos = {'Basketball'};
videos = {'Soccer', 'Matrix', 'Ironman', 'Deer', 'Skating1', 'Shaking', ...
    'Singer1', 'Singer2', 'CarDark', 'Car4', 'David2', 'Sylvester', 'Trellis', ...
    'Fish', 'Mhyang', 'David', 'Coke', 'Bolt', 'Boy', 'Dudek', ...
    'Crossing', 'Couple', 'Football1', 'Jogging-1', 'Jogging-2', 'Doll', ...
    'Girl', 'Walking2', 'Walking', 'Fleetface', 'Freeman1', 'Freeman3', ...
    'Freeman4', 'David3', 'Jumping', 'CarScale', 'Skiing', 'Dog1',...
    'Suv', 'MotorRolling', 'MountainBike', 'Lemming', 'Liquor', 'Woman', 'Faceocc1', ...
    'Faceocc2', 'Basketball', 'Football', 'Subway', 'Tiger1', 'Tiger2',...%OTB-2013
    'Biker','Bird1','Bird2','BlurBody','BlurCar1','BlurCar2','BlurCar3',...
    'BlurCar4','BlurFace','BlurOwl','Board','Bolt2','Box','Car1','Car2',...
    'Car24','ClifBar','Coupon','Crowds','Dancer','Dancer2','Diving',...
    'Dog','DragonBaby','Girl2','Gym','Human2','Human3','Human4_2','Human5',...
    'Human6','Human7','Human8','Human9','Jump','KiteSurf','Man','Panda',...
    'RedTeam','Rubik','Skater','Skater2','Skating2-1','Skating2-2','Surfer',...
    'Toy','Trans','Twinnings','Vase'};

for vid = 1:numel(videos)
    close all;
    disp(videos{vid});
    
    % 两个视频序列具有两个目标,跟踪两次
    if (strcmp(videos{vid}, 'Jogging-1'))
        [seq, tracking_results] = load_video_info(txt_path,'Jogging_1');
    elseif (strcmp(videos{vid}, 'Jogging-2'))
        [seq, tracking_results] = load_video_info(txt_path,'Jogging_1');
    elseif (strcmp(videos{vid}, 'Skating2-1'))
        [seq, tracking_results] = load_video_info(txt_path,'Skating2_1');
    elseif (strcmp(videos{vid}, 'Skating2-2'))
        [seq, tracking_results] = load_video_info(txt_path,'Skating2_2');
    else
        [seq, tracking_results] = load_video_info(txt_path,videos{vid});
    end
    
    % 四个视频并非从第一帧开始,最后一帧结束
    seq.VidName = videos{vid};
    st_frame = 1;
    en_frame = seq.len;
    if (strcmp(videos{vid}, 'David'))
        st_frame = 300;
        en_frame = 770;
    elseif (strcmp(videos{vid}, 'Football1'))
        st_frame = 1;
        en_frame = 74;
    elseif (strcmp(videos{vid}, 'Freeman3'))
        st_frame = 1;
        en_frame = 460;
    elseif (strcmp(videos{vid}, 'Freeman4'))
        st_frame = 1;
        en_frame = 283;
    end
    seq.st_frame = st_frame;
    seq.en_frame = en_frame;
    
    % 帧数
    num_frames=en_frame-st_frame+1;
    % 预声明目标框
    rect_position = zeros(num_frames, 4);
    
    for frame=st_frame:en_frame
        % 传递结果
        rect_position(frame-st_frame+1,:)=tracking_results(frame-st_frame+1,:);
    end
    
    % 原始数据集中,Tiger1的前5帧都是有遮挡的,所以需要直接去掉
    if (strcmp(videos{vid}, 'Tiger1'))
        st_frame1=st_frame+5;
    else
        st_frame1=st_frame;
    end
    %   save resutls.
    results{1}.type = 'rect';
    results{1}.res = rect_position;
    results{1}.fps = 1.0;
    results{1}.len = num_frames;
    results{1}.annoBegin = st_frame;
    results{1}.startFrame = st_frame1;
    save([mat_path videos{vid} '_' tracker '.mat'], 'results');
end

load_video_info.m

function [seq, tracking_results] = load_video_info(video_path,video)


tracking_results = dlmread([video_path video '.txt']);

seq.len = size(tracking_results, 1);
seq.init_rect = tracking_results(1,:);
end

3、转换结果

4、 评价工具箱画图

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值