- ベストアンサー
ImageJを使ったFFTについて
フリーソフトのImageJを使って、画像をFFTします。 このとき、FFTのoptionでパワースペクトルも同時に表示することができるのですが、結果として出てくるFFT後の画像とパワースペクトルの二つの画像の違いは何なのでしょうか? FFT後の画像とパワースペクトルの数値データを見たのですが大きさが違うように見えるだけで、どのような意味があるのかがさっぱり分かりませんでした。 FFTの原理もあまり理解できていないので、ネットで調べてみてもイマイチよく分かりませんでしたので質問させていただきました。 どうかよろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#3です。 FHT(高速ハートレー変換)というのをちょっと調べてみると、フーリエ変換と同じようなことを実数だけでやるというものだそうです。結果をちょっと細工するとフーリエ変換と同じ結果になるので、持っている情報量は同じ。原画が再生される。そして、FHTから求めるパワースペクトルはフーリエ変換から求められるパワースペクトルと同じようです。 先に示したURLによれば、FFTの結果(実はFHT)として見せている画像はパワースペクトルを見せているということなので、「結果として出てくるFFT後の画像とパワースペクトルの二つの画像」は結局のところ同じものではないのでしょうか。 数値以前に、明るい画素は明るい、暗い画素は暗い、と画素毎に確実な対応関係が確認できれば、両者同じもの、見せ方が違うだけ、という結論でよさそうに思われますが。 「結果として出てくるFFT後の画像とパワースペクトルの二つの画像」と数値が対応しないということですが、対応しないのは次のどちらかではないでしょうか。 第一に、FFT結果として、見せている画像とは別に保持しているフーリエ変換結果の数値がある、と先に示したURLでは書かれているはずですが、違いますか?ここ大事。 すると、Text Imageで保存されるのは「見せている画像」と「それとは別に保持しているフーリエ変換結果の数値」と、どっちですか?前者「見せている画像」ではありませんか?それだと比べようもないかもしれませんよね。見せている画像というのは絶対値化とか自乗とかしただけでなく、適当なスケーリングをしているかもしれないし、表示ダイナミックレンジ圧縮のために対数化しているかもしれないのですから。そのような画素値がText Imageで保存されるのではないですか?ご確認ください。 第二に、ext Imageで保存されるのは「別に保持しているフーリエ変換結果の数値」だとしても、それはFFT結果とかいいつつも実はFHTの結果であり、別の値になります。FHTの結果を振幅自乗してもパワーにはなりません。FHT結果からFFT結果に焼き直すには細工が要ります。 結局、FFTといいつつFHTなるものを中で使っているということは、結果として見せるのは同じパワースペクトルであるからこそ、中身の保存値はFFTじゃなくFHT結果で構わない、ということなんではないでしょうか?
その他の回答 (4)
- tatsumi01
- ベストアンサー率30% (976/3185)
No. 3 の方の引用された文を見ますと、imgeJ での FFT は 32bits の FHT (高速ハートレー変換)を計算し、それに 8bits のパワースペクトル画像が付いてくるようです。 FHT は良く知りませんが FFT とは異なり、実数の値が出て来るのかも知れません。画像サイズが判りませんが 2048×2048 なら 10桁の値が出てもおかしくありません。 パワスペクトラム画像は 8bits に正規化してあるそうですから 3桁でおかしくありません。 いずれにせよ、FHT はフーリエ変換のある表現、パワスペクトルは各周波数成分の絶対値の二乗 (前に絶対値と書いたのは誤り) です。フィルタリングなどの処理をするにはフーリエ変換そのものが必要ですが、目で全体を把握するにはパワスペクトルが便利です。しかし、パワスペクトルでは情報が落ちていますから、情報処理するには向きません。
- imoriimori
- ベストアンサー率54% (309/570)
Image Jを使った事はないのですが、 http://rsb.info.nih.gov/ij/docs/menus/process.html を見ると、「Computes the Fourier transform and displays the power spectrum. The frequency domain image is stored as 32-bit float FHT attached to the 8-bit image that displays the power spectrum.」とあります。 FFTは、結果の実際の値は別に保持し(複素数のはず)、見せる画像(フーリエ面での画像ということで画像と言ってもおかしくはないと私は思っています)はパワースペクトルであると読めます。つまりFFTの画像というのはパワースペクトル。ならば正の実数値であるかのように見えることになります。 質問者様はFFT結果の画像とはまた別の手段でパワースペクトルを求めたということなのでしょうか? また、FFT結果の値を見るときに、別に保持している(一般には複素数であるはずの)値を見たということなのでしょうか? もし画像の明るさから判断したということですと、このweb pageの例からするとFFT結果の画像は値を対数変換してグレースケール表示するようですので(そうしないとパワースペクトルはdc部分のみぎらぎら光って他は見えないのが普通だからでしょう)、画像表示の輝度レベルからは判断できないです。
お礼
回答ありがとうございます。 >質問者様はFFT結果の画像とはまた別の手段でパワースペクトルを求めたということなのでしょうか? ImageJに「FFT options」というのがあって「Disply:Raw 32-bit Power Spectrum」にチェックをしてFFTをすると「FFT of ○○」と「PS of ○○」(○○はFFTするファイル名です。)という二つの画像が同時に出てくるのです。 二つの画像をText Imageで保存し、Excelで表示して数字のデータとして読み取りました。 説明不足ですみませんでした。よろしくお願いします。
- tatsumi01
- ベストアンサー率30% (976/3185)
> 得られた画像についてですが、得られたパワースペクトルとFFT後の画像はどちらとも正の実数だったのです。 「FFT後の画像」と書かれていますが、画像をFFTして得られるものは複素スペクトラムであって、「画像」ではないことはお分かりですか。もちろん、2次元データですから(実部だけ、あるいは虚部だけを)画像としてディスプレイに表示できることは事実ですが。 FFTの値が全ての空間周波数で実数であるためには、原画像を f(x, y) として f(-x, y) = f(x, y) f(x, -y) = f(x, y) つまり、原画像が上下にも左右にも対称でないといけません(ここで、座標原点は画像の中心に取っています)。入力画像はそんな性質ですか?また、全ての周波数で正になるというのも考えにくいことです。 「求められたFFT」というのは、実はFFTではなく何か処理した値ではないでしょうか。直感ですが、FFTの値を二乗するとパワースペクトラムになっていませんか。もしそうなっているなら、FFTと称するものはFFTの絶対値です。 なお、「画像の中心(x,y)=(0,0)の信号値が飛び出て高くなる」のは、実画像では普通に成立する性質です。原点の値は原画像の濃淡値を合計したものになります。上に書いたように、FFTの値を二乗して見て下さい。
お礼
>画像をFFTして得られるものは複素スペクトラムであって、「画像」ではないことはお分かりですか。 うーん、難しいですね^^;なんとなくイメージでは分かっているつもりだったんおですが・・・ >原画像が上下にも左右にも対称でないといけません(ここで、座標原点は画像の中心に取っています)。入力画像はそんな性質ですか? 入力画像はMRIの頭部画像なので対称ではありません。 >FFTの値を二乗するとパワースペクトラムになっていませんか。 残念ながらなりませんでした。パワースペクトルの値が10桁くらいあるのに対して、FFTの値は3桁しかありませんので、、
- tatsumi01
- ベストアンサー率30% (976/3185)
FFTで得られる2次元データは複素数です。したがって、これを画像として表示させるには2枚の画像(実部と虚部)が必要で、後述するようにマイナスの値をどう表現するかの問題があります。 パワースペクトルは、各周波数でのフーリエ変換の値の絶対値ですから、2次元データとしては実数(しかも、≧0)です。したがって、画像として表示させると1枚の画像ですみ、≧0ですから普通の濃淡画像になります。 「FFT後の画像」が1枚だとすると、説明書を見てみないと何であるかわかりません。各画素(周波数)の値が複素数である上に正負の値を取りますから、常識的に考えると画像で表現するのはかなり困難です。
お礼
早速の回答ありがとうございます。 得られた画像についてですが、得られたパワースペクトルとFFT後の画像はどちらとも正の実数だったのです。 そしてどちらも画像の中心(x,y)=(0,0)の信号値が飛び出て高くなる(白く映る)画像となり、パワースペクトルの値の方がかなり大きな値となっていました。
お礼
>Text Imageで保存されるのは「見せている画像」と「それとは別に保持しているフーリエ変換結果の数値」と、どっちですか? 「見せている画像」をText Imageに変換しているのかもしれません。もし「保持しているフーリエ変換結果の数値」ならば実数と虚数が出てくるはずですよね?(絶対値として保存したら出ないのかな?) No.4とNo.5でのtatsumi01さんとimoriimoriさんのご回答をまとめると次のような感じでよろしいのでしょうか? ・私がいう「FFT後の画像」は、実は32bits のFHTをした結果の8bits のパワースペクトルを示した物 ・「FFT後の画像」と「パワースペクトル」は内容的には同じ物で、見せ方(スケールとかレンジ)の違いがあるだけ ・Text Imageで保存した数値データが違うのは、何らかの処理を行った後の画素値をそのまま数字として出力しているから