Почему mvnpdf и fspecial ('gaussian') дают разные матрицы в MatLab? - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь создать двумерное гауссово ядро ​​в 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);

Даже после этого есть небольшие различия в десятичных точках.

1 Ответ

0 голосов
/ 23 января 2019

Входной параметр SIGMA для mvnpdf должен быть

sigma_mat = sigma^2 * eye(2);

Даже при одинаковых сигмах две сгенерированные матрицы не совпадают. fspecial гарантирует, что sum(f(:))==1. Так как вы отсекаете хвосты, эта нормализация немного отличается от нормализации PDF нормального распределения. Вы заметите большие различия при уменьшении sigma (из-за увеличения потерь информации при выборке) и при уменьшении размера выходной матрицы (потому что это отсекает больше хвостов). Для больших sigma и больших размеров выходной матрицы различия должны быть очень малыми.

Причина, по которой fspecial нормализует этот способ, заключается в том, что вывод подразумевается как ядро ​​свертки. При применении сглаживающего фильтра вес фильтра должен составлять до 1, чтобы избежать изменения средней интенсивности изображения. Если вы намерены использовать сгенерированное ядро ​​для обработки изображений, используйте fspecial или нормализуйте вывод mvnpdf.

...