【问题标题】:Creating Gaussian filter of required length in python在python中创建所需长度的高斯滤波器
【发布时间】:2012-06-27 21:01:34
【问题描述】:

谁能建议哪个库支持创建所需长度和 sigma 的高斯滤波器?我基本上需要以下 matlab 函数的等效函数:

fltr = fspecial('gaussian',[1 n],sd)

【问题讨论】:

    标签: python scipy


    【解决方案1】:

    你不需要一个简单的一维高斯库。

    from math import pi, sqrt, exp
    
    def gauss(n=11,sigma=1):
        r = range(-int(n/2),int(n/2)+1)
        return [1 / (sigma * sqrt(2*pi)) * exp(-float(x)**2/(2*sigma**2)) for x in r]
    

    注意:这将始终返回一个以 0 为中心的奇数长度列表。我想在某些情况下,您可能需要一个偶数长度的高斯函数,其值为 x = [..., -1.5, -0.5, 0.5 , 1.5, ...],但在这种情况下,你需要一个稍微不同的公式,我会留给你;)

    带有默认值n = 11sigma = 1的输出示例:

    >>> g = gauss()
    1.48671951473e-06
    0.000133830225765
    0.00443184841194
    0.0539909665132
    0.241970724519
    0.398942280401
    0.241970724519
    0.0539909665132
    0.00443184841194
    0.000133830225765
    1.48671951473e-06
    
    >>> sum(g)
    0.99999999318053079
    

    【讨论】:

    • 我期待它在 plt.hist(g) 之后返回类似高斯曲线的东西,但这是一个猜测
    • 很好,简单的答案!在可能的情况下,最好避免使用库,这样你才能真正理解代码中发生了什么:)。对于偶数n,唯一需要改变的是r = np.linspace(-int(n/2)+0.5,int(n/2)-0.5, n)
    【解决方案2】:

    也许是scipy.ndimage.filters.gaussian_filter?我从未使用过,但文档位于:https://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.ndimage.filters.gaussian_filter.html

    【讨论】:

      【解决方案3】:

      试试scipy.ndimage.gaussian_filter,但是你真的想要内核还是你也想应用它? (在这种情况下,您可以只使用此函数。)在前一种情况下,将过滤器应用于一个数组,该数组处处为 0,但中心为 1。对于更易于编写的一维情况,例如:

      >>> ndimage.gaussian_filter1d(np.float_([0,0,0,0,1,0,0,0,0]), 1)
      array([  1.33830625e-04,   4.43186162e-03,   5.39911274e-02,
               2.41971446e-01,   3.98943469e-01,   2.41971446e-01,
               5.39911274e-02,   4.43186162e-03,   1.33830625e-04])
      

      【讨论】:

        【解决方案4】:

        如果运行时速度很重要,我强烈建议创建一次过滤器,然后在每次迭代中使用它。不断进行优化,但几年前这大大加快了我编写的一些代码。 (以上答案展示了如何创建过滤器)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-10-02
          • 2011-02-15
          • 1970-01-01
          • 2013-06-15
          • 2018-10-03
          • 2021-07-04
          • 1970-01-01
          相关资源
          最近更新 更多