【问题标题】:3D Gaussian Filtering in MatlabMatlab中的3D高斯滤波
【发布时间】:2017-04-20 08:54:38
【问题描述】:

我正在尝试在 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 中犯了一些错误。

【问题讨论】:

    标签: image matlab 3d filtering gaussian


    【解决方案1】:

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

    因此,这只是一个问题:

    FilteredData = convn(RAW, GaussM);
    

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

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

    【讨论】:

    • 那么还有一些事情你做得不好。 convn 可以轻松做 3D 数据。请发布确切的错误。
    • Tnx @rayryeng。 convn 进行了 N 维卷积。 same 标志将卷积保持在 (K,K,K) 维度。这项工作比我想象的要容易。我确实循环使用了convconvn。不太清楚有一个我可以使用的标志。
    猜你喜欢
    • 2023-04-09
    • 2011-02-15
    • 2014-07-21
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 2018-01-19
    • 2021-05-22
    • 2012-10-22
    相关资源
    最近更新 更多