FFT sur l'image avec Python

J'ai un problème avec la FFT la mise en œuvre en Python. J'ai complètement étranges résultats.
Ok, donc, je veux ouvrir une image, d'obtenir la valeur de chaque pixel de RVB, puis-je utiliser de la fft sur elle, et de le convertir à nouveau l'image.

Mon étapes:

1) je suis à l'ouverture d'une image avec PIL bibliothèque en Python comme ce

from PIL import Image
im = Image.open("test.png")

2) je suis l'obtention de pixels

pixels = list(im.getdata())

3) je suis séparée de chaque pixel à r,g,b valeurs

for x in range(width):
    for y in range(height):
        r,g,b = pixels[x*width+y]
        red[x][y] = r
        green[x][y] = g
        blue[x][y] = b

4). Supposons que j'ai un pixel (111,111,111). Et l'utilisation de la fft sur toutes les valeurs en rouge comme ça

red = np.fft.fft(red)

Et puis:

print (red[0][0], green[0][0], blue[0][0])

Mon résultat est:

(53866+0j) 111 111

C'est complètement faux je pense. Mon image est 64x64, et la FFT à partir de gimp est complètement différent. En fait, mon FFT me donner seulement des tableaux avec des valeurs énormes, c'est pourquoi mon image de sortie est noir.

Avez-vous une idée où est le problème?

[MODIFIER]

J'ai changé, comme l'a suggéré à

red= np.fft.fft2(red)

Et après que je l'échelle

scale = 1/(width*height)
red= abs(red* scale)

Et encore, je suis seul noir de l'image.

[EDIT2]

Ok, donc permet de prendre une image. FFT sur l'image avec Python

Supposer que je ne veux pas l'ouvrir et l'enregistrer comme image en niveaux de gris. Donc, je fais comme ça.

def getGray(pixel):
    r,g,b = pixel
    return (r+g+b)/3  

im = Image.open("test.png")
im.load()

pixels = list(im.getdata())
width, height = im.size
for x in range(width):
    for y in range(height):
        greyscale[x][y] = getGray(pixels[x*width+y])  

data = []
for x in range(width):
     for y in range(height):
         pix = greyscale[x][y]
         data.append(pix)

img = Image.new("L", (width,height), "white")
img.putdata(data)
img.save('out.png')

Après cela, je suis de cette image FFT sur l'image avec Python, qui est ok. Alors maintenant, je veux faire de la fft sur mon image avant je vais l'enregistrer à nouveau, alors je fais comme ceci

scale = 1/(width*height)
greyscale = np.fft.fft2(greyscale)
greyscale = abs(greyscale * scale)

après le chargement. Après les enregistrer dans un fichier, j'ai FFT sur l'image avec Python. Donc, nous allons essayer maintenant de test ouvert.png avec gimp et utiliser le filtre FFT plugin. Je suis de cette image, ce qui est correct FFT sur l'image avec Python

Comment je peux gérer ça?

Si vous avez une image, je vous suggère d'utiliser fft2 2d des transformées de fourier discrètes docs.scipy.org/doc/numpy/reference/generated/...
Je pense que la question a un grand XY problème. S'il vous plaît dites-nous ce que vous êtes vraiment essayer de faire. Est-il un algorithme spécifique que vous souhaitez mettre en œuvre? Aussi, pouvez-vous nous montrer un exemple de l'image et de ce que Gimp est la FFT produit (qui est ce que vous voulez essayer et produire en Python)?
Pourriez-vous s'il vous plaît également partager le code qui enregistre vos résultant de la FFT en tant qu'image?

OriginalL'auteur Tatarinho | 2016-07-20