我正试图在Matlab中的大约5000个文件上运行图像分析脚本。我试图在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次?
我使用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
在MATLAB中迭代图像的文件夹或嵌套文件夹的一种更简单的方法是使用imageDatastore。
imds = imageDatastore(desiredDirectory,"FileExtensions",[".tif",".tiff"]);
while hasdata(imds)
img = read(imds);
% Your code that operates on img
end