Создание центрированной гауссовой маски размытия на изображении - PullRequest
0 голосов
/ 12 ноября 2018

Я попытался создать маску гауссовского шума, которая должна быть наложена на мое изображение с размером sizeX, sizeY. Я нашел способ сделать это с помощью функции meshgrid, и она работала нормально:

function gaussian = GetGaussNoiseImage(sizeX, sizeY, A, std) 
indicator = -floor(sizeX/2) : floor(sizeY/2);
[X Y] = meshgrid(indicator, indicator);
h = exp(-(X.^2 + Y.^2) / (2*std^2));
mesh(h);

Мой первый подход был следующим:

function gaussian = GetGaussNoiseImage(sizeX, sizeY, A, std)
[sizeX sizeY] = size(I)
centerX = sizeX/2;
centerY = sizeY/2;
gaussian = zeros(sizeX, sizeY); 

for i = 1:sizeX
    for j = 1:sizeY
        gaussian(i, j) = A.*exp(- ((i - centerX).^2 + (j - centerY).^2 )/2*std^2);
    end
end
mesh(gaussian);

Для меня это точно такой же подход с той разницей, что в нем есть два цикла for. По какой-то причине он не хочет функционировать, хотя. Кто-нибудь может объяснить мне, что я сделал не так?

Вот мое выходное изображение:

output.

1 Ответ

0 голосов
/ 12 ноября 2018

У вас есть ошибка в уравнении для гауссов.Вы пишете:

gaussian(i, j) = A.*exp(- ((i - centerX).^2 + (j - centerY).^2 )/2*std^2);

Но вместо этого вы должны сделать:

gaussian(i, j) = A.*exp(- ((i - centerX).^2 + (j - centerY).^2 )/ ( 2*std^2 ) );
                                                                  ^         ^

Обратите внимание на добавленные скобки!У вас есть они в первом фрагменте кода, но забыли их во втором.

...