如何减少imread和imwrite的处理时间

时间:2015-05-27 17:15:02

标签: matlab image-processing parallel-processing imread

我正在使用Matlab中的并行计算进行三维重建。我分析了我的代码,发现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

1 个答案:

答案 0 :(得分:3)

看起来你一遍又一遍地读取相同的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