matlab读取多个子文件夹图片数据处理并另保存
程序员文章站
2022-03-20 13:30:02
...
走在学习的路上
身为matlab小白,在复现论文时发现作者的第一步处理用的时matlab对图像处理保存,之后才用到深度学习的内容。卑微的我就去找matlab的源码,源码可以直接运行,可是作者是借鉴源码有部分改动,最最重要的是:它改完的代码是跑不通的,其实也就涉及到读取文件夹中子文件夹的图片,对图片处理后按照路径进行存储,把里面的函数用法也都学习了一番,可是调试时就是不通或者是存储的形式出现各种问题就说气不气人。
网上也找了很多的代码就行修改,断断续续试了3天才最终跑通,昨天离开实验室就让他自己跑,也太感动了今天早上来没有卡机,还在运行,虽然慢总是出结果了吧,哈哈哈分享一下图像的读取和存储。
注:
我是读取.jpg形式的图片,经过处理后存储到别的文件夹中,图片名称改变,图片存储的形式为.png和.mat两种形式
clc;
clear;
close all;
addpath(genpath('whyte_code'));%用来加载路径
addpath(genpath('cho_code'));
opts.prescale = 1; %%downsampling
opts.xk_iter = 5; %% the iterations
opts.gamma_correct = 1.0;
opts.k_thresh = 20;
rootdir = 'K:\kernel_estimation\x2\';%存储图片的文件夹名称
subdir = dir(rootdir);%获取里面的子文件夹
for i=1:length(subdir)%第一层循环遍历子文件夹
if(isequal(subdir(i),'.') || isequal(subdir(i),'..') || ~subdir(i).isdir)
continue;
end
subdirpath = fullfile(rootdir,subdir(i).name,'*.jpg');
images = dir(subdirpath); % 所有后缀为.jpg的文件
for j=1:length(images)%第二层循环遍历每个子文件夹中的图片
ImageName = fullfile(rootdir,subdir(i).name,images(j).name);
ImageData = imread(ImageName); % 依次读取图像
%这一块是我自己的图片处理程序,大家可以根据自己的需要对图片进行处理操作
opts.kernel_size = 25; saturation = 0;
lambda_dark = 4e-3; lambda_grad = 4e-3;opts.gamma_correct = 1.0;
lambda_tv = 0.003; lambda_l0 = 5e-4; weight_ring = 1;
y = ImageData;
isselect = 0; %false or true
if isselect ==1
figure, imshow(y);
%tips = msgbox('Please choose the area for deblurring:');
fprintf('Please choose the area for deblurring:\n');
h = imrect;
position = wait(h);
close;
B_patch = imcrop(y,position);
y = (B_patch);
else
y = y;
end
if size(y,3)==3
yg = im2double(rgb2gray(y));
else
yg = im2double(y);
end
[kernel, interim_latent] = blind_deconv(yg, lambda_dark, lambda_grad, opts);
% for plotting
k = kernel - min(kernel(:));
k = k./max(k(:));
%图像储存的路径以及存储格式的设置
saveddir = 'K:\kernel_estimation\x2results\'; % 图像新保存到的路径
%savedname = fullfile(saveddir,images(j).name); % 图像名称不变
save(sprintf('%s%s%s%s%s',saveddir,subdir(i).name,'/',string(extractBetween(images(j).name,1,length(images(j).name)-4)),'_kernel.mat'), 'kernel');
imwrite(k,sprintf('%s%s%s%s%s',saveddir,subdir(i).name,'/',string(extractBetween(images(j).name,1,length(images(j).name)-4)),'_kernel.png'));
%imwrite(k,savedname);
%figure(1)
%imshow(k)
end
end
end
end
参考博文链接:https://blog.csdn.net/susu_love/article/details/53256731