0

Matlab で並列コンピューティングを使用して 3 次元再構成に取り組んでいます。コードのプロファイリングを行ったところ、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
4

1 に答える 1

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
于 2015-05-27T17:25:00.123 に答える