アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在、C言語で画像に2次元離散フーリエ変換を施し、高速フーリエ変換と比較しろという課題に取り組んでいます。

以下の様なプロセスで2次元フーリエ離散変換を施し、結果を表示しようと思っています。

・画像を読み込み、float型配列に入れる。
(画像は一番左上が原点とします。256×256のサイズです)
・上記のfloat型配列の、第1象限と第3象限、第2象限と第4象限を各々入れ替える。

・各行ごと、つまり、f[0][0]~f[0][255]、f[1][0]~f[1][255]、と順々)に1次元離散フーリエ変換を施す。

・上記のフーリエ変換の結果を各列ごと、つまり、f[0][0]~f[255][0],f[1][1]~f[255][1]という風に1次元離散フーリエ変換を施す。

・フーリエ変換の結果の、第1象限と第3象限、第2象限と第4象限を各々入れ替える。

・f[][]のパワースペクトル(実部の2乗+虚部の2乗の、自然対数をとったもの)を計算する。

・そのパワースペクトルとをfloat型なので、char型に置き換えて画像として出力する。

正規化等の少し細かいところは省略しました。

結果として、参考書等で見かけるもの(真ん中が直流成分で、含まれる周波数を濃淡で表したもの)になればいいのですが、上記のプロセスで大丈夫ですか?

パワースペクトルを計算した後に、何らかの移動の処理(つまり、画像の真ん中が直流成分となるような処理)を施す必要がなく、
フーリエ変換の計算の前と後に象限の入れ替えを施すだけで、直流成分が出力画像の真ん中に来るということですか?

フーリエ変換の前と後で、象限を入れ替えるだけで周波数空間では原点が真ん中になることが納得できないです。

ややこしい質問ですが、「プロセスのここが間違ってるよ」等を教えていただけると助かります。特にパワースペクトルの部分等。

よろしくお願いします。

A 回答 (4件)

??


なんで象限の入れ替えが2回入ってるんだ?
2次元FFTの前か後どちらかで1回すればいいと思うけど。

> フーリエ変換の前と後で、象限を入れ替えるだけで周波数空間では原点が真ん中になることが納得できないです。

FFTの後で入れ替えたらDCが真ん中になるのは納得できますよね。
そのままですから・・・。

FFT前で入れ替えても同じことができます。
DFTは無限に続くデータに対して変換します。
例えば□という画像があったとして、これにフーリエ変換をかけようとするとき、変換している範囲は、□という画像の見えている範囲だけと考えるのは間違っています。
・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・
・・・・・・□□□・・・・・・
・・・・・・□□□・・・・・・
・・・・・・□□□・・・・・・
・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・無限に続く

というように□が縦横に無限に連なった画像を解析すると考えたほうがわかりやすいです。
もし□の象限が入れ替わってもx,yにオフセットするだけで同じ画像ですよね。
    • good
    • 0
この回答へのお礼

丁寧な解答、ありがとうございました。
http://www.ne.jp/asahi/ma-ku/104216/Excel1-2.htmlhttp://www.metro-hs.ac.jp/rs/sinohara/dft_210/mr …というページに2回入れ替える、と書かれていましてそれを鵜呑みにして混乱してました…。

試しにエクセルで4×4行列で、

・FFTの前、後で入れ替える。
・FFTの後だけで入れ替える。

ということをしてみました。

結果は正負が所々違いましたが、値は同じでした。(実部、虚部の2乗の和は等しくなりました。)


FFT後だけ入れ替えた方が処理速度が速いですし、納得できますので、
FFT後だけ入れ替えてみます。

お礼日時:2010/01/23 13:11

#2です。



ありゃ・・・(^^;そうですね。 >#3

フーリエ変換の前に入れ替えた場合、位相が回るだけでした。
DCを真ん中に持っていくにはフーリエ変換後ですね。
    • good
    • 0
この回答へのお礼

Tacosanさん、ICE_FALCONさん、ありがとうございました。

エクセルで試してみたところ、FFT前だけの入れ替えではダメでした。
これを機にフーリエ変換について理解を深めたいと思います

お礼日時:2010/01/23 13:16

あれ? フーリエ変換の前に入れ替えてもしょうがないような気がするんですけど>#2.


「フーリエ変換して得られたスペクトルを平行移動しても同じ画像を復元できる」はずですよね.
    • good
    • 0

元画像で入れ替える必要があるかどうかはわかりませんが, 「得られたフーリエ変換で入れ替えると直流成分が出力画像の真ん中に来る」とい

うのは簡単です. フーリエ変換は周期的ですから, 「象限の入れ替え」と「画像の真ん中が直流成分となるような移動」は同じです.
    • good
    • 0
この回答へのお礼

解答ありがとうございました。
自分でもエクセルで試してみましたし、フーリエ変換後だけ入れかえるというのはしっくり来ますので、フーリエ変換後だけ入れ替えるようにしてみます。

お礼日時:2010/01/23 13:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!