我必须阅读数百个TIFF文件,执行一些数学运算,并输出一些内容。这是针对数千个实例进行的。最大的瓶颈是难以理解的。使用PixelRegion,我只读取文件的一部分,但它仍然很慢。
目前,阅读部分在这里。
你能建议我如何加快速度吗?
for m = 1:length(pfile)
if ~exist(pfile{m}, 'file')
continue;
end
pConus = imread(pfile{m}, 'PixelRegion',{[min(r1),max(r1)],[min(c1),max(c1)]});
pEvent(:,m) = pConus(tselect);
end
答案 0 :(得分:2)
以下解决方案假设您可以访问并行计算工具箱。我用10,840个tiff测试了它,每个图像最初是1000x1000,但我只读了300x300的部分。我不确定有多少大pConus(tselect)
,所以我只存储了整个300x300图像。
P.S。抱歉格式化。它拒绝将其格式化为代码块。
结果基于我的2.3 GHz i7 w / 16GB ram
%安装
clear;clc;
n = 12000;
% Would be faster to preallocate this, but negligeble compared to the
% time it takes imread to complete.
fileNames = {};
for i = 1:n
name = sprintf('in_%i.tiff', i);
% I do the exist check here, assuming that the file won't be touched in
% until the program advances a files lines.
if exist(name, 'file')
fileNames{end+1} = name;
end
end
rows = [200, 499];
cols = [200, 499];
pics = cell(1, length(fileNames));
tic;
parfor i = 1:length(fileNames)
% I don't know why using the temp variable is faster, but it is
temp = imread(fileNames{i}, 'PixelRegion', {rows, cols});
pics{i} = temp;
end
toc;