2010-04-16 12 views

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') 
+0

lien: http://www.pythonware.com/products/pil/ – Personman

+0

Quand je fais un fft inverse, je ne récupère pas l'image réelle. Pourquoi? – kame

+2

@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