Python Windows下使用NumPy阵列对图像进行快速傅里叶变换时的内存错误

Python Windows下使用NumPy阵列对图像进行快速傅里叶变换时的内存错误,python,windows,numpy,fft,Python,Windows,Numpy,Fft,代码可以从我的Ubuntu 11.04上的.tiff图像计算傅里叶变换。在Windows XP上,它会产生内存错误。改变什么?多谢各位 def fouriertransform(result): #function for Fourier transform computation for filename in glob.iglob ('*.tif') imgfourier = scipy.misc.imread(filename) #read the imag

代码可以从我的Ubuntu 11.04上的
.tiff
图像计算傅里叶变换。在Windows XP上,它会产生内存错误。改变什么?多谢各位

def fouriertransform(result):     #function for Fourier transform computation
    for filename in glob.iglob ('*.tif')
        imgfourier = scipy.misc.imread(filename) #read the image
        arrayfourier = numpy.array([imgfourier])#make an array 
        # Take the fourier transform of the image.
        F1 = fftpack.fft2(arrayfourier)
        # Now shift so that low spatial frequencies are in the center.
        F2 = fftpack.fftshift(F1)
        # the 2D power spectrum is:
        psd2D = np.abs(F2)**2
        L = psd2D
        np.set_printoptions(threshold=3)
        #np.set_printoptions(precision = 3, threshold = None, edgeitems = None, linewidth = 3, suppress = True, nanstr = None, infstr = None, formatter = None)
        for subarray in L:
            for array in subarray:
                for array in subarray:
                    for elem in array:
                        print '%3.10f\n' % elem
错误输出为:

Traceback (most recent call last):
  File "C:\Documents and Settings\HrenMudak\Мои документы\Моя музыка\fourier.py", line 27, in <module>
    F1 = fftpack.fft2(arrayfourier)
  File "C:\Python27\lib\site-packages\scipy\fftpack\basic.py", line 571, in fft2
    return fftn(x,shape,axes,overwrite_x)
  File "C:\Python27\lib\site-packages\scipy\fftpack\basic.py", line 521, in fftn
    return _raw_fftn_dispatch(x, shape, axes, overwrite_x, 1)
  File "C:\Python27\lib\site-packages\scipy\fftpack\basic.py", line 535, in _raw_fftn_dispatch
    return _raw_fftnd(tmp,shape,axes,direction,overwrite_x,work_function)
  File "C:\Python27\lib\site-packages\scipy\fftpack\basic.py", line 463, in _raw_fftnd
    x, copy_made = _fix_shape(x, s[i], waxes[i])
  File "C:\Python27\lib\site-packages\scipy\fftpack\basic.py", line 134, in _fix_shape
    z = zeros(s,x.dtype.char)
MemoryError
回溯(最近一次呼叫最后一次):
文件“C:\Documents and Settings\HrenMudak\Мзззззе\fourier.py”,第27行,in
F1=fftpack.fft2(阵列浏览器)
文件“C:\Python27\lib\site packages\scipy\fftpack\basic.py”,第571行,在fft2中
返回fftn(x、形状、轴、覆盖x)
文件“C:\Python27\lib\site packages\scipy\fftpack\basic.py”,第521行,在fftn中
返回原始fftn调度(x,形状,轴,覆盖x,1)
文件“C:\Python27\lib\site packages\scipy\fftpack\basic.py”,第535行,在原始fftn中
返回原始fftnd(tmp、形状、轴、方向、覆盖x、工作功能)
文件“C:\Python27\lib\site packages\scipy\fftpack\basic.py”,第463行,在\u raw\u fftnd中
x、 复制=固定形状(x,s[i],蜡[i])
文件“C:\Python27\lib\site packages\scipy\fftpack\basic.py”,第134行,形状为“fix”
z=零(s,x.dtype.char)
记忆者

我尝试运行您的代码,但我用函数替换了
mahotas.imread
,因为我没有该库,无法重现您的错误

还有一些评论:

  • 您能否尝试使用
    scipy.misc.imread
    功能而不是
    mahotas
    功能?我想问题可能就在那里
  • 抛出的实际异常是什么?(+其他输出?)
  • 你的形象有多大尺寸?灰度/RGB?打印大图像的所有值确实会占用相当多的内存,因此最好使用matplotlibs
    imshow
    函数将结果可视化

谢谢,我已经尝试使用scipy函数读取图像,但结果相同,请参见日志错误输出图像的尺寸是多少?i、 e.尝试
print imgfourier.shape
此外,您可以尝试使用imread中的
flatten=True
选项:
imgfourier=imread(filename,flatte=True)#读取图像
谢谢,图像是90 MB。tiff(使用IrphanView合并其中10个图像)我为scipy.misc.imread函数设置flatten=True,出现相同的内存错误,Thanks90MB tiff图像看起来相当大;可能是
imread
功能不适合处理如此大的图像。你说它是从其他10张图片中合并出来的是什么意思?您是否有机会尝试阅读3d(医学)图像卷?您是否也可以在另一个tif图像上测试您的代码?