Matlab 中的 3D 高斯滤波

3D Gaussian Filtering in Matlab

我正在尝试在 Matlab 中实现 3D 高斯滤波器 - 不使用内置的 Matlab 过滤功能,如 imfilterimgaussfilt 等。 .


我有一个3D数据

RAW(K,K,K)

例如,K = 100,对于此示例,过滤器宽度 delta = 5

目前,我有:

Ggrid = -floor(delta/2):floor(delta/2);
[X Y Z] = meshgrid(Ggrid, Ggrid, Ggrid);

% Create Gaussian Mask
GaussM = exp(-(X.^2 + Y.^2 + Z.^2) / (2*delta^2));

% Normalize so that total area (sum of all weights) is 1
GaussM = GaussM/sum(GaussM(:));

这给了我一个维度 K+1 * K+1 * K+1 的 3D 高斯内核。 现在,为了得到过滤后的数据,我想做一个像这样的卷积:

FilteredData = conv(RAW,GaussM);

但是尺寸不匹配。有人可以指出我哪里出错了吗?我假设我在高斯掩码中犯了一些错误 GaussM.

不要使用 conv,因为这是一维信号。使用 convn 进行 N 维过滤,您可以在其中指定任何维度的内核,包括 3D。

因此,这只是一个问题:

FilteredData = convn(RAW, GaussM);

另请注意,默认操作是提供执行卷积的输出,这意味着输出的大小将大于[=14]的原始大小=].要确保 convn 的输出与 RAW 的大小相同,请将 'same' 标志指定为 convn:

的第三个参数
FilteredData = convn(RAW, GaussM, 'same');