我想对图像进行傅里叶变换。但是如何将图片更改为数组?在此之后,我认为我应该使用 numpy.fft.rfft2 进行转换。以及如何从数组变回图像?提前致谢。
问问题
8471 次
1 回答
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')
于 2010-04-16T11:37:38.810 回答