3
我想對圖像進行傅立葉變換。 但我怎樣才能將圖片更改爲數組? 之後,我認爲我應該使用numpy.fft.rfft2進行轉換。 以及如何從數組變回圖像? 在此先感謝。fft和陣列到圖像/圖像到陣列轉換
我想對圖像進行傅立葉變換。 但我怎樣才能將圖片更改爲數組? 之後,我認爲我應該使用numpy.fft.rfft2進行轉換。 以及如何從數組變回圖像? 在此先感謝。fft和陣列到圖像/圖像到陣列轉換
您可以使用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')
鏈接:http://www.pythonware.com/products/pil/ – Personman 2010-04-16 11:39:17
當我做一個逆fft,我沒有得到真正的圖像回來。爲什麼? – kame 2010-04-16 11:57:04
@ kame因爲呼叫'abs'會丟失數據。此外,源圖像應該是灰度的,否則你會得到3D數組而不是2D。 – interjay 2010-04-16 12:05:54