如何告诉MATLAB在同一目录中打开并保存特定文件

时间:2010-06-15 19:42:46

标签: matlab

我必须在目录中的许多图像上运行图像处理算法。

图像保存为name_typeX.tif,因此给定名称有X种不同类型的图像。

图像处理算法采用输入图像并输出图像结果。

我需要将此结果保存为name_typeX_number.tif,其中number也是给定图像的算法输出。

现在..

如何告诉MATLAB打开特定的typeX文件?另请注意,同一目录中还有其他非tif文件。

如何将结果保存为name_typeX_number.tif

结果必须保存在输入图像所在的同一目录中。如何告诉MATLAB NOT不要将已保存为输入图像的结果处理?

我必须在服务器上将其作为后台代码运行...因此不允许用户输入。

1 个答案:

答案 0 :(得分:3)

听起来您想要将所有文件放在名称与特定格式匹配的目录中,然后自动处理它们。您可以使用函数DIR执行此操作以获取当前目录中的文件名列表,然后使用函数REGEXP查找与特定模式匹配的文件名。这是一个例子:

fileData = dir();             %# Get a structure of data for the files in the
                              %#   current directory
fileNames = {fileData.name};  %# Put the file names in a cell array
index = regexp(fileNames,...                 %# Match a file name if it begins
               '^[A-Za-z]+_type\d+\.tif$');  %#   with at least one letter,
                                             %#   followed by `_type`, followed
                                             %#   by at least one number, and
                                             %#   ending with '.tif'
inFiles = fileNames(~cellfun(@isempty,index));  %# Get the names of the matching
                                                %#   files in a cell array

如果inFiles中的文件单元格数组与您想要的命名模式匹配,则只需循环遍历文件并执行处理即可。例如,您的代码可能如下所示:

nFiles = numel(inFiles);    %# Get the number of input files
for iFile = 1:nFiles        %# Loop over the input files
  inFile = inFiles{iFile};  %# Get the current input file
  inImg = imread(inFile);   %# Load the image data
  [outImg,someNumber] = process_your_image(inImg);  %# Process the image data
  outFile = [strtok(inFile,'.') ...   %# Remove the '.tif' from the input file,
             '_' ...                  %#   append an underscore,
             num2str(someNumber) ...  %#   append the number as a string, and
             '.tif'];                 %#   add the `.tif` again
  imwrite(outImg,outFile);  %# Write the new image data to a file
end

以上示例使用函数NUMELSTRTOKNUM2STRIMREADIMWRITE