matlab读取多个子文件夹图片数据处理并另保存

走在学习的路上
身为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

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用MATLAB读取多个文件夹内的文件,并进行绘图可以通过以下步骤实现: 1. 确定文件夹路径:首先,我们需要确定存储数据文件的文件夹路径。假设我们有多个文件夹A、B、C中存放着我们需要读取的文件。 2. 使用dir函数获取文件信息:使用MATLAB的dir函数,以文件夹路径作为参数,可以获取该文件夹下的所有文件信息。我们可以使用一个循环结构,依次获取文件夹A、B、C中的文件信息。 3. 读取文件数据:使用MATLAB提供的相应读取函数,如xlsread读取Excel文件、load读取MAT文件、importdata读取文本文件等,根据不同文件类型选择合适的函数进行数据读取。在循环中,可以将读取到的数据存储在一个数据结构中,如cell数组或struct结构体中。 4. 绘制图形:在获取到数据后,我们可以使用MATLAB提供的绘图函数,如plot、scatter等,对数据进行可视化。根据数据的不同特点,选择合适的绘图函数进行绘制。 5. 循环处理多个文件夹:通过将上述步骤嵌套在一个循环结构中,可以依次处理多个文件夹中的文件。在每次循环中,更新文件夹路径,获取该文件夹下的文件信息,读取数据并绘制图形。这样,我们就可以对多个文件夹内的文件进行读取和绘图。 通过以上步骤,我们可以使用MATLAB读取多个文件夹内的文件,并进行相应的绘图操作。根据具体的文件类型和绘图需求,可以选择合适的函数和参数进行处理
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值