生成训练集的matlab代码

目的:给文章3生成训练集
将清晰自然图像与73个可能的运动核卷积合成模糊图像,然后从模糊图像中随机裁剪30×30×3彩色块作为训练patches ,之后将对应的运动核标签作为训练标签 。从PASCAL VOC 2010 数据库中随机采样1000张图片来生成训练集,最终形成大概一百四十万个数据对的训练集

  1. 读取文件夹内文件名
  2. 给文件夹内图片改名字
  3. 随机裁剪
  4. 保存.mat文件
  5. 保存生成图像并将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






  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Matlab中,可以使用randperm函数来随机生成训练集和测试集。引用中给出了一个示例代码,其中data是一个6x6的矩阵,labels是一个6x1的标签向量。通过randperm函数生成一个随机排列的索引n,然后将前4个索引作为训练集的索引,后面的索引作为测试集的索引。通过这些索引可以将原始数据和标签分割成训练集和测试集。具体代码如下: ```matlab % 初始化数据和标签 data = magic(6); labels = [1 1 1 2 2 2'; % 随机生成训练集和测试集 n = randperm(size(data, 1)); train_data = data(n(1:4), :); train_labels = labels(n(1:4), :); test_data = data(n(4:end), :); test_labels = labels(n(4:end), :); ``` 其中train_data和train_labels是训练集的数据和标签,test_data和test_labels是测试集的数据和标签。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [MATLAB 随机产生训练集和测试集](https://blog.csdn.net/MissXy_/article/details/81316762)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [随机划分训练集和测试集](https://blog.csdn.net/weixin_45471642/article/details/124619232)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值