現在、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型に置き換えて画像として出力する。
正規化等の少し細かいところは省略しました。
結果として、参考書等で見かけるもの(真ん中が直流成分で、含まれる周波数を濃淡で表したもの)になればいいのですが、上記のプロセスで大丈夫ですか?
パワースペクトルを計算した後に、何らかの移動の処理(つまり、画像の真ん中が直流成分となるような処理)を施す必要がなく、
フーリエ変換の計算の前と後に象限の入れ替えを施すだけで、直流成分が出力画像の真ん中に来るということですか?
フーリエ変換の前と後で、象限を入れ替えるだけで周波数空間では原点が真ん中になることが納得できないです。
ややこしい質問ですが、「プロセスのここが間違ってるよ」等を教えていただけると助かります。特にパワースペクトルの部分等。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
??
なんで象限の入れ替えが2回入ってるんだ?
2次元FFTの前か後どちらかで1回すればいいと思うけど。
> フーリエ変換の前と後で、象限を入れ替えるだけで周波数空間では原点が真ん中になることが納得できないです。
FFTの後で入れ替えたらDCが真ん中になるのは納得できますよね。
そのままですから・・・。
FFT前で入れ替えても同じことができます。
DFTは無限に続くデータに対して変換します。
例えば□という画像があったとして、これにフーリエ変換をかけようとするとき、変換している範囲は、□という画像の見えている範囲だけと考えるのは間違っています。
・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・
・・・・・・□□□・・・・・・
・・・・・・□□□・・・・・・
・・・・・・□□□・・・・・・
・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・無限に続く
というように□が縦横に無限に連なった画像を解析すると考えたほうがわかりやすいです。
もし□の象限が入れ替わってもx,yにオフセットするだけで同じ画像ですよね。
丁寧な解答、ありがとうございました。
http://www.ne.jp/asahi/ma-ku/104216/Excel1-2.htmlやhttp://www.metro-hs.ac.jp/rs/sinohara/dft_210/mr …というページに2回入れ替える、と書かれていましてそれを鵜呑みにして混乱してました…。
試しにエクセルで4×4行列で、
・FFTの前、後で入れ替える。
・FFTの後だけで入れ替える。
ということをしてみました。
結果は正負が所々違いましたが、値は同じでした。(実部、虚部の2乗の和は等しくなりました。)
FFT後だけ入れ替えた方が処理速度が速いですし、納得できますので、
FFT後だけ入れ替えてみます。
No.4
- 回答日時:
#2です。
ありゃ・・・(^^;そうですね。 >#3
フーリエ変換の前に入れ替えた場合、位相が回るだけでした。
DCを真ん中に持っていくにはフーリエ変換後ですね。
Tacosanさん、ICE_FALCONさん、ありがとうございました。
エクセルで試してみたところ、FFT前だけの入れ替えではダメでした。
これを機にフーリエ変換について理解を深めたいと思います
No.3
- 回答日時:
あれ? フーリエ変換の前に入れ替えてもしょうがないような気がするんですけど>#2.
「フーリエ変換して得られたスペクトルを平行移動しても同じ画像を復元できる」はずですよね.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【WPF】画像の切り替え
-
gif 画像上の ボタンに リン...
-
vb.net 画像の透過について
-
画像処理したBitmapをピクチャ...
-
画像のビット数を変更する方法
-
UWCSでのランダムクリック入力...
-
同じ画像を複数回表示させる
-
uwcs のマクロで画像認識をして...
-
UWSCを使って画像リンクをクリ...
-
uwscについての質問です。 現在...
-
簡単法知ってる人教えてください。
-
日本の白地図の画像に、都道府...
-
【PowerPoint】VBAで画像サイズ...
-
スライドショーの表示秒数につ...
-
uwsc画像認識のあいまい判定に...
-
VBA シート毎に画像挿入
-
VBAのユーザーフォームのイメー...
-
プログラムをやっているのです...
-
UWSC「画像が無い場合」
-
EXCEL VBA 複数のImageコントロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
背景画像の繰り返しについて
-
Excel ユーザーフォームで表示...
-
EXCEL VBA 複数のImageコントロ...
-
uwcs のマクロで画像認識をして...
-
VBAのユーザーフォームのイメー...
-
UWSC 画像判定と条件分岐について
-
【WPF】画像の切り替え
-
「using Windows」でエラーが出る
-
gif 画像上の ボタンに リン...
-
jqueryスライダーを2段でスライ...
-
UWSC「画像が無い場合」
-
同じ画像を複数回表示させる
-
UWSCでループ処理がうまくいき...
-
UWSCの色判定
-
【EXCEL VBA】ダブルクリックで...
-
画像のビット数を変更する方法
-
VBA シート毎に画像挿入
-
vb.net 画像の透過について
-
uwscの画像認識に失敗します。
-
C#で画像を他の画像に貼り付け...
おすすめ情報