Filtre gaussien à scipy
Je veux appliquer un filtre Gaussien de dimension 5x5 pixels sur une image de 512x512 pixels. J'ai trouvé une fonction scipy pour le faire:
scipy.ndimage.filters.gaussian_filter(input, sigma, truncate=3.0)
Comment je choisir le paramètre de sigma pour vous assurer que ma fenêtre Gaussienne est de 5x5 pixels?
source d'informationauteur user2863620
Vous devez vous connecter pour publier un commentaire.
Découvrez le code source ici: https://github.com/scipy/scipy/blob/master/scipy/ndimage/filters.py
Vous verrez que
gaussian_filter
appelsgaussian_filter1d
pour chaque axe. Dansgaussian_filter1d
la largeur du filtre est déterminé implicitement par les valeurs desigma
ettruncate
. En effet, la largeurw
estDonc
Pour w = 5, le côté gauche est 2. Le côté droit est de 2 si
ou
Si vous choisissez
truncate = 3
(remplaçant la valeur par défaut, 4), vous obtenezOn peut vérifier cela par le filtrage d'une entrée qui est de tous les 0 sauf pour un seul 1 (c'est à dire trouver la réponse impulsionnelle du filtre) et compter le nombre de valeurs non nulles dans le filtre de sortie. (Dans la suite,
np
estnumpy
.)D'abord créer une entrée avec un seul 1:
Vérifier le changement de la taille à
sigma = 0.5
...... et à
sigma = 0.8333...
:Suivant l'excellente réponse précédente:
s = 2
w = 5
t = (((w - 1)/2)-0.5)/s
filtered_data = scipy.ndimage.filters.gaussian_filter(data, sigma=s, truncate=t)