【问题标题】:Variable as argument for imread in Matlab?变量作为 Matlab 中 imread 的参数?
【发布时间】:2021-12-29 20:08:28
【问题描述】:

我正在尝试在 Matlab 中对大约 5,000 个文件运行图像分析脚本。我正在尝试在 for 循环中运行脚本的主要部分并遍历每个文件名。我已将目录列为变量,并提出了如下内容:

images = dir
images.name
imagesdim = size(images)
imageslength = imagesdim(1)

for i = 1:imageslength
    cimg =  imread(images(i,1).name);
    etc etc
end

但是,这似乎不是 imread 可接受的输入参数。有什么办法可以格式化这个列表,这样我就可以在这里使用一个变量,还是我必须复制这个参数 5000 次?

【问题讨论】:

标签: image matlab analysis


【解决方案1】:

我使用dir 命令的函数形式在图像目录中执行此操作。例如,如果您正在处理 TIFF 文件:

dir_items = dir('*.tiff');
file_names = {dir_items.name};
disp('Using .tiff files found in current directory:')
disp(file_names');
for k = 1:length(file_names)
    disp(file_names{k})
    cimg = imread(file_names{k});
end

如果不能使用“*.tiff”之类的通配符过滤器,则必须检查数组中每个结构的 isdir 字段,如下所示:

dir_items = dir;
for k = 1:length(dir_items)
    if dir_items(k).isdir==1
        fprintf(1,'%s is a directory (ignore)\n',dir_items(k).name)
    else
        disp(dir_items(k).name)
        cimg = imread(dir_items(k).name)
    end
end

【讨论】:

    【解决方案2】:

    在 MATLAB 中遍历文件夹或图像嵌套文件夹的一种更简单的方法是使用 imageDatastore。

    imds = imageDatastore(desiredDirectory,"FileExtensions",[".tif",".tiff"]);
    
    while hasdata(imds)
         img = read(imds);
         % Your code that operates on img
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-02
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多