6.3 2次元DFT (1)2次元DFTとは 画像のような2次元信号をサンプリングしたデータを x(n1 , n2 ) 2次元DFTを X (k1 , k2 ) とすると,以下のように定義される。 N1 1 N 2 1 X [k1 , k2 ] 2n1k1 / N1 2n2 k 2 / N 2 x [ n , n ] e e 1 2 n1 0 n2 0 (k1 0,1,, N1 1, k2 0,1,, N 2 1) (2)方式 定義式は次のように変形できる 2n2 k2 / N 2 2n1k1 / N1 X [k1 , k 2 ] x[n1 , n2 ] e e n2 0 n1 0 N 2 1 N1 1 すなわち, n1 方向により1次元DFTのあと, n2 方向による1次元 DFTを行えばよい。 … … … (3)周波数の並べ方 1次元の場合,直流分を左に配置するが, 2次元の場合,直流分を中央に配置するのが便利 通常のDFTにおける周波数配置 … 0 … N 2 画像の場合,通常 直流分を中央に 配置 … N 1 負の周波数に対応させる ( N 2 1) … 0 N 2 中央にシフトする方法 l N / 2 として, x[n] に exp(2 nl j / N ) を乗ずる。 exp(2 nl j / N ) exp(j n) (1)n したがって,次のような式として処理する。 2n2 k2 / N 2 n1 n2 2n1k1 / N1 X [k1 , k 2 ] x[n1 , n2 ] (1) e e n2 0 n1 0 N 2 1 N1 1 VBAでの記述 準備 Xの値を保存する「X」,「Y」,「Z」シートを用意する。 VBAでの記述 ②データ宣言 Private Private Private Private Private Private Const Max = 100 X(Max, Max) As Complex Y1(Max, Max) As Complex Y2(Max, Max) As Complex Z1(Max, Max) As Complex Z2(Max, Max) As Complex 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 < 0.00001 Then V = 1 Else VV = Sin(R) V = Sin(R) / R End If X(j, k) = SetC(V, 0) Next Next End Sub 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 For k = 0 To Max .Cells(j + 2, k + 2) = X(j, k).実部 Next Next End With 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 For k = 0 To Max .Cells(j + 2, k + 2) = Y2(j, k).実部 Next Next End With 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 For k = 0 To Max .Cells(j + 2, k + 2) = Z2(j, k).実部 Next Next End With End Sub Sub ボタン1_Click() 関数0 DFT IDFT 結果設定 End Sub VBAでの記述 ⑦2次元DFT(1) Private Sub DFT() ' 2次元DFT m = Max: ARG= -6.28318530717959 / 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 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))) Next Next Y1(I, Max) = Y1(I, 0) Next 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 Next Y2(Max, I) = Y2(0, I) Next End Sub VBAでの記述 ⑨2次元IDFT(1) Private Sub IDFT() ' 逆2次元DFT m = Max: ARG = 6.28318530717959 / 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 Next Z2(I, Max) = Z2(I, 0) Next For I = 0 To m For k = 0 To m Z2(I, k) = DivR(Z2(I, k), m) Next Next 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 Next Z1(Max, I) = Z1(0, I) Next For I = 0 To m For k = 0 To m Z1(I, k) = DivR(Z1(I, k), m) Next Next 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 Next End Sub 実行して等高線グラフにすると... FFTの結果を逆FFTすると元に戻っていることが分かる (4)画像データのフーリエ変換 まず,写真データをDFT用のデータに… VB6,VB.Net等を使えば 写真を読み込んで白黒写真にし DFT用のデータにすることができる 以下は,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, If C < 0 Then X = 255 Else C1 = (C \ 256) C2 = (C \ 256) C3 = C Mod 256 X = (C1 + C2 + End If Picture2.Line (J, 画像DT(I, J) = X Next Next End Sub I)-(J + 1, I + 1), C, BF \ 256 Mod 256 C3) / 3 I)-(J + 1, I + 1), RGB(X, X, X), BF 画像のフーリエ変換 画像データのフーリエ変換と逆フーリエ変換結果 色々な2次元フーリエ変換(1) 色々な2次元フーリエ変換(2) 色々な2次元フーリエ変換(3) 色々な2次元フーリエ変換(4) 色々な2次元フーリエ変換(5)
© Copyright 2025 ExpyDoc