FFT与数组到图像/图像到数组的转换
我想对一张图片进行傅里叶变换。
但是我该怎么把图片转换成数组呢?
然后我想我应该使用numpy.fft.rfft2来进行变换。
最后,怎么把数组再转换回图片呢?
提前谢谢你。
1 个回答
12
你可以使用PIL这个库来加载和保存图片,还可以把图片转换成numpy数组,或者把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')