Matlab中对向量进行高斯滤波

6
我有一个n维向量(1xn数据集,不是图像数据),我想对其应用高斯滤波器。我有图像处理工具包和其他一些工具(需要列表请问)。
假设我可以将fspecial函数的hsize参数设置为[1 n]之类的东西。我可以仍然使用imfilter作为下一步将其应用于我的向量吗?或者我应该使用其他东西?
我在Matlab中看到了很多关于如何将高斯滤波器应用于二维图像数据的示例,但我对Matlab作为平台仍然相对较新,所以一个示例会真的很好。
注意:目前我不能尝试并查看发生了什么(目前没有安装Matlab的计算机),否则我会先尝试并只问如果我在使用fspecial和imfilter时遇到问题。
1个回答

21

为什么不自己创建高斯滤波器?您可以查看 fspecial 中的公式(或任何其他高斯定义):

sigma = 5;
sz = 30;    % length of gaussFilter vector
x = linspace(-sz / 2, sz / 2, sz);
gaussFilter = exp(-x .^ 2 / (2 * sigma ^ 2));
gaussFilter = gaussFilter / sum (gaussFilter); % normalize

你可以使用filter来应用它:

y = rand(500,1);
yfilt = filter (gaussFilter,1, y);

不要忘记滤波器有延迟,这意味着与输入信号相比,滤波后的信号会发生移位。由于此滤波器是对称的,您可以使用 conv 而非 filter 并使用 same 选项来获得无移位输出:

yfilt = conv (y, gaussFilter, 'same');

3
其实,如果其他现有的函数同样能够胜任,我不认为有必要编写自己的函数,但是,自己创建筛选器确实可以解决问题。谢谢。顺便说一句,如果我相信常见的大小是6(加减3)倍的sigma值,那么我是正确的吗? - Iskar Jarak
1
这真的取决于应用程序 - 但通常情况下,您确实希望高斯尾部逐渐消失,以便截断滤波器不会产生显著影响(因为尾部在正负无穷处趋近于0,您必须进行截断才能得到有限长度的滤波器)。所以是的,每边走4个或更多的标准差可以保证这一点。 - Itamar Katz
2
当然,有必要编写自己的函数,特别是当它是昂贵工具箱的一部分时!如果你的公司或大学拥有的Matlab图像工具箱许可证数量是有限的呢?这种情况确实会发生! - Wok
3
如果您正在使用这段代码,请记得将 "size" 替换为其他内容,否则您可能会花费大量时间进行调试。 - Bharat

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