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