2013-03-21 50 views
1

我試圖採取python中的圖像的fft,改變轉換後的圖像,並採取反向fft。具體來說,我有一張我想要轉換的網格圖像,然後將所有圖像轉換爲中心,狹窄的垂直狹縫,然後進行反轉。Python代碼爲基本的網格圖像fft

我與現在的工作,因爲沒有改動變換平面代碼:

import os 
os.chdir('/Users/terra/Desktop') 
import Image, numpy 
i = Image.open('grid.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('grid2.png') 

截至目前,我收到一條錯誤消息:

回溯(最近通話最後一個) : 文件「/Users/terra/Documents/pic2.py」,第11行,在 j.save('grid2.png') 文件「/Library/Frameworks/Python.framework/Versions/2.7/lib/python2 .7/site-packages/PIL/Image.py「,第1439行,保存 save_handler(self,fp,filename) 文件」/ Libr ary/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PIL/PngImagePlugin.py「,第506行,在_save中 引發IOError,」無法將模式%s寫入PNG「%模式 IOError:不能將模式F寫成PNG

我對編程和傅立葉變換非常陌生,所以我在網上找到的大多數相關的線程都在我的頭上。非常感謝非常具體的幫助。謝謝!

+1

在Python 2.5中,我沒有收到此代碼的錯誤消息。 – Bemmu 2013-03-21 04:03:51

+0

風格化,但我建議您不要將變量名稱'i'和'j'用於除整數索引變量之外的任何內容,例如用於遍歷範圍或循環。 – Patashu 2013-03-21 04:13:29

+1

您可以將您的代碼複製並粘貼到控制檯中,然後編輯您的問題以包含整個生成的回溯? (如果代碼真的是'a = numpy.asarray('i')'或其他東西,但我不確定哪一行是第四行,我可以想辦法觸發錯誤消息。) – DSM 2013-03-21 04:25:17

回答

1

主要問題是該數組在FFT後包含浮點數,但對於PNG輸出有用,則需要有uint8 s。

最簡單的事情是將其轉換爲uint8直接:

b = abs(numpy.fft.rfft2(a)).astype(numpy.uint8) 

這可能以某種方式把它們轉換成整數之前不會產生你想要的形象,所以你必須正常化數組中的值。