高斯滤波器在Matlab上的矢量

Isk*_*rak 6 matlab vector gaussian filter

我有一个n维向量(1xn数据集,它不是图像数据),我想对它应用高斯滤波器.我有Image Processing Toolkit和其他一些(询问你是否需要列表).

据推测,我可以使函数的hsize参数fspecial类似[1 n].我还可以使用imfilter它作为下一步将它应用到我的矢量,还是应该使用其他东西?

我已经看过很多关于如何在Matlab中将高斯滤波器应用于二维图像数据的例子,但我对Matlab作为一个平台仍然相对较新,所以一个例子真的很好.

注意:我目前无法尝试它,看看会发生什么(当前没有安装Matlab的机器上),否则我会先尝试一下,然后才会问我是否遇到了使用fspecial和的问题imfilter.

Ita*_*atz 18

为什么不自己创建高斯滤波器?您可以查看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
Run Code Online (Sandbox Code Playgroud)

并且为了应用它你可以使用filter:

y = rand(500,1);
yfilt = filter (gaussFilter,1, y);
Run Code Online (Sandbox Code Playgroud)

并且不要忘记滤波器具有延迟,这意味着滤波后的信号与输入信号相比被移位.由于此过滤器是对称的,因此您可以使用conv而不是filter使用以下same选项来获取非移位输出:

yfilt = conv (y, gaussFilter, 'same');
Run Code Online (Sandbox Code Playgroud)

  • 好吧,如果其他现有的函数也能完成这项工作,我真的不需要编写自己的函数,但是,自己创建过滤器确实解决了问题.谢谢.顺便说一句,我是否相信通常大小是sigma值的6(正负3)倍? (3认同)
  • 如果你正在使用这段代码,不要忘记用其他东西替换大小,你可能会花很多时间调试 (3认同)
  • 当然,需要编写自己的函数,特别是当它是昂贵工具箱的一部分时!如果您公司或大学的Matlab Image Toolbox许可证数量有限,该怎么办?它发生了! (2认同)