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'); ?
Pouvez-vous au moins utiliser conv2(image, gaussian_kernel, 'même'); ?
OriginalL'auteur user1098761 | 2012-11-02
Vous devez vous connecter pour publier un commentaire.
voici une alternative:
Créer la 2D-Gaussien:
Image filtrée, compte tenu de votre image de marque est appelé
Im
:Voici quelques parcelles:
Quel est le problème avec meshgrid?
Je souhaite faire un filtre Gaussien code matlab sans origine matlab seule fonction...
meshgrid matrices sont facilement créés dans n'importe quelle langue. C'est pourquoi, dans de nombreuses langues, vous avez meshgrid (vous le trouverez en python, java, etc).
Est-il possible de le faire sans conv2?
OriginalL'auteur bla
Cet exemple de code est lente en raison de la pour les-boucles. Dans matlab, vous pouvez mieux utiliser conv2, comme suggéré par l'utilisateur:bla, ou tout simplement utiliser filtre2.
OriginalL'auteur Gelliant