Interpréter numpy.fft.fft2 de sortie
Mon objectif est d'obtenir un complot avec les fréquences spatiales de l'image, un peu comme faire une transformation de fourier sur elle. Je ne m'inquiète pas au sujet de la position sur l'image de fonctionnalités avec la fréquence f (par exemple); j'aimerais juste avoir un graphique qui me dit combien de chaque fréquence que j'ai (l'amplitude pour une bande de fréquence peut être représentée par la somme de contraste avec la fréquence).
Je suis en train de faire via le numpy.fft.fft2
fonction.
Voici un lien vers un exemple minimal dépeindre mon cas d'utilisation.
Il s'avère que je ne reçois nettement plus grandes valeurs pour frequencies[:30,:30]
, et de ces absolue de la valeur la plus élevée est frequencies[0,0]
. Comment puis-je interpréter cela?
- Ce que fait exactement l'amplitude de chaque valeur?
- Ce que signifie le fait que ma valeur la plus élevée est dans
frequency[0,0]
qu'est Ce qu'un0 Hz
fréquence? - Puis-je ben les valeurs d'une certaine façon alors que mon spectre de fréquence est de l'orientation agnostique?
Je comprends ce qu'est une fft n'a, en principe, je n'ai pas vraiment l'
numpy.fft.fft2
sortie, je me serais attendu à un tableau 1D sans "null" bande de fréquence.OriginalL'auteur TheChymera | 2014-01-26
Vous devez vous connecter pour publier un commentaire.
freq
a quelques très grandes valeurs, et beaucoup de petites valeurs. Vous pouvez voir que, en traçant des(Voir ci-dessous). Donc, lorsque vous utilisez
Matplotlib utilise
freq.min()
comme la valeur la plus basse de la gamme de couleurs (qui est par défaut de couleur bleue), etfreq.max()
comme la valeur la plus élevée dans la gamme de couleurs (qui est par défaut de couleur rouge). Depuis presque toutes les valeurs de lafreq
sont à proximité de l'extrémité bleue, l'ensemble de la parcelle regarde le bleu.Vous pouvez obtenir une plus informatif de la parcelle par changement d'échelle des valeurs dans
freq
de sorte que les valeurs faibles sont plus largement répartis sur la gamme de couleurs.Par exemple, vous pouvez obtenir une meilleure répartition des valeurs en utilisant les
log
defreq
. (Vous n'avez probablement pas envie de jeter les valeurs les plus élevées, car elles correspondent à des fréquences avec la puissance la plus élevée.)De les docs:
Ainsi,
freq[0,0]
est le "zéro à la fréquence terme. En d'autres termes, c'est le terme constant dans la transformée de Fourier discrète.freq.ravel()
désagrège le tableau 2d dans un 1d tableau dans lequel chaque ligne est en lecture consécutivement à droite? comment se fait-je n'ai pas un deuxième pic à 200, un troisième à 400 etc (comme le journal(freq) parcelle de préciser)? Aussi, pourquoi ne hist(log(freq)) stop à 16 sur l'axe des x?plt.hist
est de faire un histogramme des valeurs. Lex-axis
représente les valeurs delog(freq)
et lay-axis
représente un décompte du freqently ces valeurs se produire. Il n'y a pas répétitif pics en raison des valeurs similaires sont en cours de mise à la poubelle ensemble. La valeur supérieure de16
signifie que la plus grande valeur danslog(freq)
est près de 16. En effet,np.log(freq.max())
est égal à 14.8.(Et oui,
freq.ravel()
est un 1D vue du tableau 2D.)l'ai eu 😉 et ce à la fréquence spatiale (mesurée en 1/px) la valeur en freq[0,1] par exemple, correspondent à?
Vous pouvez utiliser numpy.fft.fftfreq pour cela. Il est un exemple 2D ici.
OriginalL'auteur unutbu