将通过Matlab 2018b的Image Labeler标注的数据写入txt
matlab 2018b稍有改动,数据标注后的Label Session导入MATLAB没找到ROI区域数据,因此本文用的mat文件是通过Image Labeler的Export Labels导出的
function
%函数说明:读取通过MATLAB 2018b Image Labeler标记并用Export Labels导出的mat文件,将
%标记的ROI区域写入到同一个txt文件并存储。
%示例调用方式 Save_Raw_Samples_ROIs('G:\AutoLogosCopy\aodi\aodi.mat','G:\test\ROI_labels.txt');
%**************************************************************************
%第一个参数:通过MATLAB 2018b Image Labeler中的Export Labels导出的mat文件
%这里只需输入其全路径即可,如'G:\AutoLogosCopy\aodi\aodi.mat'
%第二个参数:为待写入的txt文件全路径,如'G:\test\ROI_labels.txt'
function Save_Raw_Samples_ROIs(labelsession_data_path,out_path)
load(labelsession_data_path);%matlab2018b默认载入后变量名为gTruth
image_counts = size(gTruth.DataSource.Source,1);%读取标记图片张数,2为列,1为行
label_count = size(gTruth.LabelDefinitions,1);%读取设置的标签数
%pause(1);%延时1s,确保不会出现重命名
%current_time = datestr(now,'yyyy-mm-dd-HH-MM-SS_');
% if ~isdir(output_path) %判断路径是否存在
% mkdir(output_path);
% end
fid = fopen(out_path,'a');
%为每个框写入txt数据
for i = 1:image_counts%对每张图依次处理,提取ROI区域
I = imread(gTruth.DataSource.Source{i,1});
TW = size(I,1);%图片宽度
TH = size(I,2);%图片高度
for k = 1:label_count%对每张图的每个标签依次处理
count=size(gTruth.LabelData{i,k}{1,1},1);%每张图片中某个标签的标注次数
if(count==0)
break;
end
for m = 1:count
fprintf(fid,'%s\t',gTruth.DataSource.Source{i,1});%图片名
fprintf(fid,'%s\t',gTruth.LabelDefinitions{k,1}{1,1});%类别
fprintf(fid,'%d\t',TW);%图片宽度
fprintf(fid,'%d\t',TH);%图片高度
fprintf(fid,'%d\t',gTruth.LabelData{i,k}{1,1}(m,1));%Label-x
fprintf(fid,'%d\t',gTruth.LabelData{i,k}{1,1}(m,2));%Label-y
fprintf(fid,'%d\t',gTruth.LabelData{i,k}{1,1}(m,3));%框宽
fprintf(fid,'%d\t',gTruth.LabelData{i,k}{1,1}(m,4));%框高
fprintf(fid,'\r\n');
end
end
end
fclose(fid);
为每个mat文件调用函数
clc,clear
matDir = dir('G:\AutoLogosCopy\*\*_sr.mat');%所有mat文件路径
num_matDir = length(matDir);
for i = 1:num_matDir%为每个mat文件调用Save_Raw_Samples_ROIs
labelsession_data_path = fullfile(matDir(i).folder, matDir(i).name);
out_path = 'G:\test\ROI_labels.txt';
Save_Raw_Samples_ROIs(labelsession_data_path,out_path);
end