Comment obtenir un filtre gaussien en python
Je suis à l'aide de python pour créer un filtre gaussien de taille 5x5.
J'ai vu ce post ici où ils parlent de la même chose mais je n'ai pas trouver exactement la même façon pour obtenir l'équivalent du code python à la fonction matlab fspecial('gaussian', f_wid, sigma)
Est-il un autre moyen de le faire?
J'ai essayé d'utiliser le code suivant :
size = 2
sizey = None
size = int(size)
if not sizey:
sizey = size
else:
sizey = int(sizey)
x, y = scipy.mgrid[-size: size + 1, -sizey: sizey + 1]
g = scipy.exp(- (x ** 2/float(size) + y ** 2 / float(sizey)))
print g / np.sqrt(2 * np.pi)
La sortie obtenue est
[[ 0.00730688 0.03274718 0.05399097 0.03274718 0.00730688]
[ 0.03274718 0.14676266 0.24197072 0.14676266 0.03274718]
[ 0.05399097 0.24197072 0.39894228 0.24197072 0.05399097]
[ 0.03274718 0.14676266 0.24197072 0.14676266 0.03274718]
[ 0.00730688 0.03274718 0.05399097 0.03274718 0.00730688]]
Ce que je veux, c'est quelque chose comme ceci:
0.0029690 0.0133062 0.0219382 0.0133062 0.0029690
0.0133062 0.0596343 0.0983203 0.0596343 0.0133062
0.0219382 0.0983203 0.1621028 0.0983203 0.0219382
0.0133062 0.0596343 0.0983203 0.0596343 0.0133062
0.0029690 0.0133062 0.0219382 0.0133062 0.0029690
source d'informationauteur Khushboo
Vous devez vous connecter pour publier un commentaire.
En termes généraux, si vous voulez vraiment obtenir le exactement le même résultat que MATLAB, la façon la plus simple d'y parvenir est souvent en regardant directement à la source de la fonction MATLAB.
Dans ce cas,
edit fspecial
:Assez simple, hein? C'est <10 minutes de travail au port de ce Python:
Cela me donne la même réponse que
fspecial
à l'intérieur de l'erreur d'arrondi:Cette fonction implémente des fonctionnalités similaires à fspecial dans matlab
http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.get_window.html
de scipy import signal
Cette fonction apparaît seulement à générer 1D noyaux
Je suppose que vous pourriez mettre en œuvre le code pour générer un masque Gaussien vous-même ainsi que d'autres l'ont souligné.
Vous pouvez essayer ce trop (comme produit de 2 indépendants 1D Gaussien variables aléatoires) pour obtenir un Noyau Gaussien 2D:
Salut, je pense que le problème est que pour un filtre gaussien de la normalisation facteur dépend du nombre de dimensions que vous avez utilisé.
Donc le filtre ressemble à ceci
Ce qui vous manque est le carré de la normalisation facteur! Et la nécessité d'effectuer une renormalisation de l'ensemble de la matrice en raison du calcul de la précision!
Le code est associé ici:
La sortie sans normalisée à la somme de 1:
La sortie divisé par np.somme(g_filter):
ici est de fournir un nd-fenêtre gaussienne générateur:
cette fonction va vous donner une unnormalized gaussien fenêtres avec forme, centre, et de la variance.
par exemple:
gen_gaussian_kernel(forme=(3,3,3),moyenne=(1,1,1),var=1.0) de sortie->
J'ai trouvé solution similaire pour ce problème: