1

我的 Python 代码,专为计算傅立叶变换而设计,无法完成任务。

  def fouriertransform(result):     #function for FTM computation
    for filename in glob.iglob('*.tif'):
     imgfourier = scipy.misc.imread(filename, flatten = True)
     image = np.array([imgfourier])#make an array as np
     arr = np.abs(np.fft.fftshift(np.fft.fft2(image)))**2
      with open('сomput.csv', 'wb') as csvfile:
       for elem in arr.flat[:50]:
       writer = csv.writer(csvfile, .....)
       writer.writerow([('{}\t'.format(elem))])

回溯(最近一次通话最后):

  File "C:\Python27\lib\site-packages\numpy\fft\fftpack.py", line 524, in _raw_fftnd
  a = function(a, n=s[ii], axis=axes[ii])
  File "C:\Python27\lib\site-packages\numpy\fft\fftpack.py", line 164, in fft
  return _raw_fft(a, n, axis, fftpack.cffti, fftpack.cfftf, _fft_cache)
  File "C:\Python27\lib\site-packages\numpy\fft\fftpack.py", line 75, in _raw_fft
  r = work_function(a, wsave)

内存错误

图像很大 90 MB,如果它以某种方式适用于 1-5 MB 图像,如何解决问题?

谢谢

4

1 回答 1

1

一些建议:

  • 这些scipy.fftpack函数允许您选择覆盖输入数组 ( overwrite_x=True),这可能会为您节省一些内存。

  • 您也可以尝试anfft(或更新的pyFFTW),它只是 FFTW C 库的 Python 包装器。它绝对比 numpy 和 scipy FFT 函数快得多,至少在我手中它似乎也更节省内存。

  • 您能否将数组转换为较低的位深度(float64->float32,uint16->uint8)?

  • 您总是可以先对图像进行下采样(例如使用scipy.ndimage.zoom)。降低图像的空间分辨率当然会降低 FFT 的光谱分辨率,但这对你来说可能并不重要,具体取决于你想用它做什么。

  • 再买一些内存?

于 2013-07-04T01:54:04.310 回答