Graustufen-Bild zu NumPy-array für die Fourier-Transformation
Derzeit bin ich mit PIL und NumPy. Ich habe eine farbige png
Bild und ich möchte:
- Lesen Sie es in Graustufen
- Konvertieren NumPy-array
- Führen Sie eine FFT auf array
- Das Bild anzuzeigen,
Dies ist, was ich versuche (in IPython w/--pylab
flag):
In [1]: import Image
In [2]: img = Image.open('ping.png').convert('LA')
In [3]: img_as_np = np.asarray(img)
In [4]: img_as_np
Out[4]: array(<Image.Image image mode=LA size=1000x1000 at 0x105802950>, dtype=object)
In [5]: img_fft = fft.fft2(img_as_np) // IndexError: index out of range for array
Irgendeinem Grund für die Verwendung der
Nachdem du darüber nachdenkst, ist die Antwort auf stackoverflow.com/a/14472089/1832154 zeigt, wie korrekt das Ergebnis einer Fourier-Transformation.
Ich habe irgendwo gelesen, dass
LA
- Modus (Graustufen mit alpha) ?Nachdem du darüber nachdenkst, ist die Antwort auf stackoverflow.com/a/14472089/1832154 zeigt, wie korrekt das Ergebnis einer Fourier-Transformation.
Ich habe irgendwo gelesen, dass
LA
- Modus lassen Sie mich imshow()
in Graustufen, ich merke jetzt L
legt es in den Graustufen als gut, aber ich brauche nur ein argument hinzufügen, um imshow()
um sicherzustellen, dass es zeigt richtig, wie die Graustufen. Ich habe gelernt (aus den Antworten unten) A
wird verhindert, dass die Umwandlung geschieht, richtig.. mein Fehler 🙂 vielen Dank!
InformationsquelleAutor adelbertc | 2013-01-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie möchten, verwenden Sie den Modus 'L' statt 'LA' als parameter der convert () - Methode. 'LA" hinterlässt einen alpha-Kanal und dann die numpy.asarray, die nicht funktioniert wie Sie soll. Wenn Sie den alpha-Kanal, dann müssen Sie eine andere Methode zum konvertieren in ein numpy-array. Sonst, verwenden Sie den Modus 'L'.
InformationsquelleAutor Justin Peel
Es sieht aus wie Sie verwenden eine version des PIL vor 1.1.6, wo Sie führten die Methoden so, dass numpy würde wissen, was zu tun mit einem
Image
. Also haben Sie einfach immerimg_as_np
als ein-element-array mit einerImage
Objekt (wasOut[4]
Sie angezeigt wird).Ihnen stattdessen, etwas zu tun, wie
np.asarray(img.getdata())
, die Ihnen einenum_pixels x num_channels
array von ganzen zahlen zwischen 0 und 255 (zumindest für die png, die ich ausprobiert habe). Sie möchtenlegen Sie es aus wie das Bild (umgesetzt). Vielleicht wollen Sie auch eine Division durch 255 zu bekommen, float-Werte zwischen 0 und 1, wenn das ist das format, das Sie erwarten sind (wie z.B. matplotlib ist
imshow
).InformationsquelleAutor Dougal
Mit diese für ein Bild:
InformationsquelleAutor Jaime