我写了一个M文件。我想在多个图像上运行这个 M 文件,然后通过分别命名来编写输出 .tif 图像。有没有简单的方法可以做到这一点?
谢谢大家
最佳实践是编写一个函数:
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
这已经表明您可以更好地回收输入文件名:
function img( fileNames )
... % function's mostly the same, except:
[pth,fname] = fileparts(fileNames{ii});
imwrite(im, [pth filesep fname '.tif'], 'tiff');
end
或者,为了在使用时增加便利uigetfile
,
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