Filtre gaussien à MATLAB

le filtre gaussien de MATLAB convolve-t-il L'image avec le noyau gaussien? Aussi, comment choisissez-vous les paramètres hsize (taille de filtre) et sigma? Sur quoi basez-vous?

28
demandé sur Dima 2010-05-05 17:30:56

3 réponses

vous créez d'abord le filtre avec fspecial puis convolvez l'image avec le filtre en utilisant imfilter (qui fonctionne sur des images multidimensionnelles comme dans l'exemple).

vous spécifiez sigma et hsize dans fspecial .

Code:

%%# Read an image
I = imread('peppers.png');
%# Create the gaussian filter with hsize = [5 5] and sigma = 2
G = fspecial('gaussian',[5 5],2);
%# Filter it
Ig = imfilter(I,G,'same');
%# Display
imshow(Ig)
55
répondu Jacob 2010-05-05 13:42:30

@Jacob vous a déjà montré comment utiliser le filtre gaussien dans Matlab, donc je ne vais pas le répéter.

je choisirais une taille de filtre d'environ 3*sigma dans chaque direction (ronde à Impair entière). Ainsi, le filtre se décompose à presque zéro aux bords, et vous n'obtiendrez pas de discontinuités dans l'image filtrée.

Le choix de sigma dépend beaucoup de ce que vous voulez faire. Le lissage gaussien est un filtrage passe-bas, ce qui signifie qu'il supprime les détails de haute fréquence (bruit, mais aussi bords), tout en préservant les parties de basse fréquence de l'image (c.-à-d. ceux qui ne varient pas tellement). En d'autres termes, le filtre brouille tout ce qui est plus petit que le filtre.

si vous cherchez à supprimer le bruit dans une image afin d'améliorer la détection de petites caractéristiques, par exemple, je suggère de choisir un sigma qui rend le gaussien juste un peu plus petit que la caractéristique.

21
répondu Jonas 2017-05-23 11:46:55

dans MATLAB R2015a ou plus récent, il n'est plus nécessaire (ou conseillé du point de vue de la performance) d'utiliser fspecial suivi de imfilter car il existe une nouvelle fonction appelée imgaussfilt qui exécute cette opération en une seule étape et de manière plus efficace.

la syntaxe de base:

B = imgaussfilt(A,sigma) filtres image A avec un noyau de lissage gaussien 2-D avec écart-type spécifié par sigma .

la taille du filtre pour un écart type gaussien donné ( sigam ) est choisie automatiquement, mais peut aussi être spécifiée manuellement:

B = imgaussfilt(A,sigma,'FilterSize',[3 3]);

la valeur par défaut est 2*ceil(2*sigma)+1 .

les caractéristiques supplémentaires de imgaussfilter sont la capacité d'opérer sur gpuArray s, le filtrage dans la fréquence ou le domaine spatial, et les options avancées de rembourrage d'image. Il ressemble beaucoup IPP... hmmm. En plus, il y a une version 3D appelée imgaussfilt3 .

12
répondu chappjc 2015-03-06 22:01:27