11
votes

Création de filtre gaussien de la longueur requise en python

Quelqu'un pourrait-il suggérer quelle bibliothèque prend en charge la création d'un filtre gaussien de la longueur requise et de Sigma? J'ai essentiellement besoin d'une fonction équivalente pour la fonction MATLAB ci-dessous:

fltr = fspecial('gaussian',[1 n],sd)


0 commentaires

4 Réponses :


6
votes

Peut-être scipy.ndimage.filters.gaussian_filter ? Je ne l'ai jamais utilisé, mais la documentation est à: https://docs.scipy.org/doc/scipy-0.15.1/Reference/generated/scipy.ndimage.filters.gaussian_filter.html


0 commentaires

14
votes

Vous n'avez pas besoin d'une bibliothèque pour un simple gaussien 1D Gaussien.

>>> g = gauss()
1.48671951473e-06
0.000133830225765
0.00443184841194
0.0539909665132
0.241970724519
0.398942280401
0.241970724519
0.0539909665132
0.00443184841194
0.000133830225765
1.48671951473e-06

>>> sum(g)
0.99999999318053079


2 commentaires

Je m'attendais à ce qu'il retourne quelque chose comme la courbe gaussienne après PLT.hist (g) mais c'est une demi-devinge


Grande réponse simple! Il est toujours préférable d'éviter d'utiliser des bibliothèques, lorsque cela est possible, vous comprenez donc ce qui se passe dans votre code :). Pour le cas d'un N , la seule chose à modification est r = np.linspace (-int (n / 2) + 0.5, int (n / 2) -0.5, n ) .



3
votes

Essayez scipy.ndimage.gaussian_filter code>, mais voulez-vous vraiment le noyau ou voulez-vous aussi l'appliquer? (Dans ce cas, vous pouvez simplement utiliser cette fonction.) Dans l'ancien cas, appliquez le filtre sur un tableau de 0 Everywhere, mais avec un 1 au centre. Pour le boîtier 1D plus facile à écrire, ceci serait par exemple:

>>> ndimage.gaussian_filter1d(np.float_([0,0,0,0,1,0,0,0,0]), 1)
array([  1.33830625e-04,   4.43186162e-03,   5.39911274e-02,
         2.41971446e-01,   3.98943469e-01,   2.41971446e-01,
         5.39911274e-02,   4.43186162e-03,   1.33830625e-04])


0 commentaires

0
votes

Si la vitesse d'exécution est d'importance, je recommande fortement de créer une fois le filtre une fois, puis de l'utiliser sur chaque itération. Les optimisations sont constamment fabriquées, mais il y a quelques années, cela a considérablement augmenté de code que j'ai écrit. (Les réponses ci-dessus montrent comment créer le filtre).


0 commentaires