【问题标题】:Standard deviation of a discrete Gaussian filter离散高斯滤波器的标准偏差
【发布时间】:2020-05-25 22:46:18
【问题描述】:

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

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

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

为什么我没有得到标准差值 2?

【问题讨论】:

标签: matlab gaussian normal-distribution standard-deviation


【解决方案1】:

您的f 是正态分布的样本。它的值不是正态分布的。它的二阶空间中心矩应该是 4(sigma 值的平方),但样本的标准差不会。 (对比抽样分布本身与对给定分布的随机值抽样,后者的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 2018-10-03
    • 1970-01-01
    • 2013-03-29
    相关资源
    最近更新 更多