Je souhaite effectuer une transformation de Fourier d'une image. Mais comment puis-je changer l'image en tableau? Et après cela, je pense que je devrais utiliser numpy.fft.rfft2 pour la transformation. Et comment revenir de la matrice à l'image? Merci d'avance.fft et la conversion de matrice vers image/image vers matrice
3
A
Répondre
12
Vous pouvez utiliser la bibliothèque PIL pour charger/enregistrer des images et convertir vers/depuis des matrices numpy.
import Image, numpy
i = Image.open('img.png')
i = i.convert('L') #convert to grayscale
a = numpy.asarray(i) # a is readonly
b = abs(numpy.fft.rfft2(a))
j = Image.fromarray(b)
j.save('img2.png')
I utilisé abs
ci-dessus parce que le résultat de la FFT a des valeurs complexes de sorte qu'il ne fait pas vraiment de sens pour le convertir directement à une image. La conversion en niveaux de gris est effectuée pour que la FFT soit effectuée sur un seul canal - vous pouvez choisir une autre méthode pour sélectionner un canal ou passer le bon paramètre axes
à rfft2
et extraire ensuite le canal dont vous avez besoin.
Edit:
Pour effectuer également une FFT inverse et retourner l'image originale, les œuvres suivantes pour moi:
import Image, numpy
i = Image.open('img.png')
i = i.convert('L') #convert to grayscale
a = numpy.asarray(i)
b = numpy.fft.rfft2(a)
c = numpy.fft.irfft2(b)
j = Image.fromarray(c.astype(numpy.uint8))
j.save('img2.png')
lien: http://www.pythonware.com/products/pil/ – Personman
Quand je fais un fft inverse, je ne récupère pas l'image réelle. Pourquoi? – kame
@kame Parce que l'appel à 'abs' perd des données. En outre, l'image source doit être en niveaux de gris, sinon vous obtiendrez un tableau 3D au lieu de 2D. – interjay