小白入坑深度学习不久。摸索过程中利用Matllab工具总结了一套对批量数据集处理的一些流程(附代码)。
主要是针对自己的实验采集到的数据集,如何能把它批量处理后变成我们所使用的网络模型里所需要的数据集,希望能对大家有一定帮助。
// 批量图像重命名
% pt = 'E:\keras-u-net-master\data\test\image\'; % 需要处理的图像文件夹的路径
% ext = '*.png';
% dis = dir([pt ext]);
% nms = {dis.name};
%
% for i = 1:1:length(nms)
% old_name = [pt nms{i}]; %获取每张图片的名字
% new_name = strcat('',num2str(i-1),'.png'); %对图片转换为名字为1.png的格式,如要命名成01或者001之类的,在‘’里面添加相应格个数的0即可
% eval(['!rename' 32 old_name 32 new_name]); %生成新名字
% end
// 批量resize
clc,clear
file_path = 'E:\keras-u-net-master\data\test\image\';% 需要处理的图像文件夹的路径
img_path_list = dir(strcat(file_path,'*.png'));%获取该文件夹中所有格式的图像,这里是png,根据不同需求可以进行更改
img_num = length(img_path_list);%获取图像总数量
if img_num > 0 %有满足条件的图像
for j = 1:img_num %逐一读取图像
image_name = img_path_list(j).name;% 图像名
image = imread(strcat(file_path,image_name));
image = imresize(image,[512 512]); %%修改图片尺寸
fprintf('%d %d %s\n',i,j,strcat(file_path,image_name));% 显示正在处理的图像名
imwrite(image,strcat('E:\语义分割代码\keras-u-net-master\data\test\image\1\',image_name)); %%保存图片 ,D:\traincar\newzheng\是储存修改图像后的文件夹
end
end
// 图片格式转换
##这里演示将jpg格式文件转换成png格式
clc,clear
pgms = dir('E:\keras-u-net-master\data2\train\*.jpg'); % 需要处理的图像文件夹的路径
num_pgms = length( pgms );
for i = 1 : num_pgms
pgm_file = fullfile( 'E:\语义分割代码\keras-u-net-master\data2\train\', pgms(i).name );
pgm = imread( pgm_file);
%%% 核心代码:将 pgm_file 转换为 jpg 格式图片,并保存. %%%
% 第一步,解析文件名 pgm_file ,注意,pgm_file 包括路径+文件名+后缀,如 pgm_file = 'C:\Users\kitty\test\test.pgm'
% path = 'C:\Users\kitty\test' name = 'test' ext = '.pgm'
[ path , name , ext ] = fileparts( pgm_file ) ;
% 第二步,生成新的文件名
filename = strcat( name , '.png' );
% 第三步,生成文件全称
jpg_file = fullfile( 'E:\语义分割代码\keras-u-net-master\data2\train\image\' , filename ) ;
% 第四步,将 pgm 以 jpg_file 作为文件名,保存为 jpg 格式.
imwrite( pgm , jpg_file , 'png' );
end
// 批量灰度化
clear
clc
% 读入需要转化为灰度图像的图片信息
file_path = 'E:\keras-u-net-master\data\PPA\image1\'; % 要转化的图片的文件夹
img_path_list = dir(strcat(file_path,'*.png')); % 要转化的图片的详细信息
img_num = length(img_path_list); % 要转化的图片的个数
% 创建一个保存灰度图像的文件夹
new_folder = 'E:\代码\keras-u-net-master\data\PPA1\image1\';
mkdir(new_folder); % 创建文件夹
addpath(new_folder); % 添加文件夹路径
% 批量生成灰度图像并保存到创建的文件夹下
for j = 1:img_num
image_name = img_path_list(j).name; % 选择第j个图片
fprintf('%d %s\n',j,strcat(file_path,image_name)); % 显示图片名称
originalimg = imread(strcat(file_path,image_name)); % 读入第j个图片
imgtemp=im2double(rgb2gray(originalimg));
imgtemp=rgb2gray(originalimg);
% originalimg=originalimg(:,:,2);% 将第j个转化为灰度图
imwrite(imgtemp,[new_folder,image_name]);% 灰度图像批量保存在文件夹下
end
// 针对部分区域快速裁剪
%以鼠标点击点位实现截图,文件夹批量处理
clear;clc;clear all;
file_path = uigetdir('*.*','Please Select Folder');
img_path_list = dir(strcat(file_path,'\','*.jpg'));
mkdir(strcat(file_path,'\Crop'));
img_num = length(img_path_list);
I=cell(1,img_num);
if img_num > 0
for j = 1:img_num
image_name = img_path_list(j).name;
image = imread(strcat(file_path,'\',image_name));
I{j}=image;
%检查当前图片大小
width=size(I{j},2);
length=size(I{j},1);
%显示图像,
imshow(image);
% 实现鼠标框选并记录选框的坐标
pos = getPosition(imrect);
%设定截图大小为224*224pixel,以鼠标点击的位置作为截图的中心
x_crop = 511;
y_crop = 511;
%计算截图的起始和终点位置
col=round(pos(1)-x_crop/2) : round(pos(1) + x_crop/2);
row=round(pos(2)-y_crop/2) : round(pos(2) + y_crop/2);
%检出是否越界
if (pos(1)+x_crop/2) > width
col = round(width-x_crop) : round(width);
end
if (pos(2)+y_crop) > length
row = round(length-y_crop) : round(length);
end
%生成裁剪后的图片并显示(延时0.3s)
subwin=image(row,col,:);
figure;
% imshow(subwin);
% pause(0.3);
%保存图片到对应的文件夹下,并关闭当前文件的图片
imwrite(subwin,strcat(file_path,'\Crop\',image_name));
close all;
%当图片都检测完毕,提示截图结束。
if j == img_num
h = msgbox('All picture have been cropped!')
end
end
end
以上这几种方法可以循环使用,最后祝大家炼丹之路都一帆风顺哈哈