Matlab 中的 3D 高斯滤波
3D Gaussian Filtering in Matlab
我正在尝试在 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
.
不要使用 conv
,因为这是一维信号。使用 convn
进行 N 维过滤,您可以在其中指定任何维度的内核,包括 3D。
因此,这只是一个问题:
FilteredData = convn(RAW, GaussM);
另请注意,默认操作是提供执行全卷积的输出,这意味着输出的大小将大于[=14]的原始大小=].要确保 convn
的输出与 RAW
的大小相同,请将 'same'
标志指定为 convn
:
的第三个参数
FilteredData = convn(RAW, GaussM, 'same');
我正在尝试在 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
.
不要使用 conv
,因为这是一维信号。使用 convn
进行 N 维过滤,您可以在其中指定任何维度的内核,包括 3D。
因此,这只是一个问题:
FilteredData = convn(RAW, GaussM);
另请注意,默认操作是提供执行全卷积的输出,这意味着输出的大小将大于[=14]的原始大小=].要确保 convn
的输出与 RAW
的大小相同,请将 'same'
标志指定为 convn
:
FilteredData = convn(RAW, GaussM, 'same');