MATLAB R2017a中的非对称高斯滤波

3
我希望在MATLAB中对一个三维数据矩阵进行非对称高斯滤波。使用imgaussfilt3,我可以对称地进行滤波(所有三个维度的模糊效果相同)。但是,我只能为sigma提供一个值,因此在所有维度上过滤的效果都相同。
在另一个线程中,我发现可以使用fspecial函数将过滤器分离并水平和垂直应用(在那种情况下仅为2D)。不幸的是,我无法使其正常工作(在一个小示例矩阵中使用imgaussfilt时得到的结果与fspecial不同),而fspecial的文档说高斯模式不再建议使用,要改为使用imgaussfilt。
以下是一个示例:
matrix = rand(30,30,30);
sigma = 2;
matrix_symblur = imgaussfilt3(matrix,sigma);

我现在希望改变的是sigma值,分别在三个维度上取1、2和3,这样模糊效果在三个维度上就会有不同的强度。

我正在使用MATLAB R2017a。有人可以帮忙吗?


听起来你需要定义自己的过滤内核,然后使用更通用的函数,比如imfilter。祝你好运! - Dev-iL
1个回答

1

imgaussfilt3 函数已经可以实现这个功能。根据文档,sigma 可以是 (我的强调)

sigma — 高斯分布的标准差
0.5(默认值)| 数值、实数、正标量或 3 元素向量

因此,要在第一维上具有 1 的 sigma,在第二维上具有 2,在第三维上具有 3,您可以按以下方式调用 imgaussfilt3

matrix = rand(30,30,30);
sigma = [1, 2, 3];
matrix_symblur = imgaussfilt3(matrix, sigma);

不敢相信我错过了这个,我非常抱歉!好的,这让我的剩余时间变得轻松愉快了!非常感谢你! - B.Thomann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接