Comment faire un filtre Gaussien dans Matlab

J'ai essayé de faire un filtre Gaussien dans Matlab sans l'aide de imfilter() et fspecial().
J'ai essayé mais le résultat n'est pas comme celui que j'ai avec imfilter et fspecial.

Voici mes codes.

function Gaussian_filtered = Gauss(image_x, sigma)

% for single axis
% http://en.wikipedia.org/wiki/Gaussian_filter
Gaussian_filtered = exp(-image_x^2/(2*sigma^2)) / (sigma*sqrt(2*pi)); 
end

pour la 2D Gaussien,

function h =  Gaussian2D(hsize, sigma)

n1 = hsize;
n2 = hsize;

for i = 1 : n2 
        for j = 1 : n1
        % size is 10;
        % -5<center<5 area is covered.
        c = [j-(n1+1)/2 i-(n2+1)/2]';                
        % A product of both axes is 2D Gaussian filtering
        h(i,j) = Gauss(c(1), sigma)*Gauss(c(2), sigma);        
        end
    end
end

et la dernière est

function Filtered = GaussianFilter(ImageData, hsize, sigma)

%Get the result of Gaussian
filter_ = Gaussian2D(hsize, sigma);

%check image
[r, c] = size(ImageData);
Filtered = zeros(r, c);    

for i=1:r
    for j=1:c
        for k=1:hsize
            for m=1:hsize
                    Filtered =  Filtered + ImageData(i,j).*filter_(k,m);    
            end
        end
    end
end
end

Mais l'image traitée est presque la même que l'image d'entrée. Je me demande la dernière fonction GaussianFiltered() est problématique...

Grâce.

Ce n'utilisent pas seulement des fspecial pour générer votre noyau Gaussien, et puis peut-être imfilter pour l'appliquer ?
Pouvez-vous au moins utiliser conv2(image, gaussian_kernel, 'même'); ?

OriginalL'auteur user1098761 | 2012-11-02