{gassian_filter`是否以像素为单位表示?

时间:2018-08-22 01:43:42

标签: python scipy filtering gaussianblur

我正在查看scipy.ndimage.gaussian_filter,但无法理解sigma的含义。 sigma= n意味着n是像素数,因此在点的所有边上n像素数内的区域对平均值的贡献最大吗?

1 个答案:

答案 0 :(得分:1)

是的。从SciPy用高斯核computed的复杂方法(无双关语)来看,这不是很明显,但这是一个实证检验:我将高斯核与向量a进行卷积,其向量为单项1,获得卷积的核。然后以通常的方式E[X**2] - E[X]**2计算方差,其中X的像素单位为(np.arange(len(a)))。

from scipy.ndimage.filters import gaussian_filter
import numpy as np
a = np.zeros((100,))
x = np.arange(len(a))
a[len(a)//2] = 1
for sigma in range(3, 10):
    kernel = gaussian_filter(a, sigma)
    var = np.sum(x**2*kernel) - np.sum(x*kernel)**2
    print("Given sigma {}, empiric value {}".format(sigma, np.sqrt(var)))

输出:

Given sigma 3, empiric value 2.999207360674749
Given sigma 4, empiric value 3.9987184940057614
Given sigma 5, empiric value 4.998211402871647
Given sigma 6, empiric value 5.997694984501222
Given sigma 7, empiric value 6.997173172490447
Given sigma 8, empiric value 7.996647965992465
Given sigma 9, empiric value 8.99612048649375