我想对一幅图像进行傅里叶变换。 但是如何将图片转换为数组呢? 然后我认为我应该使用numpy.fft.rfft2进行变换。 那么如何将数组转换回图像呢? 谢谢提前。
我想对一幅图像进行傅里叶变换。 但是如何将图片转换为数组呢? 然后我认为我应该使用numpy.fft.rfft2进行变换。 那么如何将数组转换回图像呢? 谢谢提前。
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')