prędkość filtrowania dla objętości

Pracuję nad algorytmem, który wymaga filtrowania macierzy 3D (nie rzadkie, 512 ^ 3), aby znaleźć krawędzie. Chcę tylko znaleźć krawędzie w każdym wycinku, więc robiłem co następuje:

% 2D loop appaoch    
[x,y]=ndgrid(floor(-3*sigma):ceil(3*sigma),floor(-3*sigma):ceil(3*sigma));    
DGauss=-(x./(2*pi*sigma^4)).*exp(-(x.^2+y.^2)/(2*sigma^2));    
filteredVolume = zeros(size(vol))    
for n = 1:size(vol,3)      
    filteredVolume(:,:,n) = imfilter(vol(:,:,n),DGauss,'conv','symmetric');    
end

Próbowałem to samo zrobić, wywołując imfilter na całym woluminie:

% 3D matrix approach    
filteredVolume = imfilter(vol,DGauss,'conv','symmetric');

Porównałem wydajność obu tych podejść, ale wersja pętli jest znacznie szybsza (6,5 sekundy do 20 sekund). Czy należy się tego spodziewać? Jeśli tak, to dlaczego?

questionAnswers(1)

yourAnswerToTheQuestion