欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何生成超分辨率数据集

程序员文章站 2022-03-09 13:03:31
...

       基于深度学习的超分辨率的始祖是来自SRCNN,其原始的代码是使用matcaffe进行编写。SRCNN中将一张干净的图作为网络label,并将label进行双三次插值进行上采样和下采样的图片作为神经网络的input,并且超分辨实际上用到的图片仅仅只有91张图片。
       为什么91张图片进行超分辨率训练得到的超分结果就能很好呢?实际上作者将每一张大的图片(如400*300分辨率)切分成多张相同大小的小图(如25*25的分辨率)进行训练
       以下根据SRCNN的源代码提供生成input和label图片的matlab代码:

clear;close all;
%% settings
folder = 'train/';
% 生成的input与label的大小
size_input = 60;
size_label = 60;

% 每一个patch之间相隔的距离
stride = 40;
% 超分辨率的倍率 
scale = 3;            
 
%% initialization
data = zeros(size_input, size_input, 1, 1);
label = zeros(size_label, size_label, 1, 1);
padding = abs(size_input - size_label)/2;
count = 0;

%% generate data
filepaths = dir(fullfile(folder,'*.bmp'));
    
for i = 1 : length(filepaths)
    % 读入图片
    image = imread(fullfile(folder,filepaths(i).name));
    image = rgb2ycbcr(image);
    % 取图片的Y通道作为label
    im_label = im2double(image(:, :, 1));
   
    [hei,wid] = size(im_label);
    % 将图片进行双三次插值下采样+下采样得到input
    im_input = imresize(imresize(im_label,1/scale,'bicubic'),[hei,wid],'bicubic');


    for x = 1 : stride : hei-size_input+1
        for y = 1 :stride : wid-size_input+1
            
            subim_label = im_label(x+padding : x+padding+size_label-1, y+padding : y+padding+size_label-1);
            imwrite(uint8(subim_label*255),['train_val/train_label/', num2str(count),'.jpg']);                                        
            subim_input = im_input(x+padding : x+padding+size_input-1, y+padding : y+padding+size_input-1);
            imwrite(uint8(subim_input*255),['train_val/train_input/', num2str(count),'.jpg']);                                 
            count=count+1;
            data(:, :, 1, count) = subim_input;
            label(:, :, 1, count) = subim_label;
        end
    end
end

对于图像去噪和或模糊等图像增强方面的图像数据集的生成均可依照上述代码进行改动生成。

转载需标明原作者地址:https://blog.csdn.net/weixin_39444746/article/details/91348530

相关标签: 超分辨率