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

标签 image-processing scipy gaussian

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

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

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

最佳答案

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

你会看到 gaussian_filter电话gaussian_filter1d对于每个轴。在 gaussian_filter1d ,过滤器的宽度由 sigma 的值隐式确定和 truncate .实际上,宽度 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

关于image-processing - scipy中的高斯滤波器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25216382/

相关文章:

python - Python中多元函数的向量化偏导数

python - 如何使用高斯分布对列表进行洗牌

image-processing - 将多个图像压缩为单个图像

Python2.7导入错误: cannot import name sigtools

c# - 去除非红色调像素

python - 根据一些给定的引用元素插入颜色矩阵的元素

matlab - 使数据符合正态分布

math - 为空间域中的给定掩码在频域中找到等效的高斯滤波器掩码

image-processing - 图像处理-实现Sobel滤波器

c# - 如何在 C# 中裁剪倾斜图像