2016-05-04 14 views
0

私はMatlab 2016aを実行しており、301x301x271の論理イメージでimopenを使用しています。 例コード:なぜ3D画像上の形態学的操作がMatlabで遅いのですか?

A = randi([0 1], 301, 301, 271); 
A = logical(A); 
se = strel('sphere',12); 
tic; 
A = imopen(A, se); 
toc; 

経過時間が294.313918秒です。

4つのCPUコアをすべて使用する。関数内から同じコードを呼び出すと、何らかの理由(600秒)でコアが1つだけ使用されます。 (基本的にはitkBinaryMorphologicalOpeningImageFilterを使用しています)MITKを使用して同じことをやって

function CreateExample() 
...code... 
end 

は10秒未満かかります。

最適化のアイデアはありますか? Gpuarrayは3Dのため可能ではありません。

+0

プロファイラーを使用して、何が長くかかるのか調べてみてください。 – flawr

答えて

1

私は、(スクリプトや関数内で)言及した状況の両方を実行しようとしましたが、どちらの場合も、MATLABが複数のコアを使用していることに気付きました。 。

しかし、MATLABが球のITKよりも遅い主な理由の1つは、3D球がより小さなより単純な形状に分解されないということです。

SE = strel('disk', 12); 
sum(SE.Neighborhood(:)) 

は697であり、これは3D球の「オン」ピクセルの数である。一方、

キューブが意味、分解される:

SE = strel('cube', 25); 
% The decompose method replaces one cube with three 3D lines, 
% applied repeatedly over the volume. 
seq = SE.decompose() 
sum(seq(1).Neighborhood) 
sum(seq(2).Neighborhood) 
sum(seq(3).Neighborhood) 

これは、ITKがこれを最適化するために、何をするか考えられます3回25へ25乗から作られる比較の数を、減らします。

あなたが 'se = strel(' cube '、25)のような立方体を使っているかどうか知りたいのですが、代わりに。私はかなり早いと確信しています。それが真実ならば、球を分解して代わりに使用することができます。たとえば、

Vaz、M.S.、Kiraly、A.P. & Mersereau、R.M。(2007)。ユークリッド球の多レベル分解。 Proc。 Int。 Symp。数学。形態学(ISMM)(pp。461-472)。

関連する問題