我本意并不想搞matlab的,但是代码中涉及一部分使用matlab写的,只能学习一下和这段代码相关的语法啦
input_folder = 'GT';
kerneltype = {'g','m','d'};
original_ext = {'*.png'};
target_ext = '.png';
images = [];
for ii = 1:length(original_ext)
images = [images; dir(fullfile(input_folder, original_ext{ii}))];
end
for sf = 2:4
for kn = 1:3
output_folder = ['x',num2str(sf),'_',kerneltype{kn}];
if isdir(output_folder) == 0
mkdir(output_folder);
end
disp([sf,kn]);
for ii = 1:numel(images)
[~, name, exte] = fileparts(images(ii).name);
I = imread(fullfile(input_folder,images(ii).name) ) ;
% I = modcrop(I,lcm(16,3));
I = imresize(I, 1/sf, 'bicubic'); % 插值的方式
currentkernels = dir(fullfile('the_kernels',[kerneltype{kn},'*.mat']));
for currentkn = 1:length(currentkernels)
[~, kname, kexte] = fileparts(currentkernels(currentkn).name);
ckernel = load(fullfile('the_kernels',currentkernels(currentkn).name));
kernel = ckernel.kernel;
LR = imfilter(im2double(I), kernel, 'circular', 'conv');
imwrite(LR, fullfile(output_folder,[name,'_',kname,target_ext]));
save(fullfile(output_folder,[name,'_',kname,'.mat']),'kernel')
end
end
end
end
kerneltype = {'g','m','d'};
相当于是定义了一个列表,可以通过kerneltype{1}访问元素值,返回的是g, 注意索引是从1开始的。
original_ext = {'*.png'};
disp("-----" + length(original_ext)); % 输出 1 返回的是元素的{} 中元素的个数
num2str(2) % 是建整数类型的数转换成字符串类型
for循环: 赋值符号的右边是一个可迭代的对象
for sf = 2:4
sf
end
上面的for循环也可以写成:
for sf = [2,3,4]
sf
end
disp() 是在命令窗口输出
fullfile() % 该函数是用于构成地址字符串的,类似python中的os.path.join函数的用法
f = fullfile(‘dir1’, ‘dir2’, …, ‘filename’) %fullfile构成地址字符串;
如:输入:f = fullfile(‘C:’,’Applications’,’matlab’,’fun.m’)
得到:f =C:\Applications\matlab\fun.m
dir()
matlab中使用dir()函数获得指定文件夹下的所有子文件夹和文件,并存放在一种文件结构体数组中。
dir()函数的调用方式有三种,分别为:
1、dir('.') 列出当前目录下所有子文件夹和文件
2、dir('E:\Matlab') 列出指定目录下所有子文件夹和文件
3、dir(E:\Matlab,'*.bmp') 列出指定目录下后缀为.bmp的文件
LR = imfilter(im2double(I), kernel, 'circular', 'conv');
功能:对任意类型数组或多维图像进行滤波。
用法:B = imfilter(A,H)
B = imfilter(A,H,option1,option2,…)
或写作g = imfilter(f, w, filtering_mode, boundary_options, size_options)
其中,f为输入图像,w为滤波掩模,g为滤波后图像。filtering_mode用于指定在滤波过程中是使用“相关”还是“卷积”。
boundary_options用于处理边界充零问题,边界的大小由滤波器的大小确定。
fileparts() 是解析文件的完成路径
>> [a,b,c]=fileparts('C:\Documents and Settings\Administrator\桌面\121.jpg')
a =
C:\Documents and Settings\Administrator\桌面
b =
121
c =
.jpg
load() 函数的使用
Load 命令
命令 功能
load Filename 将名为Filename的MAT文件中的所有变量加载到工作空间中
load Filename x y z 将名为Filename的MAT文件中的x、y、z等指定变量加载到工作空间中
load Filename -regexp pat1 pat2 将名为Filename的MAT文件中符合表达式要求的变量加载到工作空间中
load Filename x y z -ASCII 将名为Filename的8位ASCII文件中的x、y、z等指定变量加载到工作空间中
参考:
https://blog. csdn .net/zhyoulun/article/details/78606382 # for循环
https://blog.csdn.net/rushkid02/article/details/7929189 # disp 命令 窗口输出
https://blog.csdn.net/qq_35318838/article/details/78780412
https://blog.csdn.net/loadqian/article/details/80656453 # fullfile的用法
https://blog.csdn.net/nuc_jingzhi/article/details/77447607 # dir() 函数的用法
https://blog.csdn.net/newcloudtech/article/details/12146111
https://blog.csdn.net/qq_18343569/article/details/50960254
https://blog.csdn.net/zhuwei0710/article/details/68169317 # imfilter 滤波
https://blog.csdn.net/u010703122/article/details/49254665 # imfilter 的 实例
https://blog.csdn.net/u010159842/article/details/52523520 # im2double使用
https://blog.csdn.net/SMF0504/article/details/70213871 # fileparts 解析文件的路径
https://blog.csdn.net/SMF0504/article/details/51789984
https://blog.csdn.net/skyxmstar/article/details/72626835 # load() 函数的使用
https://blog.csdn.net/lmj1436140682/article/details/52821605
https://blog.csdn.net/xuxinrk/article/details/80212619
https://blog.csdn.net/what_lei/article/details/49000165 # numel()函数的使用
https://blog.csdn.net/learngis/article/details/4342155
https://blog.csdn.net/CV_YOU/article/details/52873666 # matlab中(),[],与{}的区别认识
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删