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?