原文出处:https://blog.csdn.net/tsyccnh/article/details/50812632 many thinks to the originial author
由于用的是matlab2018b, image Labeler的数据生成的mat文件 与原文的变量有差异,因此做了修改。
功能:用于将标记的图片区域存为小图。
大部分程序时基于原文,仅做了部分修改,以适应新版本的要求。如果作者认为我侵权了,请告知。我删除。
Test by matlab 2018b
%作者:史丹利复合田 edit by Jun Zhang
%日期:2016年3月 edit by Mar 28,2019
%函数说明:读取通过MATLAB Training Image标记并保存的labelingSession数据,将
%这些标记的ROI区域转换成bmp图片并存储。图片的名称采用了时间+序号的存储方式,
%所以多次读取这一函数并将结果存入同一文件夹也不会造成命名冲突
%示例调用方式 Save_Raw_Samples_ROIs('E:\TSY\Code\labelingSession.mat','G:\Samples\2016-3-5');
%**************************************************************************
%第一个参数:通过MATLAB Training Image
%Labeler工具导出的labelingSession数据,为mat格式,这里只需输入其全路径即可,如'C:\labelingSession.mat'
%第二个参数:为待导出的文件存储的文件夹,如'G:\Samples\2016-3-1'
%所有标记过的图像从0开始索引为文件名进行存储
function Save_Raw_Samples_ROIs(labelingsession_data_path,output_path)
%%roi_info =
load(labelingsession_data_path);%% just load it, the gTruth in the workspace
image_counts = size(gTruth.LabelData,1);%struct结构与普通矩阵的索引方式不同,第一个为列,第二个为行
roi_index = 0;
pause(1);%延时1s,确保不会出现重命名
current_time = datestr(now,'yyyy-mm-dd-HH-MM-SS_');
if ~isdir(output_path) %判断路径是否存在
mkdir(output_path);
end
for i = 1:image_counts%对每张图依次处理,提取ROI区域
image_info = gTruth.LabelData{i,1}; %% read the label area
image = imread(gTruth.DataSource.Source{i,1}); %% read image from the label
objectBoundingBoxes=image_info{1};
box_rows = size(image_info{1},1); %% get the row
for j = 1:box_rows%对每张图的所有ROI区域进行提取
box =objectBoundingBoxes(j,:);
cropped_roi = imcrop(image,box);
%imshow(cropped_roi);
image_full_name = strcat(output_path,'\',current_time,num2str(roi_index),'.bmp');
imwrite(cropped_roi,image_full_name);
roi_index=roi_index + 1;
end
end
调用
>> Save_Raw_Samples_ROIs('F:\work\images_big_rebar\train\train_images\RebarTrainds.mat','F:\work\images_big_rebar\train\smallRebar')
>>
结果如下,达到了截取效果。
才开始做deep learning, 因此 后面的步骤自己摸索。
感谢@史丹利复合田 提供的程序让我们的工作简化了。