for ループで画像のバッチ (約 30000) を処理する必要があります。このために、ループを実行するたびに 1 つの画像を読み取ります。
特定の指数 (正確な値はさまざまですが、通常は 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 とプロセッサ サイクルが十分に残っているため、これは問題にはなりません。