скорость фильтра для объемов
Я работаю над алгоритмом, который требует фильтрации трехмерной матрицы (не разреженной, 512 ^ 3), чтобы найти ребра. Я только хочу найти ребра в каждом срезе, поэтому я делал следующее:
% 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
Я также попытался сделать то же самое, вызвав imfilter для всего тома:
% 3D matrix approach
filteredVolume = imfilter(vol,DGauss,'conv','symmetric');
Я сравнил производительность обоих этих подходов, но версия цикла значительно быстрее (от 6,5 до 20 секунд). Следует ли ожидать такого поведения? Если так, то почему?