scipy中的高斯滤波器
image-processing
scipy
9
0

我想在512x512像素的图像上应用尺寸为5x5像素的高斯滤波器。我发现一个scipy函数可以做到这一点:

scipy.ndimage.filters.gaussian_filter(input, sigma, truncate=3.0)

如何选择sigma参数以确保高斯窗口为5x5像素?

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

在此处查看源代码: https : //github.com/scipy/scipy/blob/master/scipy/ndimage/filters.py

你会看到, gaussian_filter电话gaussian_filter1d每个轴。在gaussian_filter1d ,过滤器的宽度由sigmatruncate的值隐式确定。实际上,宽度w

w = 2*int(truncate*sigma + 0.5) + 1

所以

(w - 1)/2 = int(truncate*sigma + 0.5)

对于w = 5,左侧是2。如果右侧,则右侧是2。

2 <= truncate*sigma + 0.5 < 3

要么

1.5 <= truncate*sigma < 2.5

如果选择truncate = 3 (覆盖默认值4),则会得到

0.5 <= sigma < 0.83333...

我们可以通过过滤除单个1之外的全0的输入(即找到过滤器的脉冲响应)并计数过滤后的输出中非零值的数量来检查此情况。 (在下面, npnumpy 。)

首先用一个1创建一个输入:

In [248]: x = np.zeros(9)

In [249]: x[4] = 1

检查sigma = 0.5尺寸的变化...

In [250]: np.count_nonzero(gaussian_filter1d(x, 0.49, truncate=3))
Out[250]: 3

In [251]: np.count_nonzero(gaussian_filter1d(x, 0.5, truncate=3))
Out[251]: 5

...且sigma = 0.8333...

In [252]: np.count_nonzero(gaussian_filter1d(x, 0.8333, truncate=3))
Out[252]: 5

In [253]: np.count_nonzero(gaussian_filter1d(x, 0.8334, truncate=3))
Out[253]: 7
收藏
评论

遵循先前的出色回答:

  1. 设置s = 2
  2. 设置窗口大小w = 5
  3. 评估'truncate'值: t = (((w - 1)/2)-0.5)/s
  4. 过滤: filtered_data = scipy.ndimage.filters.gaussian_filter(data, sigma=s, truncate=t)
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号