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?