Presentation is loading. Please wait.

Presentation is loading. Please wait.

6.3 2次元DFT (1)2次元DFTとは 画像のような2次元信号をサンプリングしたデータを 2次元DFTを

Similar presentations


Presentation on theme: "6.3 2次元DFT (1)2次元DFTとは 画像のような2次元信号をサンプリングしたデータを 2次元DFTを"— Presentation transcript:

1 6.3 2次元DFT (1)2次元DFTとは 画像のような2次元信号をサンプリングしたデータを 2次元DFTを
6.3 2次元DFT (1)2次元DFTとは 画像のような2次元信号をサンプリングしたデータを 2次元DFTを とすると,以下のように定義される。

2 (2)方式 定義式は次のように変形できる すなわち, 方向により1次元DFTのあと, 方向による1次元 DFTを行えばよい。

3 (3)周波数の並べ方 1次元の場合,直流分を左に配置するが, 2次元の場合,直流分を中央に配置するのが便利 … … … … 画像の場合,通常
通常のDFTにおける周波数配置 負の周波数に対応させる

4 中央にシフトする方法 として, を乗ずる。 したがって,次のような式として処理する。

5 VBAでの記述 準備 Xの値を保存する「X」,「Y」,「Z」シートを用意する。

6 VBAでの記述 ②データ宣言 Private Const Max = 100 Private X(Max, Max) As Complex
Private Y1(Max, Max) As Complex Private Y2(Max, Max) As Complex Private Z1(Max, Max) As Complex Private Z2(Max, Max) As Complex

7 VBAでの記述 ③データの設定 (色々な関数を設定して確かめてみよう)
Private Sub 関数0() DX = 0.3 For j = 0 To Max XX = (j - Max / 2) * DX For k = 0 To Max YY = (k - Max / 2) * DX R = Sqr(XX * XX + YY * YY) If R < Then V = 1 Else VV = Sin(R) V = Sin(R) / R End If X(j, k) = SetC(V, 0) Next End Sub

8 VBAでの記述 ④結果設定(1) Sub 結果設定() With Worksheets("X") For k = 0 To Max
.Cells(1, k + 2) = k Next For j = 0 To Max .Cells(j + 2, 1) = j .Cells(j + 2, k + 2) = X(j, k).実部 End With

9 VBAでの記述 ⑤結果設定(2) With Worksheets("Y") For k = 0 To Max
.Cells(1, k + 2) = k Next For j = 0 To Max .Cells(j + 2, 1) = j .Cells(j + 2, k + 2) = Y2(j, k).実部 End With

10 VBAでの記述 ⑥結果設定(3)とClickイベントハンドラ
With Worksheets("Z") For k = 0 To Max .Cells(1, k + 2) = k Next For j = 0 To Max .Cells(j + 2, 1) = j .Cells(j + 2, k + 2) = Z2(j, k).実部 End With End Sub Sub ボタン1_Click() 関数0 DFT IDFT 結果設定

11 VBAでの記述 ⑦2次元DFT(1) Private Sub DFT() ' 2次元DFT
m = Max: ARG= / m For k = 0 To m For N = 0 To m DD = (-1) ^ (k + N) Y2(k, N).実部 = X(k, N).実部 * DD Y2(k, N).虚部 = X(k, N).虚部 * DD Next For I = 0 To m - 1 For k = 0 To m - 1 Y1(I, k) = SetC(0, 0) For N = 0 To m - 1 Y1(I, k) = AddC(Y1(I, k), MultC(Y2(I, N), ExpJ(ARG * N * k))) Y1(I, Max) = Y1(I, 0)

12 VBAでの記述 ⑧2次元DFT(2) For I = 0 To m - 1 For k = 0 To m - 1
Y2(k, I) = SetC(0, 0) For N = 0 To m - 1 Y2(k, I) = AddC(Y2(k, I), MultC(Y1(N, I), ExpJ(ARG * N * k))) Next Y2(Max, I) = Y2(0, I) End Sub

13 VBAでの記述 ⑨2次元IDFT(1) Private Sub IDFT() ' 逆2次元DFT
m = Max: ARG = / m For I = 0 To m - 1 For k = 0 To m - 1 Z2(I, k) = SetC(0, 0) For N = 0 To m - 1 Z2(I, k) = AddC(Z2(I, k), MultC(Y2(I, N), ExpJ(ARG * N * k ))) Next Z2(I, Max) = Z2(I, 0) For I = 0 To m For k = 0 To m Z2(I, k) = DivR(Z2(I, k), m)

14 VBAでの記述 ⑩2次元IDFT(2) For I = 0 To m - 1 For k = 0 To m - 1
Z1(k, I) = SetC(0, 0) For N = 0 To m - 1 Z1(k, I) = AddC(Z1(k, I), MultC(Z2(N, I), ExpJ(ARG * N * k))) Next Z1(Max, I) = Z1(0, I) For I = 0 To m For k = 0 To m Z1(I, k) = DivR(Z1(I, k), m)

15 VBAでの記述 ⑪2次元IDFT(3) For k = 0 To m For N = 0 To m DD = (-1) ^ (k + N)
Z2(k, N).実部 = Z1(k, N).実部 * DD Z2(k, N).虚部 = Z1(k, N).虚部 * DD Next End Sub

16 実行して等高線グラフにすると... FFTの結果を逆FFTすると元に戻っていることが分かる

17 (4)画像データのフーリエ変換 まず,写真データをDFT用のデータに…
VB6,VB.Net等を使えば 写真を読み込んで白黒写真にし DFT用のデータにすることができる

18 以下は,VB6でピクチャボックスに読み込まれた画像を 白黒写真に変換し,DFT用のデータに変換するプログラムである。
Public 画像DT(100, 100) As Double Public Sub window(P As PictureBox, X1, Y1, X2, Y2) With P .ScaleLeft = X1 .ScaleTop = Y1 .ScaleWidth = X2 - X1 .ScaleHeight = Y2 - Y1 End With End Sub Private Sub 白黒変換() Dim X1 As Double Dim C As Double Dim C1 As Double Dim C2 As Double Dim C3 As Double window Picture2, 0, 0, 100, 100 W = Picture1.ScaleWidth H = Picture1.ScaleHeight  DW = W / 100: DH = H / 100 For I = 0 To 100 For J = 0 To 100 X = DW * J: Y = DH * I C = Picture1.Point(X, Y)   Picture2.Line (J, I)-(J + 1, I + 1), C, BF   If C < 0 Then   X = 255   Else C1 = (C \ 256) \ 256 C2 = (C \ 256) Mod 256 C3 = C Mod 256 X = (C1 + C2 + C3) / 3 End If Picture2.Line (J, I)-(J + 1, I + 1), RGB(X, X, X), BF 画像DT(I, J) = X Next End Sub

19 画像のフーリエ変換 画像データのフーリエ変換と逆フーリエ変換結果

20 色々な2次元フーリエ変換(1)

21 色々な2次元フーリエ変換(2)

22 色々な2次元フーリエ変換(3)

23 色々な2次元フーリエ変換(4)

24 色々な2次元フーリエ変換(5)


Download ppt "6.3 2次元DFT (1)2次元DFTとは 画像のような2次元信号をサンプリングしたデータを 2次元DFTを"

Similar presentations


Ads by Google