将通过Matlab 2018b的Image Labeler标注的数据写入txt

将通过Matlab 2018b的Image Labeler标注的数据写入txt

  • function
  • 为每个mat文件调用函数

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

你可能感兴趣的:(Matlab)