2016-05-04 13 views
0

Ich verwende Matlab 2016a und verwende imopen auf einem 301x301x271 logischen Image. Beispielcode:Warum sind morphologische Operationen an 3D-Bildern in Matlab so langsam?

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

verstrichene Zeit 294,313918 Sekunden.

Verwenden aller 4 CPU-Kerne. Das Aufrufen desselben Codes innerhalb einer Funktion verwendet aus irgendeinem Grund nur einen Kern (600s).

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

das gleiche tun mit MITK (die im Grunde itkBinaryMorphologicalOpeningImageFilter nur verwendet) dauert weniger als 10 Sekunden.

Irgendwelche Ideen für Optimierungen? Gpuarray ist nicht möglich, weil es 3D ist.

+0

Probieren Sie den Profiler, um herauszufinden, was so lange dauert. – flawr

Antwort

1

Ich habe versucht, beide Situationen (in einem Skript und innerhalb einer Funktion) auszuführen, und in beiden Fällen habe ich festgestellt, dass MATLAB mehrere Kerne verwendet (4 in meinem Fall auch), und ich kann dieses Verhalten nicht reproduzieren .

Ich glaube jedoch, einer der Hauptgründe dafür, dass MATLAB langsamer ist als ITK für eine Kugel, ist, dass eine 3D-Kugel nicht in kleinere einfachere Formen zerlegt wird.

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

ist 697, das ist die Anzahl der 'On' Pixel in der 3D-Kugel.

Der Würfel auf der anderen Seite wird zerlegt, was bedeutet:

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) 

Dies reduziert die Anzahl der Vergleiche von 25 gewürfelt bis 3 mal 25 gemacht werden, was wahrscheinlich ist, was ITK tut dies zu optimieren.

Ich wäre neugierig zu wissen, ob Sie einen Würfel verwenden, wie 'se = strel (' cube ', 25);' stattdessen. Ich bin ziemlich sicher, dass es viel schneller ist. Wenn dies zutrifft, könnte man untersuchen, ob die Kugel zersetzt wird und stattdessen verwendet wird, zum Beispiel:

Vaz, M.S., Kiraly, A.P., & Meresereau, R.M. (2007). Mehrstufige Zerlegung euklidischer Kugeln. In Proc. Int. Symp. Mathematik. Morphologie (ISMM) (S. 461-472).