【问题标题】:Gaussian Filter on a vector in Matlab [duplicate]Matlab中向量上的高斯滤波器[重复]
【发布时间】:2011-10-22 23:04:54
【问题描述】:

我有一个 n 维向量(1xn 数据集,它不是图像数据),我想对其应用高斯滤波器。我有图像处理工具包和其他一些工具包(询问您是否需要列表)。

大概我可以使fspecial 函数的hsize 参数类似于[1 n]。 我还可以使用imfilter 将其应用于我的向量作为下一步,还是应该使用其他东西?

我已经看过很多关于如何在 Matlab 中将高斯滤波器应用于二维图像数据的示例,但我对 Matlab 作为一个平台还比较陌生,所以举个例子就很好了。

注意:我目前无法尝试并看看会发生什么(目前不在安装了 Matlab 的机器上),否则我会先尝试它,然后只询问我是否在使用 @987654325 时遇到问题@ 和imfilter

【问题讨论】:

    标签: matlab vector filter gaussian


    【解决方案1】:

    为什么不自己创建高斯滤波器呢?您可以查看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');
    

    【讨论】:

    • 好吧,如果其他现有函数也能完成这项工作,我真的认为没有必要编写自己的函数,但是是的,我自己创建过滤器确实可以解决问题。谢谢。顺便说一句,我认为通常大小是 sigma 值的 6(加减 3)倍,我是否正确?
    • 这真的取决于应用程序 - 但通常你确实希望高斯尾部消失,以便截断过滤器不会产生显着影响(因为尾部在 +-infinity 处变为 0,你必须截断以具有有限长度的过滤器)。所以,是的,每边去 4 个或更多 sigma 就可以保证它。
    • 当然,需要编写自己的函数,尤其是当它是昂贵工具箱的一部分时!如果您的公司或大学的 Matlab Image Toolbox 许可证数量有限怎么办?它发生了!
    • 如果你在使用这段代码,别忘了把size换成别的,你可能会花很多时间调试
    猜你喜欢
    • 2011-02-15
    • 2023-04-09
    • 1970-01-01
    • 2014-07-21
    • 2013-03-29
    • 2017-04-20
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多