f1.py |
#!/bin/env python import Numeric import FFT import Gnuplot gp = Gnuplot.Gnuplot() gp.title = ('FFT Demo') gp('set data style lines') L = 128 # 2のべき乗 U = 0.125 # 0.1から0.5程度で変えてみる UL = int(L*U) X = range(L) f = Numeric.array([1.0]*UL+[0.0]*(L-UL)) d = Gnuplot.Data(X,f,title='Original Function') gp.plot(d) raw_input('Press Return') F = FFT.fft(f) Fr = Gnuplot.Data(X,F.real,title='FFT Real part') Fi = Gnuplot.Data(X,F.imag,title='FFT Imaginary part') gp.plot(Fr,Fi) raw_input('Press Return') |
f2.py |
#!/bin/env python import Numeric import FFT import Gnuplot gp = Gnuplot.Gnuplot() gp.title = ('FFT Demo') gp('set data style lines') L = 32 # 2のべき乗 U = 0.125 # 0.1から0.5程度で変えてみる UL = int(L*U) X = range(L) f = Numeric.array([1.0]*UL+[0.0]*(L-UL)) f = Numeric.outerproduct(f,f) d = Gnuplot.GridData(f,X,X,title='Original Function') gp.splot(d) raw_input('Press Return') F = FFT.fft2d(f) Fr = Gnuplot.GridData(F.real,X,X,title='FFT Real part') Fi = Gnuplot.GridData(F.imag,X,X,title='FFT Imaginary part') gp.splot(Fr,Fi) raw_input('Press Return') |
pnmscale -width=128 -height=128 cloud.pgm > cl.pgm(画像は何を使っても良いが、PGM形式の白黒画像を用いる)
このプログラムでは、画像をデータとしてプロットし、 次に FFTを通したスペクトルを表示し、さらに、 波数空間でのフィルターを掛けてから逆変換して 画像にし表示する。フィルターのパラメータを変えると 画像がどのように変化するかを調べなさい。
fc.py |
#!/bin/env python import Image import Numeric,NumTut import FFT import Gnuplot L = 128 # 画像のサイズ(L x L) U = 0.25 # フィルターのパラメータ im = Image.open('cl.pgm') # 画像ファイル f = Numeric.array(im.getdata()) f.shape = (L,L) X = range(L) gp = Gnuplot.Gnuplot() gp('set data style lines') d = Gnuplot.GridData(f,X,X,title='Original Data') gp.splot(d) raw_input('Press Return') F = FFT.fft2d(f) Fr = Gnuplot.GridData(F.real,X,X,title='FFT Real part') Fi = Gnuplot.GridData(F.imag,X,X,title='FFT Imaginary part') gp.splot(Fr,Fi) raw_input('Press Return') UL = int(L*U) G = Numeric.array([1.0]*(UL/2)+[0.0]*(L-UL)+[1.0]*(UL/2)) G = Numeric.outerproduct(G,G) F = F * G f = FFT.inverse_fft2d(F) NumTut.view(Numeric.transpose(f.real)) |
参考:
Numerical Python Manual
Gnuplot.py
Python Imaging Library