2012-11-19 75 views
0

我已經寫了M-文件。我想在多個圖像上運行這個M文件,然後通過單獨命名來輸出.tif圖像。有沒有簡單的方法來做到這一點?運行M-文件,並寫入輸出圖像

感謝所有

+1

是的。 [編寫函數](http://www.mathworks.de/de/help/matlab/matlab_prog/create-functions-in-files.html)。 –

+0

您能否介紹一下輸入文件的存儲方式,處理過程以及輸出結果如何? – Acorbe

+0

對不起,我是一個matlab新手。我可以在命令行上調用該函數以逐個單個圖像運行。我知道matlab非常靈活,可以同時在多個圖像上運行該功能。但我不知道如何做到這一點。你能給我一些想法嗎? – user1769107

回答

1

最佳做法是編寫一個函數:

function img(inputName, outputName) 

    if ~iscell(inputName) 
     img({inputName}, {outputName}); 
      return; 
    end 

    for ii = 1:numel(inputName) 

     im = imread(inputName{ii}); 

     ... 

     [do operations on im] 

     ... 

     imwrite(im, outputName{ii}, 'tiff'); 

    end 

end 

你可以從一個腳本,類,函數或命令窗口調用像這樣:

img(... 
    {'file1.bmp', 'file2.bmp', ...},... 
    {'file1.tif', 'file2.tif', ...}... 
); 

你可以得到輸入文件名,像這樣:

[filename, pathname] = uigetfile(... 
    {'*.bmp','bitmap-files (*.bmp)'; ... 
    '*.*', 'All Files (*.*)'}, ... 
    'Pick a file', ... 
    'MultiSelect', 'on'); 

所以你可以使用

if filename ~= 0 
    img(... 
     [char(pathname) char(filename)], 
     {'file1.tif', 'file2.tif', ...}... 
    ); 
else 
    error('No file selected.'); 
end 

已經預示你可以更好地回收輸入文件名:使用uigetfile

function img(fileNames) 

    ... % function's mostly the same, except: 

    [pth,fname] = fileparts(fileNames{ii}); 

    imwrite(im, [pth filesep fname '.tif'], 'tiff'); 

end 

或者,爲了更加方便,

if filename ~= 0 
    img(pathname, filename); 

else 
    error('No file selected.'); 
end 

function img(pathnames, filenames) 

    if ~iscell(pathnames) 
     img({pathnames}, {filenames}); 
      return; 
    end 

    for ii = 1:numel(pathnames) 

     im = imread([pathnames{ii} filenames{ii}]); 

     ... 

     [do operations on im] 

     ... 

     [~,basename] = fileparts(filenames{ii}); 
     imwrite(im, [basename '.tif'], 'tiff'); 

    end 

end 
+0

謝謝Rody,我有2個問題。 1.如何輸入第二組輸入數據。我是否需要在程序文件中輸入2次該代碼?在輸入兩個時間序列圖像之後2.我如何告訴matlab在相同月份和年份的圖像上運行此程序。前者;第一次在2006年四月的圖像程序運行(tmp_2006_4和rnf_2006_4),然後輸出clc_2006_4,第二時間爲下個月的圖像(tmp_2006_5和rnf_2006_5)...等 – user1769107