matlab - 离散高斯滤波器的标准偏差
问题描述
我在 MATLAB 中创建了一个高斯滤波器,如下所示:
f = fspecial('gaussian', [1, 3], 2);
这创建了一个具有高斯分布的 1×3 滤波器。但是,当我这样做时std(f)
,我得到一个不同的值而不是 2。
为什么我没有得到标准差的 2 值?
解决方案
您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
尽管如此,如果您绘制您的 sampled f
,您会发现它根本不像高斯!这是因为它被截断了,你采样的三个点都聚集在峰值附近,而尾部没有样本。您需要对更大的区域进行采样。我总是建议在每边采样到 3*sigma:
sigma = 2;
sz = ceil(3*sigma) * 2 + 1;
f = fspecial('gaussian', [1, sz], sigma)
请参阅我关于对高斯内核进行采样的博文。
推荐阅读
- c - 错误:可变大小的对象可能未初始化。我不明白为什么?
- javascript - 如何使用 Vue.js 仅更改特定块的数据值?
- apache-flink - Flink 作业重启设置被忽略
- python - decompyle3 是否开始提供对 Python 3.9 的支持?
- assembly - 在汇编中将16位值扩展为32位形式以及关于U2代码的问题
- flutter - Flutter 构建设计
- applescript - 有没有办法使用 AppleScript 在 Google Chrome 中暂停 YouTube 视频?
- rust - 如何解决 Rust 中的“无法移动借来的值”(flatbuffers 示例)?
- python - 如何使用 MYPY 传递关键字参数?
- python - 来自 sklearn 的关于 SVC 对象的 `decision_function_shape` 参数的说明