我正在研究一种算法,该算法需要过滤 3D 矩阵(非稀疏,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 秒)。应该预期这种行为吗?如果是这样,为什么?