フーリエ変換について頑張って調べてみましたがなかなか思うように行かず
残念ながらその表現では「どこまで頑張ったのか」と「何が思うようにいかないのか」がわかりません。
仮に二次元FFTをどう実装するかで悩んでおられるなら自分で実装する必要はないと思います。numpyあるいはOpenCV(Pythonでのモジュール名はcv2)に二次元DFTの関数がありますのでそれを使うのが早いのではないでしょうか?
「opencv 2次元フーリエ変換」で検索すれば
フーリエ変換 — OpenCV-Python Tutorials
こうしたページが見つかります。このページでは簡単なサンプルコードが載ってます。一番最初に載っているサンプルはnumpyを使った例ですがFFT自体は以下の2行で行えるように見えます。
Python
1f = np.fft.fft2(img) # (A)
2fshift = np.fft.fftshift(f) # (B)
numpyの場合(A)で直流成分が左上端の位置に求まるためこれを画像の中心へずらすのが(B)でやっていることと説明がありますね。提示しておられる論文で想定しているパワースペクトルは(B)の結果の方を使うとよいのではないでしょうか?
Δθの範囲の扇形の領域にあるスペクトルを平均することが「やりたいこと」だと思います。おそらくはそれを求めるためにDFT結果からどうやって扇形の領域内のピクセルを求めるかというところで引っかかっておられのかも知れません。しかしご自分で考えた「方針」あるいはその方針に従って書いてみた「コード」を提示すべきと思います。それがないと「丸投げ質問」になっちまいますよ?
例えばですが、DFTの結果のパワースペクトルの各成分の中心からみた座標をx, yとするとnumpy.arctan2
で方向が求まるわけですから、その値の範囲ごとにピクセル値を集計するという素朴な方法が考えられると思いますが、質問者さんがそうした方法を考えたのか、考えてないのか、そのような素朴な方法では性能的にまずいのか、性能はかまわないけど精度が問題なのか・・・そうしたことがご質問からわからないのです・・・
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/01 07:14
2018/06/01 08:55
2018/06/01 09:00