目的:给文章3生成训练集
将清晰自然图像与73个可能的运动核卷积合成模糊图像,然后从模糊图像中随机裁剪30×30×3彩色块作为训练patches ,之后将对应的运动核标签作为训练标签 。从PASCAL VOC 2010 数据库中随机采样1000张图片来生成训练集,最终形成大概一百四十万个数据对的训练集
- 读取文件夹内文件名
- 给文件夹内图片改名字
- 随机裁剪
- 保存.mat文件
- 保存生成图像并将lable加入命名中
gen_trainset.m
%% 将图片名称改为1-11321
%参考原文链接:https://blog.csdn.net/qq_30614451/article/details/97187231
clear all;
clc;
path = 'D:\LY\DLmodify\3Deblur_cnn\Deblur_cvpr\dataset\JPEGImages\'; %被抽取图片的数据集地址
ext = '*.jpg'; %图片格式
dis = dir([path ext]); %图片路径
names = {dis.name}; %图片名称
num = length(names);
for i = 1:num
old_name = [path names{i}]; %获取每张图片的名字
new_name = strcat(num2str(i),'.jpg'); %对图片转换为名字为1.png的格式
eval(['!rename' 32 old_name 32 new_name]); %生成新名字
end
%% 从中随机抽出1000张组成待模糊裁剪集合
% MATLAB:批量随机抽取一定数量的图片
% 参考 https://blog.csdn.net/ding977921830/article/details/48810801
N=1000; %需要抽取的图片的数量
p=randperm(num);%随机生成1~num个随机整数
a=p(1:N); %取p的前N个数
for i=1:N
%读取图片的路径和名字,注意用双斜线避免转译
imageName=sprintf('D:\\LY\\DLmodify\\3Deblur_cnn\\Deblur_cvpr\\dataset\\JPEGImages\\%d.jpg',a(i));
%fprintf('%s\n',imageName);
f=imread(imageName); %读取图片
fileName=sprintf('D:\\LY\\DLmodify\\3Deblur_cnn\\Deblur_cvpr\\dataset\\train\\%d.jpg',i);%抽取的图片存放的路径
imwrite(f,fileName); %保存图片
%disp('imageName');
end
blured.m
%% 随机裁剪为30*30*3 的patch 并加上运动模糊生成对应标签
clc
clear
close all
%j = 14e5; % 需要生成patch的个数
j = 14e5;
k = 1000;
if(0) %未生成标签和图片随机序列时需要运行
knum1 = randi(len,1,n); % 随机选取n个标签
save knum1
inum1 = randi(k,1,n); % 随机生成n个图片作用顺序
save inum1
end
load('D:\LY\DLmodify\3Deblur_cnn\Deblur_cvpr\kernels.mat');
load('D:\\LY\DLmodify\\3Deblur_cnn\\Deblur_cvpr\\train_code\\knum.mat'); %加载标签的随机序列
load('D:\\LY\\DLmodify\\3Deblur_cnn\\Deblur_cvpr\\train_code\\inum.mat'); %加载图片随机序列
len = size(kernel_labels,2);
pasize = 30;
savepath = 'D:\\LY\\DLmodify\\3Deblur_cnn\\Deblur_cvpr\\dataset\\train_set\\';
%加模糊,裁剪patch并保存
for i = 1:j
ke = kernels(knum(i));
blurker = ke{1,1};
imgName = sprintf('D:\\LY\\DLmodify\\3Deblur_cnn\\Deblur_cvpr\\dataset\\train\\%d.jpg',inum(i));
I = imread(imgName);
% bI = imfilter(I,blurker,'symmetric','conv'); 不确定作者的c文件中用的哪种方法
bI = imfilter(I,blurker,'conv','circular');
pa = random_crop(bI,pasize);
fileName = [savepath,num2str(i),'_',num2str(knum(i)),'.jpg'];
% fileName = [savepath,num2str(inum(i)),'_',num2str(knum(i)),'.jpg']; 这种命名会有重复
imwrite(pa,fileName);
if(0) % 看一下模糊效果
figure;imshow(I)
figure; imshow(bI)
figure; imshow(pa)
end
end