【发布时间】:2019-01-24 01:33:54
【问题描述】:
我正在尝试在 MatLab 中生成二维高斯核。我找到了两种方法。
1.使用mvnpdf
mu = [0 0];
sigma = 1.4;
sigma_mat = 1/sigma^2 * eye(2);
x1 = -3:1:3;
x2 = x1;
[X1,X2] = meshgrid(x1,x2);
G = mvnpdf([X1(:) X2(:)],mu,sigma_mat);
F = reshape(G,length(x2),length(x1));
这给出了下面的矩阵
0 0 0 0 0 0 0
0 0 0 0.01 0 0 0
0 0 0.04 0.12 0.04 0 0
0 0.01 0.12 0.31 0.12 0.01 0
0 0 0.04 0.12 0.04 0 0
0 0 0 0.01 0 0 0
0 0 0 0 0 0 0
f = fspecial('gaussian', [7,7], 1.4);
这给出了矩阵
0.00 0.00 0.01 0.01 0.01 0.00 0.00
0.00 0.01 0.02 0.03 0.02 0.01 0.00
0.01 0.02 0.05 0.06 0.05 0.02 0.01
0.01 0.03 0.06 0.08 0.06 0.03 0.01
0.01 0.02 0.05 0.06 0.05 0.02 0.01
0.00 0.01 0.02 0.03 0.02 0.01 0.00
0.00 0.00 0.01 0.01 0.01 0.00 0.00
这两个函数有什么区别?为什么他们给出不同的输出?
谢谢!
编辑 1: 正如Cris Luengo 正确指出的那样,sigma_mat 中有一个错误。应该是
sigma_mat = sigma^2 * eye(2);
即使在那之后,小数点也有一些细微的差异。
【问题讨论】:
-
哦!你是对的。它应该是
sigma_mat = sigma^2 * eye(2);sigma_mat 必须是协方差矩阵。我没有注意到 mvnpdf 取 sigma_mat 的倒数。即使在那之后,小数点也有一些细微的差别。知道为什么吗?一会儿我会更新问题 -
完美。请张贴这两个 cmets 作为答案。我会接受的。谢谢:)