1

我正在尝试在 python 中获取图像的 fft,更改转换后的图像并进行反向 fft。具体来说,我有一张我想转换的网格图片,然后将除了中间的、狭窄的垂直狭缝之外的所有东西都涂黑,然后进行反向 fft。

我现在正在使用的代码,不改变变换平面:

import os
os.chdir('/Users/terra/Desktop')
import Image, numpy
i = Image.open('grid.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('grid2.png')

截至目前,我收到一条错误消息:

Traceback(最近一次调用最后):文件“/Users/terra/Documents/pic2.py”,第 11 行,在 j.save('grid2.png') 文件“/Library/Frameworks/Python.framework/Versions/2.7 /lib/python2.7/site-packages/PIL/Image.py”,第 1439 行,保存 save_handler(self, fp, filename) 文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2. 7/site-packages/PIL/PngImagePlugin.py”,第 506 行,在 _save 中引发 IOError,“无法将模式 %s 写入 PNG”% 模式 IOError:无法将模式 F 写入 PNG

我对编程和傅里叶变换很陌生,所以我在网上找到的大多数相关线程都在我头上。非常感谢您提供非常具体的帮助。谢谢!

4

1 回答 1

1

主要问题是该数组在 FFT 之后包含浮点数,但要使其对 PNG 输出有用,您需要有uint8s.

最简单的就是uint8直接转换成:

b = abs(numpy.fft.rfft2(a)).astype(numpy.uint8)

这可能不会产生您想要的图像,因此您必须在将数组中的值转换为整数之前以某种方式对其进行标准化。

于 2013-03-21T06:31:28.810 回答