2010-04-16 114 views
3

我想對圖像進行傅立葉變換。 但我怎樣才能將圖片更改爲數組? 之後,我認爲我應該使用numpy.fft.rfft2進行轉換。 以及如何從數組變回圖像? 在此先感謝。fft和陣列到圖像/圖像到陣列轉換

回答

12

您可以使用PIL庫加載/保存圖像並將其轉換爲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') 

我以前abs上面,因爲FFT的結果具有複雜的值,所以它並沒有真正意義的直接轉換爲圖像。轉換爲灰度是爲了使FFT僅在單個通道上完成 - 您可以選擇其他方式來選擇通道,或者將正確的axes參數傳遞給rfft2,然後提取所需的通道。

編輯:

要還進行逆FFT,回到原來的形象,爲我以下工作:

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

鏈接:http://www.pythonware.com/products/pil/ – Personman 2010-04-16 11:39:17

+0

當我做一個逆fft,我沒有得到真正的圖像回來。爲什麼? – kame 2010-04-16 11:57:04

+2

@ kame因爲呼叫'abs'會丟失數據。此外,源圖像應該是灰度的,否則你會得到3D數組而不是2D。 – interjay 2010-04-16 12:05:54