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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章