我必须在 for 循环中处理一批图像(大约 30000 个)。为此,我在每次执行循环时读取一张图像。
当达到某个指标时(确切值会有所不同,但通常在 2000 左右),进度会显着放缓(因素 2 或 3)。怎么会这样?
这是一个显示此行为的最小代码示例:
imgFolder = [uigetdir, '/'];
files = dir(fullfile(imgFolder, '*.tiff'));
filenames = sort_nat({files.name});
imshow(imread([imgFolder, '/', filenames{1}]))
roi = roipoly;
meansRGB = zeros(3,length(files));
tic;
for i = 1:size(files,1)
img = imread([imgFolder, '/', filenames{i}]);
% for j=1:3
% a = regionprops(roi,img(:,:,j),'PixelValues');
% meansRGB(j,i) = mean(a.PixelValues);
% end
% show remaining time
dt = 500; % display remaining time every dt'th step
if(mod(i,dt)) == 0
disp(i)
elapsed = toc;
remainingSeconds = elapsed*(length(files)-i)/dt;
[hours, minutes, seconds] = sec2hms(remainingSeconds);
str = sprintf('remaining time: %d:%d:%d', hours, minutes, round(seconds));
disp(str);
tic;
end
end
请注意,我认为会消耗最多时间的所有重要部分都已被注释掉,并且不是减速循环的原因。还有大量的 RAM 和处理器周期,这不应该是问题。