velocidade do imfiltro para volumes

Eu estou trabalhando em um algoritmo, que requer a filtragem de uma matriz 3D (não esparsa, 512 ^ 3) para encontrar bordas. Eu só quero encontrar bordas em cada fatia, então eu tenho feito o seguinte:

% 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

Eu também tentei fazer o mesmo chamando imfilter no volume inteiro:

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

Eu comparei o desempenho de ambas as abordagens, mas a versão do loop é significativamente mais rápida (6,5 segundos a 20 segundos). Esse comportamento deve ser esperado? Se sim, porque?

questionAnswers(1)

yourAnswerToTheQuestion