MATLAB 遍历文件夹指定名字/类型的文件和保存图片,以直方图为例

1 批量处理既可以缩短代码量,又可以提高效率,下面以获取直方图并保存直方图为例

2 约定输入与输出的格式如下

这里是待输入图片文件名
Fig0503 (original_pattern).tif         
Fig0504(a)(gaussian-noise).tif         
Fig0504(b)(rayleigh-noise).tif         
Fig0504(c)(gamma-noise).tif            
Fig0504(g)(neg-exp-noise).tif          
Fig0504(h)(uniform-noise).tif          
Fig0504(i)(salt-pepper-noise).tif      
下面是保存对应的直方图                              
直方图-Fig0503 (original_pattern).tif     
直方图-Fig0504(a)(gaussian-noise).tif     
直方图-Fig0504(b)(rayleigh-noise).tif     
直方图-Fig0504(c)(gamma-noise).tif        
直方图-Fig0504(g)(neg-exp-noise).tif      
直方图-Fig0504(h)(uniform-noise).tif      
直方图-Fig0504(i)(salt-pepper-noise).tif  

3 源代码,下面是一种方式

完整代码如下:

% 方案一
% delete '直方图*.tif';								  %删除上次输出的图片
% fileFolder = fullfile(pwd);                         %获取当前文件夹位置, pwd也可以用eval('pwd')
% dirOutput = dir(fullfile(fileFolder,'*.tif'));      %'后缀名tif'查找所有图片文件
% fileNames = {dirOutput.name};                       %获取文件名

% 方案二
dirOutput = dir(fullfile(fullfile(pwd),'Fig*.tif'));    %'后缀名tif+前缀Fig'查找所有图片文件
fileNames = {dirOutput.name};                           %获取文件名

for fileName = fileNames
    src = imread(char(fileName));                   %将cell类型转换成char(matlab没有string类型)
    if (ndims(src) == 3)                %判断是否是RGB图像
        gray = rgb2gray(src);           %转成灰度
    else
        gray = src;
    end
    figure('NumberTitle', 'off', 'Name', ['直方图-', char(fileName)]); 
    imhist(gray);
    saveas(gcf, get(gcf, 'name'));       %获取当前figure的窗口句柄,保存图片
end

4 解释

1 方案一和方案二都是按指定名字/类型过滤其他文件。其中方案一:

首先,删除前一次生成的图片;
之后,获取当前文件夹位置,pwd也可以用eval(‘pwd’);matlab支持一部分linux命令,如ls,pwd, edit(touch), cd, mkdir等;
接着,按'后缀名tif'查找所有图片文件,matlab子符串中接受通配符,dirOutput是一个结构体,我们感兴趣的是name成员;
最后,将文件名放进fileNames-行向量,其数据类型是cell,使用时需要用char(fileName)转换成字符串char。查看数据类型可以使用class(fileName)

方案二:

和方案一类似,只是通配符指定了'后缀名tif+前缀Fig'查找所有图片文件

2 for循环内完成图片的读入,显示,保存

2.1 判断是否是RGB图像
先面是一种方式,判断矩阵的维度,isrgb()已被弃用。

 if (ndims(src) == 3)                %判断是否是RGB图像

还可以通过调试,查看src的数据类型,在左侧的Workplace,看看有没有*3?彩色图片做对应处理,rgb2gray()转成灰度图片
在这里插入图片描述
2.2 显示图像
新建一个figure,把名字,NumberTitle处理下,matlab字符串的连接,可以使用字符串函数,但是提供了一种简单的做法-用中括号
明显:下面的方式简单,而且可以一直连接下去。换句话说,能简单就尽量简单,实在不行再用其他函数,毕竟matlab提供了这种处理方式。

['直方图-', char(fileName)] 		%连接两块内容

2.3 保存图像
这里用了saveas(),gcf获取当前图形窗口的句柄(Get Current Figure),进一步还可以获取其文件名 get(gcf, 'name'),类似获取当前坐标轴句柄(Get Current Axis)-gca。

 saveas(gcf, get(gcf, 'name'));       %获取当前figure的窗口句柄,保存图片

这里没有用imwrite,因为imwrite需要保存的矩阵数据。你可以试试改成imwrite。

5 获取上面的测试图片

如何获取数字图像处理(冈萨雷斯) 教材中的原始图片?
https://blog.csdn.net/weixin_39956356/article/details/105296160

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值