Python 如何在Numpy中绘制FFT

Python 如何在Numpy中绘制FFT,python,matlab,image-processing,numpy,Python,Matlab,Image Processing,Numpy,这似乎是一个非常简单的问题,但我找不到任何相关文档 我有一个Numpy格式的图像,我想imshowFFT 在Matlab中,我可以 F = fft(myimg) imshow(F) 我不能在Numpy中做同样的事情,因为F是复数。尝试做imshow(real(F))会给我一个全黑的图像-我猜是因为在[0,1]中,而不是在0..255中。乘以255也不能解决这个问题 有没有关于如何获得我的情节的想法 更新: 好的,natan指出了我是如何错误地简化这个问题的。请允许我回溯一下。我有一个视频矩阵,

这似乎是一个非常简单的问题,但我找不到任何相关文档

我有一个Numpy格式的图像,我想
imshow
FFT

在Matlab中,我可以

F = fft(myimg)
imshow(F)
我不能在Numpy中做同样的事情,因为F是复数。尝试做
imshow(real(F))
会给我一个全黑的图像-我猜是因为在[0,1]中,而不是在0..255中。乘以255也不能解决这个问题

有没有关于如何获得我的情节的想法

更新:

好的,natan指出了我是如何错误地简化这个问题的。请允许我回溯一下。我有一个视频矩阵,尺寸为(200,30,30,3)。200帧,30x30像素,3个颜色通道。对于每个像素的每个颜色通道,我想计算该像素在序列中随时间变化的fft。这会给我一个新的矩阵,它是(200,30,30,3)。对于每个像素,通过每个颜色通道,对每个像素进行200维时间傅里叶变换。然后,我应该能够看到,例如,由每个像素中傅里叶变换的第一个系数的值创建的图像


请注意,matlab fft在第一个非Singleton维上运行,因此
F=fft(视频)
正在执行我所要执行的操作。

以下是使用scipy的2D图像示例:

from scipy import fftpack
import numpy as np
import pylab as py

# Take the fourier transform of the image.
F1 = fftpack.fft2(myimg)

# 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

# plot the power spectrum
py.figure(1)
py.clf()
py.imshow( psf2D )
py.show()

对于1D跟踪,您可以看到并举例说明…

您是指
fft
还是
fft2
?以下是一个示例,我希望它能给您带来积极的结果…
fft
。对不起,那是模棱两可的。从技术上讲,我所做的是我有一个图像的时间序列(一个视频),我计算每个像素的时间维的FFT。你使用
myimg
,期望得到某种1D跟踪。您的输入维度是什么?为什么要执行
**2
?此外,我如何丢弃对
F2
不太重要的系数(模拟有损简单压缩)?标准是什么?假设我们从F2算出最大系数,然后我们可以丢弃(将它们置零)所有
abs(F2[x,y])=>abs(37/100*max_系数)
?因为功率或强度定义为振幅绝对值平方。看见关于丢弃系数,您询问如何压缩数据,您可以重新绑定到较小的分辨率,或者在其他地方阅读有关有损压缩的内容)