Я пытаюсь создать двумерное гауссово ядро в 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
Использование
fspecial ('gaussian') 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: Как правильно заметил Крис Луенго , в sigma_mat
произошла ошибка.Это должно быть
sigma_mat = sigma^2 * eye(2);
Даже после этого есть небольшие различия в десятичных точках.