Matlab中的三维高斯滤波

时间:2016-12-05 20:55:26

标签: image matlab 3d filtering gaussian

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

我有一个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中犯了一些错误。

1 个答案:

答案 0 :(得分:1)

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

因此,它只是一个问题:

FilteredData = convn(RAW, GaussM);

另请注意,默认操作是提供执行完整卷积的输出,这意味着输出的大小将大于RAW的原始大小。要确保convn的输出与RAW的大小相同,请将'same'标记指定为convn的第三个参数:

FilteredData = convn(RAW, GaussM, 'same');