如何减少 imread 和 imwrite 的处理时间
How to reduce processing time for imread and imwrite
我正在使用 Matlab 中的并行计算进行 3d 重建。我分析了我的代码,发现 imread 和 imwrite 占用了大部分处理时间。我的目标是显着减少处理时间,因为我的模拟涉及大型数据集和迭代。
我的代码:
projection_length = 4100;
parfor q = 1:projection_length
tmpData = zeros(1600, 500);
for i = 1:500
fname= sprintf('pre%03d.tif', i);
tmpData(:, i) = imread(fname, 'PixelRegion', {[1 1600], [q q]});
disp(['Analyzing projection ' num2str(q) ' of ' num2str(projection_length) ', Angle ' num2str(i) '...']);
end
idata=255-tmpData;
H = iradon(idata, 0.72, 'Hann', 0.8, 1600 );
postfname= sprintf('post%06d.tif', q);
imwrite(H, postfname);
end
看起来您一遍又一遍地读取相同的 500 张图像,只是为了访问不同的像素区域。最好读取图像一次,然后使用标准数组切片访问像素区域。
我无法真正测试代码,因为我没有你的图像文件和函数,但它应该看起来像这样:
% preload images
images = {};
for i = 1:500
fname= sprintf('pre%03d.tif', i);
images{i} = imread(fname);
end
% analyze images
projection_length = 4100;
parfor q = 1:projection_length
tmpData = zeros(1600, 500);
for i = 1:500
tmpData(:, i) = images{i}(1 : 1600, q, :);
disp(['Analyzing projection ' num2str(q) ' of ' num2str(projection_length) ', Angle ' num2str(i) '...']);
end
idata=255-tmpData;
H = iradon(idata, 0.72, 'Hann', 0.8, 1600 );
postfname= sprintf('post%06d.tif', q);
imwrite(H, postfname);
end
我正在使用 Matlab 中的并行计算进行 3d 重建。我分析了我的代码,发现 imread 和 imwrite 占用了大部分处理时间。我的目标是显着减少处理时间,因为我的模拟涉及大型数据集和迭代。 我的代码:
projection_length = 4100;
parfor q = 1:projection_length
tmpData = zeros(1600, 500);
for i = 1:500
fname= sprintf('pre%03d.tif', i);
tmpData(:, i) = imread(fname, 'PixelRegion', {[1 1600], [q q]});
disp(['Analyzing projection ' num2str(q) ' of ' num2str(projection_length) ', Angle ' num2str(i) '...']);
end
idata=255-tmpData;
H = iradon(idata, 0.72, 'Hann', 0.8, 1600 );
postfname= sprintf('post%06d.tif', q);
imwrite(H, postfname);
end
看起来您一遍又一遍地读取相同的 500 张图像,只是为了访问不同的像素区域。最好读取图像一次,然后使用标准数组切片访问像素区域。
我无法真正测试代码,因为我没有你的图像文件和函数,但它应该看起来像这样:
% preload images
images = {};
for i = 1:500
fname= sprintf('pre%03d.tif', i);
images{i} = imread(fname);
end
% analyze images
projection_length = 4100;
parfor q = 1:projection_length
tmpData = zeros(1600, 500);
for i = 1:500
tmpData(:, i) = images{i}(1 : 1600, q, :);
disp(['Analyzing projection ' num2str(q) ' of ' num2str(projection_length) ', Angle ' num2str(i) '...']);
end
idata=255-tmpData;
H = iradon(idata, 0.72, 'Hann', 0.8, 1600 );
postfname= sprintf('post%06d.tif', q);
imwrite(H, postfname);
end