fft和阵列到图像/图像到阵列的转换

kam*_*ame 3 python fft image-processing

我想对图像进行傅里叶变换.但是如何将图片更改为数组呢?在此之后,我想我应该使用numpy.fft.rfft2进行转换.以及如何从阵列变回图像?提前致谢.

int*_*jay 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')
Run Code Online (Sandbox Code Playgroud)

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')
Run Code Online (Sandbox Code Playgroud)

  • @kame因为对`abs`的调用会丢失数据.此外,源图像应为灰度,否则您将获得3D阵列而不是2D. (2认同)