How do I plot FFT in Numpy


Question

This seems like a very easy question, yet I couldn't find any documentation for this.

I have an image in Numpy, and i want to imshow the FFT.

In Matlab I can just do

F = fft(myimg)
imshow(F)

I can't do the same in Numpy because F is complex valued. Trying to do imshow(real(F)) gives me an all black image - I'm guessing because in [0,1] instead of 0..255. Multiplying by 255 also doesn't fix the issue.

Any ideas on how to get my plot?

Update:

Okay, natan pointed out how I incorrectly simplified this problem. Allow me to backtrack a bit. I have a video matrix, of dimensions (200, 30, 30, 3). 200 frames, 30x30 pixels, 3 color channels. For each color channel of each pixel, I want to compute fft of that pixel across time in the series. That should give me a new matrix which is (200,30,30,3). For each pixel, across each color channel, a 200-dim temporal fourier transform of each pixel. Then I should be able to look at e.g. the image created by the values of the first coefficient of the fourier transform in each pixel.

Note that the matlab fft operates on the first nonsingleton dimension, so F = fft(video) is doing what I'm after.

1
5
3/21/2013 8:10:08 AM

Here's an example for a 2D image using scipy :

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()

For a 1D trace you can see and example here...

9
5/23/2017 12:09:30 PM

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon