5

これは非常に簡単な質問のように思えますが、これに関するドキュメントは見つかりませんでした。

Numpy に画像がありimshow、FFT が必要です。

Matlabでは、私はただ行うことができます

F = fft(myimg)
imshow(F)

F は複素数であるため、Numpy では同じことはできません。やろうとするとimshow(real(F))、真っ黒な画像が表示されます-0..255ではなく[0,1]であるためだと思います。255 を掛けても問題は解決しません。

私のプロットを取得する方法についてのアイデアはありますか?

アップデート:

さて、natan は、私がこの問題を誤って単純化した方法を指摘しました。少し後戻りさせてください。次元(200、30、30、3)のビデオマトリックスがあります。200 フレーム、30x30 ピクセル、3 つのカラー チャンネル。各ピクセルの各カラー チャネルについて、シリーズの時間全体でそのピクセルの fft を計算したいと考えています。これにより、(200,30,30,3) という新しい行列が得られるはずです。ピクセルごとに、各カラー チャネルにわたって、各ピクセルの 200-dim 時間フーリエ変換。次に、各ピクセルのフーリエ変換の最初の係数の値によって作成された画像などを見ることができるはずです。

matlab fft は最初の 1 でない次元で動作するので、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()

1D トレースの場合は、ここで例を確認できます...

于 2013-03-21T07:48:43.723 に答える