离散高斯滤波器的标准偏差

时间:2020-02-10 15:22:11

标签: matlab gaussian normal-distribution standard-deviation

我在MATLAB中创建了一个高斯滤波器,如下所示:

 f = fspecial('gaussian', [1, 3], 2);    

这创建了一个具有高斯分布的1×3滤波器。但是,当我执行std(f)时,会得到一个不同的值而不是2。

为什么我的标准偏差值不为2?

1 个答案:

答案 0 :(得分:2)

您的f是正态分布的样本。它的值不是正态分布的。它的二阶空间中心矩应为4(西格玛值的平方),但样本的标准偏差不会。 (将分布本身采样为具有给定分布的随机值,后者将std(f)接近分布的标准偏差。)

二阶中心矩可以计算如下:

x = 1:numel(f);
m1 = sum(x.*f)/sum(f);         % 1st order moment
m2 = sum((x-m1).^2.*f)/sum(f); % 2nd order central moment

尽管如此,如果绘制采样的f,您会发现它根本不像高斯!这是因为它被切断了,您采样的三个点都聚集在峰值附近,并且尾部没有采样。您需要对更大的区域进行采样。我总是建议每边采样到3 * sigma:

sigma = 2;
sz = ceil(3*sigma) * 2 + 1;
f = fspecial('gaussian', [1, sz], sigma)

请参见my blog post on sampling the Gaussian kernel