11

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

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

4 回答 4

14

您不需要用于简单一维高斯的库。

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
于 2012-06-26T14:25:37.730 回答
6

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

于 2012-06-26T14:09:47.293 回答
4

试试看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])
于 2013-11-15T16:33:47.807 回答
0

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

于 2018-04-26T13:54:48.953 回答