5

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

我在 Numpy 中有一个图像,我想要imshowFFT。

在 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 在第一个非单一维度上运行,所以F = fft(video)我正在做的事情。

4

1 回答 1

9

这是使用 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()

对于一维迹线,您可以在此处查看示例...

于 2013-03-21T07:48:43.723 回答