---------------------------------------------
2次元フーリエ変換プログラム
---------------------------------------------
2次元フーリエ変換プログラムを2点紹介します。
コマンドライン版基本プログラム
これは、入力画像を2次元的にフーリエ変換するプログラムです。 <実行書式> imFFT.exe [Input BMP File] { /e /e1 /e2 /w } /e : 二度目のFFTの結果のみ、log を取った値 /e1 : 一度目のFFTの結果は、log を取った値 その値を二度目のFFTに引き継ぐ /e2 : 一度目を log とり、2度目 log を取った値 /w : 計算経過の出力 一度目のFFTの結果を tmp1.dat 二度目のFFTの結果を tmp2.dat に保存 なお、/e のオプションを付けないと、 値の差が激しすぎてファイルに出力してもよく 分からんようになった。 なお、/e1 や /e2 は演算結果が対称にならないので 正式な計算では /e を使う事 <入力画像フォーマット> 即席版の為、入力画像フォーマットは次の規定を付けています。 画像フォーマットは BMP(Windows Bit Map) 形式 サイズは 128*128 ドット指定 ^^^^^^^ 色は 256色(8ビット) 指定 ^^^^^^^^^^^^^^ ファイルサイズは 17462 バイト(参考まで) ^^^^^ モノクロの場合、パレット0が黒、パレット255が白と なるようにグラディエーションすると、画像と一致します。 ※ファイル形式のチェック類は一切省いているので、 頭(54バイト+256*4バイト)分空白にして、 次に1バイトデータの128*128個の羅列でも 問題無く動作します。 <出力画像フォーマット> ファイル名は tmp.bmp という名前で出力します。 ~~~~~~~ 変更が必要な場合、各自ファイル名を変更して下さい。 入力画像フォーマットと同じです。 <演算内容> 一度目のFFT 1.画像の横方向の階調を1つの1次元データ列として フーリエ変換を行ないます。 2.順次、行毎に1.の処理を行ないます。 FFTの結果 = data[y][x] に保存 二度目のFFT 3.得られた2次元のデータ data[x][y] を 次は縦方向を1次元のデータ列としてフーリエ変換を 行ないます。 4.順次、列毎に3.の処理を行います。 FFTの結果 = data2[y][x] に保存 <FFTの結果> FFTで演算をして得られる結果は、 例えば128点の1次元のデータ列を与えた場合、 戻ってくるのは、この関数では 128点の実数成分 Re 128点の虚数成分 Im である。 ここでは、それぞれを もう一度FFT演算する。 なお、起動オプションで /e /e1 /e2 を付ける事で その結果を log を取る事ができる。(自然対数) 入力画像は「グレースケール」画像にした方が わかりやすい出力結果が得られます。 この、グレースケール画像とは、基本的に256色パレットですが、 0パレット = R:0 G:0 B:0 1パレット = R:1 G:1 B:1 : : 255パレット = R:255 G:255 B:255 の色が設定されているパレットです。処理例
元画像 変換後の画像 変換後の画像
対数をとる. . 変換後の画像
(低周波部分を拡大表示)変換後の画像
対数をとる
(低周波部分を拡大表示)
ダウンロード
グラフィック表示付きプログラム
ダウンロード