在循环中读取图像会变慢

时间:2012-08-09 12:29:05

标签: matlab image-processing

我必须在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和处理器周期,这应该不是问题。

2 个答案:

答案 0 :(得分:1)

交换来实现?

可能是前几百张图片填满你的RAM吗?

对内存的任何其他访问都会触发交换和写入硬盘驱动器,这很容易减少数量级......

答案 1 :(得分:0)

imread()是否有可能让文件句柄处于打开状态? (虽然如果是这样的话,我会感到很惊讶吗?)

您可以尝试在循环中粘贴fclose('all')进行检查吗?