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