人に聞けない痔の悩み、これでスッキリ >>

FFT結果は実部と虚部に分かれています。
ってよくあるのですが、2次元FFTの結果も実部と虚部に分かれているのですか?
でも、調べてみると2次元FFTの結果は、実部だけとあります。
FFTは、実部と虚部の絶対の2乗、2次元FFTは、実部だけ?矛盾しているような?
もし、2次元FFTの結果が実部だけでしたら、虚部はどのようにすればいいのですか?
実部と虚部とは、なんですか?正弦波をFFTすると実部と虚部をどのように分かれるのですか?
ご指導の方、よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

フーリエ変換で連続関数と複素数展開するものと2つの定義式があるのですが、


2つの違いは何ですか?:

質問の意味がわかりません

(1)フーリエ変換において連続時間信号と離散時間信号について2つの式があるのですが・・・

なのか

(2)連続時間信号のフーリエ変換において複素数値関数になるものと実数値関数になるものがあるのですが・・・

なのか

(1)
フーリエ変換の定義式は係数の違いを除いて1つです
x(t)のフーリエ変換をX(f)とすると
X(f)=∫(-∞<t<∞)dt・x(t)・exp(-j・2・π・f・t)
です
x(t)をサンプリングされた周期関数とするとDFTがδ関数の係数として出てきます
ただしx(t)をサンプリングした関数はδ関数によって表現します

(2)
x(t)が実数のときx(-t)=x(t)であれば
X(f)
=∫(-∞<t<∞)dt・x(t)・exp(-j・2・π・f・t)
=2・∫(0<t<∞)dt・x(t)・cos(2・π・f・t)
であるからX(f)は実数値関数になります
ただし簡単のためにδ(t)の項が存在しないとした

jは工学の慣習に従って虚数単位です
    • good
    • 0

複素数で波を表すと、いま簡単に一つの各周波数ωの波として、



f(t) = A * exp[i*ω*t]

と表されます(iは虚数)。これは、

f(t) = A * [ cos(ωt) + i * sin(ωt) ]

と同じことです。
これの絶対値をとると振幅が求まります。

|f(t)| = sqrt[ f(t) * f'(t) ]
ここで、f'(t) はf(t)の複素共役とします。
= sqrt [ |A|^2 * exp{iωt} * exp{-iωt} ]
= sqrt [ |A|^2 * 1 ]
= |A|

さて、上記の式f(t)には「位相」の項({ωt + φ} のφのようなもの)がありませんね?
では位相はどうなっているのかというと、複素数Aの中に入っています。
簡単に、t = 0 で 1となる波であれば、
f(t) = exp[iωt]
です。(A=1とした)
Re[ f(t) ] ととると cos(ωt) ですから解りますね。

ここで、t=0で0となる波であればどうでしょうか。(大きさは1とします)
f(t) = -i exp[iωt]
とすると(A= -i)、
Re[ f(t) ] = sin(ωt)
でsinになりますね。つまり先ほどと比べると位相が90度異なった波を表しています。
途中の位相も複素振幅Aで表すことが出来ます。

このように複素振幅Aを求めると、その波の位相がわかるのです。
フーリエ変換とは、各ωについての複素振幅A(ω)を求める作業です。

では。
    • good
    • 0

FFTは単にDFTを高速に計算する技術なので質問はFFT→DFTと書くべきです


係数を別にすればDFTの定義は

1次元:
X[n]=
Σ(0≦k<N)・x[k]・exp(-j・2・π・k・n/N)
(n=0,1,2,3,・・・,N)

2次元:
X[m,n]=
Σ(0≦k,l<N)・x[k,l]・exp(-j・2・π・(k・m+l・n)/N)
(m,n=0,1,2,3,・・・,N)

となりDFTは一般には複素数になります
1次元においてx[N-n]=x[n]であればX[m,n]は実数になり
2次元においてx[N-m,N-n]=N[m,n]であればX[m,n]は実数になります

簡単ですから補足で証明してください
時間があればもっとゆるい条件を示してください

この回答への補足

すいません。考えたんですけど、よくわかりませんでした。
勉強不足です。。。。。
式は覚えているのですが、使い方がいまいちよくわかっていません。

ヒントのほうよろしくお願いします。

お聞きしたことがあるのですが、
フーリエ変換で連続関数と複素数展開するものと2つの定義式があるのですが、
2つの違いは何ですか?

ご指導の程、よろしくお願いします。

補足日時:2003/01/22 06:28
    • good
    • 0

一次元FFTでも二次元FFTでもはたまた多次元FFTでも、複素フーリエ変換もあれば、実数フーリエ変換もあります。


実数フーリエ変換は工夫すると大幅に複素FFTよりも演算量を減らせるので二次元では必要なければ実数FFTにしますが、複素FFTがないという訳ではありません。

使用するのが実数だけである場合は、実数FFTが高速なのでそれを使います。

複素FFTでは、複素数の絶対値が強度を表します。(厳密な定義はここでは省略します。)
複素数の位相(実部と虚部の複素平面上の位相)は、その信号の位相遅れを意味します。
それが物理的にどんな意味があるのかというのは、適用する分野によって異なります。
(フーリエ変換は純粋に数学的な議論であるため)

この回答への補足

ご返信ありがとうございました。

>複素数の位相(実部と虚部の複素平面上の位相)は、その信号の位相遅れを意味します。

とあるのですが、よくわかりません。sin波を、cos波を位相遅れを考慮して考えると実部を取り出したりできるってことでしょうか?
cos波、sin波が実部、虚部になるとありますが、もうひとつ実部と虚部の考え方がわかりません。
ご指導の程、よろしくお願い致します。

補足日時:2003/01/20 07:25
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q画像を二次元フーリエ変換

c言語で画像を入力して2次元フーリエ変換を行い,逆変換をしたいのですが全然うまくいきません.

どなたか教えていただけませんか?

いろいろ調べたのですが,プログラム初心者なのでどう書いていけばいいのかわからず辛いです...

サンプルのコードも教えていただけると助かります.

画像サイズは256×256画素程度です.

Aベストアンサー

検索すればソースコードは見つかると思います。
例えば
http://hooktail.org/computer/index.php?2%BC%A1%B8%B5%A5%D5%A1%BC%A5%EA%A5%A8%CA%D1%B4%B9
とか

プログラムを作るのが目的ではなく、計算するだけならImageJで画像処理ができます。
http://rsbweb.nih.gov/ij/
メニューにFFTがありますのでそれを使ってみてください。数値での入出力もできます。
フーリエ変換の結果は普通は複素数になるのですが、このソフトは絶対値をとっているはずで、普通はこれで十分ななずです。

複素数の結果が欲しいのなら
http://www.r-project.org/
https://www.scilab.org/
http://www.gnu.org/software/octave/
などで計算できます。

画像から数値データへの変換は上記のImageJで可能です。

Q高速フーリエ変換でデータ数が2のべき乗でない時

こんにちは。現在、フーリエ変換について勉強しているのですが、ちょっとわからないことがあったので質問させていただきました。

質問内容は高速フーリエ変換についてで、cooley&tukeyのアルゴリズムを利用すると、データが2の冪乗個のときは計算量をО(NlogN)に減らせる事ができるというものでした。

しかしデータが2の冪乗個でないとき。例えばN=5000くらいのときはデータを切り取って無理やりN=4096(=2^12)みたいな感じにすれば良いんですよね?
やっぱりその時って、N=5000で通常の離散フーリエ変換したときと周波数値に誤差が出ると思うのですが、それはどうやったら計算できるのでしょうか。。。

どなたかご教授していただければ幸いです。

Aベストアンサー

離散フーリエ変換は、信号が周期的であることを前提としています。
離散フーリエ変換でのデータ数Nは、離散時間信号の周期に当たります。変換の結果は線スペクトルとなります。
N=5000がその信号の1周期なのでしょうか。
もしそうならば、4096にすれば、誤差が大きくなるでしょう。
N=5000で変換すべきです。この場合にも高速アルゴリズムが
存在します。#1の方のとおりです。
FORTRANの時代には、パッケージがありました。
NはN=2^m*3^n*5^k*7^Lだったと思います。

もうひとつの考え方は、有限持続時間信号のフーリエ変換としての
適用です。これは、連続スペクトルとなります。データ数Nは
スペクトルの分解能に関係します。サンプリング周波数をNで割った
ものが周波数分解能となります。
実際のデータよりも2倍程度のNを使うことが多いと思います。
データ数が5000ならば、Nは8192とし足りないデータには、
0を詰めます。これならば、2のべき乗のNを選べます。
この場合、逆変換は周期的な拡張が行われることに注意が必要です。

離散フーリエ変換は、信号が周期的であることを前提としています。
離散フーリエ変換でのデータ数Nは、離散時間信号の周期に当たります。変換の結果は線スペクトルとなります。
N=5000がその信号の1周期なのでしょうか。
もしそうならば、4096にすれば、誤差が大きくなるでしょう。
N=5000で変換すべきです。この場合にも高速アルゴリズムが
存在します。#1の方のとおりです。
FORTRANの時代には、パッケージがありました。
NはN=2^m*3^n*5^k*7^Lだったと思...続きを読む

Qフーリエ変換・逆変換の虚数成分って?

フーリエ変換を用いた論文を読んでいるときに、ある3次元関数f(x,y,z)に対してフーリエ変換・逆変換を行ったとき、逆変換で求められる値は実数成分と虚数成分があり、虚数成分を無視できるという記述を見つけました。
これは対象の関数が実数成分しかもともと持ち合わせていなかったで逆変換しても虚数はゼロである、という解釈でいいのでしょうか?

正直、フーリエ変換・逆変換に関してはほとんど初心者なのですが、気になってしまっています。誰かこの疑問に答えていただけないでしょうか?

Aベストアンサー

1次元と3次元の本質的な違いは無いので1次元で考えればよい。
以下jは電気工学の記法を採用し虚数単位とする。
sin(2πξt)≡(exp(j2πξt)-exp(-j2πξt))/2/j
をフーリエ変換すると
(δ(f-ξ)-δ(f+ξ))/(2j)
となる。
これは実部0で虚部が(δ(f-ξ)-δ(f+ξ))/2であるから
虚部を0とすると逆変換も0となり大変なことになる。
つまりその論文で説明をしている著者は
フーリエ変換について不勉強ということである。
その論文は捨ててまともな論文を勉強するべきということになる。

Q画像を空間領域から空間周波数領域にフーリエ変換したとき位置から時間に置き換わりますが「画像における時間」ってなんですか?

画像を空間領域から空間周波数領域にフーリエ変換したとき位置から時間(周波数)に置き換わりますが「画像における時間」ってなんですか?何を意味していますか。詳しくお願いします

空間領域から空間周波数領域にフーリエ変換したとき位置から時間(周波数)に置き換わりますが「画像における時間」っていったいなんですか?何を意味していますか。詳しくお願いします。
 また、原画像を2次元フーリエ変換すると中心の光から十字の線が広がっている画像(周りは灰色)になりますがあれはいったいどういう意味なのでしょう?どの原画像もあんな感じになりますがいったい何を表しているのでしょうか?原画像によって変換後の十字画像は若干異なるように見えますがそれが何の違いを表しているのかがわかりません。

Aベストアンサー

空間周波数とは言ってもいわゆる単位Hzの周波数ではありません。
電気や機械の世界で言う周波数に似ているから周波数と言われている
だけあって、単位は○○本/mm などというディメンションです。

フーリエ変換はほとんどの用途で時間領域を周波数領域に変換するので
時間に関わる処理であると思われがちですが、本来は複雑な形を多数の
周期パターンに分解するだけのことです。

2次元フーリエ画像が十字パターンになること自体はよく知りませんが
特定の繰り返しパターンがある画像でそうなるのではないでしょうか。
グレーのベタのような原画だとフーリエ画像はフラットではないかと
想像します。

Qフーリエ変換のデータの補間について

Excelでフーリエ変換をする際、データ数は2のべき乗でなければならないと学校で習いました。
データ数が2のべき乗でない場合は2のべき乗になるようにデータを増やす、または減らす必要があるらしいのですが、どうやったらデータ数を増やす、または減らせるのでしょうか??

例えば、255×255のデータを256×256にするにはどうやったらいいのでしょうか。(MRI画像などは256×256だそうです)
教えてください。

Aベストアンサー

> MRI画像再構成についての課題です。

 なるほど、それなら話は通じます。実務じゃないんですね。

 周波数空間(いわゆるK空間)の中に、直流成分(空間周波数(0,0))を中心として、等間隔の格子点(n,m) (-N<n<N, -N<m<N)における複素数のサンプル値s(m,n) = p(m,n)+iq(m,n)が与えられている(p,qは実数)。これを複素逆フーリエ変換して画像を作るためにFFTを使う。

> コンピュータのサンプリングは奇数個でなければならない

 これはおかしい。奇数個でなければならないなんてことはないし、N-1まででやめる理由もない。例えば(-N≦n<N, -N≦m<N)の範囲を測ったって良いのですから。しかし、文句を言っても始まらない。ま、この課題に限っては、話の前提条件が(-N<n<N, -N<m<N)ということなんだな、と考えるしかありません。

> FFTをする場合は2のべき乗個なければならない。

 既に何度も出ている通り、これは数学的には誤りですが、工学的には「さもありなん」というところです。

 ご参考までに、フーリエ変換の定義を少し調べれば分かる、重要な性質を幾つか挙げておきます。

● FFTと逆FFT(IFFT)は、定数倍の違いを無視すれば全く同じ計算。(FFTを2回繰り返すとどうなるか、式を調べてみると面白いでしょう。)

● 2次元FFTは、格子点のそれぞれの行について1次元FFTして、その結果を今度はそれぞれの列について1次元FFTすれば良い。

● 複素IFFTをやるから、結果も複素画像になります。その実部をf(x,y)、虚部をg(x,y)と書くことにすると、
f(x,y) = (1/2)IFFT[(p[m,n]+p[-m,-n])+ i(q[m,n]-q[-m,-n])]
g(x,y) = (1/2)IFFT[(p[m,n]-p[-m,-n])+ i(q[m,n]+q[-m,-n])]
という関係が成り立つ。(従って、g=0となることが分かっている撮影シーケンスの場合(大抵そうです)には、0≦mの部分だけしか測定しないことによって撮影時間を半減することも可能。)

● 1次元IFFT(周期M)に喰わせる複素データの列をa[0], a[1], ..., a[M-1]とすると、a[0]は直流成分、a[1]とa[M-1]が周期Mのsin波形、a[2]とa[M-2]が周期M/2のsin波形…の振幅と位相を決める係数です。周期の区切りが0~M-1になってる訳です。
 一方、K空間の方は区切りが-N~Nになっている。FFT(IFFT)はデータが周期Mを持つことを前提にしていますから、
s(m,n)=s(m+jM,n+kM) (j,kは任意の整数)
が成り立つものと考えます。従って、
s(M-m,M-n)= s(-m,-n)
s(M-m,n)= s(-m,n)
s(m,M-n)= s(m,-n)
です。言い換えると、添え字はmodulo Mで0~M-1に書き換えてやる、ということです。

 じゃ本題。N=127、M=256の場合を考えると、s(128,n)(n=-N+1~N-1)やs(m,128)(m=-N+1~N-1)のデータが存在しないからナントカする必要がある。さて、これらは一体何かというと、最も高い周波数の空間周波数成分、つまり画像上で言えば周期2のsin波形(いろんな方向の波がありますが)の振幅と位相を表している。でもその成分については(そして、それより高い空間周波数の成分についても)測定しなかった。
 
 ならば、そんな成分は画像にも存在すべきでないだろう、というわけで、ここんとこには0を詰める。と考えるのが普通でしょう。
 ところがですね、被写体がシャープでコントラストの大きい輪郭を持っていたりすると、s(127,n)やs(m,127)やs(129,n)やs(m,129)の絶対値が無視できない大きさになる[ANo.4の「両端点」の話です]。すると、0を詰めたことでK空間のs(128,n)やs(m,128)の箇所に鋭い段差が生じます。このような段差は画像上では周期2のsin波形のさざ波(ringing)として現れる。特に、被写体の輪郭に沿って波紋のようなartifactが生じます。
 いや、実は話は逆で、そういう被写体を撮影する以上、正確な画像を作りたかったらもっと高い周波数までMRIで測定すべきなのに、測ってない訳です。

 で、そのringing現象をどう考るか。
「高い空間周波数成分を持つ被写体を撮影したのに、高い周波数については測ってないんだからringingはしょうがない。単に0を詰めとけ。」という「正論」の他に、
「いや、被写体に実在していないringingが出るのはまずい。元来、高い空間周波数成分を持つ被写体を撮影したのに、高い周波数については測ってないんだから、ぼけた画像しか得られないのが当然だ。だからs(127,n)がほぼ0になるようにK空間のサンプルに平滑化フィルタ(|n|と|m|が小さいときはほぼ1で、|n|や|m|がNに近い時には0になるような滑らかな実数値関数h(m,n))をかけ算しろ。」も実に尤もな話だし、
「確かにringingは困るが、せっかく127の所まで測ったんだからぼかさないでなんとか活かそうよ。少々嘘をつくことになるが、たとえばs(128,n)の値はs(127,n)とs(129,n)の平均値で代用すれば段差は生じない。」という考え方もある。
 ここんとこの判断は、「何を撮影して、結果の画像をどう使うつもりなのか」にも依るでしょう。そういうことまで考えて、いろんな処方について利害得失を検討するのが、ですから、この課題の真髄かと思います。

> MRI画像再構成についての課題です。

 なるほど、それなら話は通じます。実務じゃないんですね。

 周波数空間(いわゆるK空間)の中に、直流成分(空間周波数(0,0))を中心として、等間隔の格子点(n,m) (-N<n<N, -N<m<N)における複素数のサンプル値s(m,n) = p(m,n)+iq(m,n)が与えられている(p,qは実数)。これを複素逆フーリエ変換して画像を作るためにFFTを使う。

> コンピュータのサンプリングは奇数個でなければならない

 これはおかしい。奇数個でなければならないなんてことはないし、N-1まで...続きを読む

QFFTとパワースペクトルの違いについて教えてください。

FFTとパワースペクトルの違いについて教えてください。
勉強不足で申し訳ありません。よろしくお願いします。

Aベストアンサー

信号をFFTで出したスペクトルというのは、
単にある信号をフーリエ展開した係数をプロットしたものに過ぎません。
ですので、位相によっては値がプラスにもマイナスにもなることがあります。

これに対してパワースペクトルというのは、信ある信号について
ある周波数における信号強度そのものをプロットしたものです。
ですので、位相にかかわらずかならず値がプラスになります。

確かFFTスペクトルを2乗したものがパワースペクトルになったと思います。
間違ってるかもしれないので、一応教科書も調べてみてください。

QImageJを使ったFFTについて

フリーソフトのImageJを使って、画像をFFTします。
このとき、FFTのoptionでパワースペクトルも同時に表示することができるのですが、結果として出てくるFFT後の画像とパワースペクトルの二つの画像の違いは何なのでしょうか?

FFT後の画像とパワースペクトルの数値データを見たのですが大きさが違うように見えるだけで、どのような意味があるのかがさっぱり分かりませんでした。

FFTの原理もあまり理解できていないので、ネットで調べてみてもイマイチよく分かりませんでしたので質問させていただきました。

どうかよろしくお願いします。

Aベストアンサー

#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結果で構わない、ということなんではないでしょうか?

#3です。
FHT(高速ハートレー変換)というのをちょっと調べてみると、フーリエ変換と同じようなことを実数だけでやるというものだそうです。結果をちょっと細工するとフーリエ変換と同じ結果になるので、持っている情報量は同じ。原画が再生される。そして、FHTから求めるパワースペクトルはフーリエ変換から求められるパワースペクトルと同じようです。

先に示したURLによれば、FFTの結果(実はFHT)として見せている画像はパワースペクトルを見せているということなので、「結果として出...続きを読む

Qフーリエ変換など。スペクトルの図を見て何がわかるのか?

理系の大学生です。院試のためフーリエ変換などを復習しています。
そして恥ずかしながらスペクトルの図の表すものが何なのかよくわかりません。

スペクトルの図を書く方法はわかるのです。
フーリエ変換の計算方法もわかります。フーリエ級数展開もできます。
ただ、スペクトルの図をみて何がわかるのかがよくわかりません。

例えば、ある関数を微分して導関数の図を描くとするじゃないですか。
すると導関数の値が正になってれば元の関数は傾きが正とか、
つまり導関数の図を見て読み取れることがありますよね。
同様にスペクトルの図を描けば、描いた以上元の信号について読み取れることがあるはずですよね。
それが何なのかよくわかりません。
イメージとしては↓のURLをご参照ください。
http://laputa.cs.shinshu-u.ac.jp/~yizawa/InfSys1/basic/chap2/index.htm

よろしくお願いいたします。

Aベストアンサー

>フーリエ変換の計算方法もわかります。フーリエ級数展開もできます。
>ただ、スペクトルの図をみて何がわかるのかがよくわかりません。

フリーエの原理そのものだよ。「任意の周期関数は、正弦波の和で表される」ということ。時間軸の波形を周波数軸のスペクトラムにフーリエ変換すると、時間軸上の波形に、周波数ωの正弦波がA1の振幅で、周波数2ωの正弦波がA2の振幅で、...、周波数nωの正弦波がAnの振幅で含まれていることがわかる。

http://cp.literature.agilent.com/litweb/pdf/5988-6765JA.pdf
の6ページを参照。

数学のみではなく、実際のアプリケーションにも目を向けると世界が広がるよ。

Qフーリエ変換について教えてください

フーリエ変換をすると横軸が時間から周波数になるのはわかったのですが、縦軸が何になるのかわかりません。

一般的に縦軸はなにになるのでしょうか?

また横軸が時間で、縦軸が距離をフーリエ変換したら縦軸は何になるのでしょうか?

よろしくお願いします。

Aベストアンサー

時間関数をフーリエ変換すると結果は、その時間関数の周波数成分が
得られます。スペクトルとも言います。従って、縦軸は、周波数成分です。一般に複素数です。
大きさと偏角による表現もできます。
大きさの方は振幅特性、位相角の方は位相特性と呼ばれます。
画像のように空間座標の上の関数の場合には、フーリエ変換すると
空間周波数成分が得られます。横軸は、空間周波数(2次元)となります。
対象とする関数により結果はそれぞれ意味が異なります。
「一般に何になる」とは言えません。

>横軸が時間で縦軸が距離の場合・・・
フーリエ変換の結果は、距離を表す時間関数の周波数成分です。

フーリエ変換の対象の関数は別に時間関数でなければならないということは
ありません。従って、フーリエ変換の結果は適用する人が解釈(定義)すれば
よいと思います。
たとえば、
時間関数をフーリエ変換し、その結果の絶対値の対数のフーリエ変換を
することもあります。これの結果には、発明者らがケプストラムという名前
をつけています。Cepstrum は Spectrum から作った造語です。

時間関数をフーリエ変換すると結果は、その時間関数の周波数成分が
得られます。スペクトルとも言います。従って、縦軸は、周波数成分です。一般に複素数です。
大きさと偏角による表現もできます。
大きさの方は振幅特性、位相角の方は位相特性と呼ばれます。
画像のように空間座標の上の関数の場合には、フーリエ変換すると
空間周波数成分が得られます。横軸は、空間周波数(2次元)となります。
対象とする関数により結果はそれぞれ意味が異なります。
「一般に何になる」とは言えません。

>横軸が...続きを読む

Q画像の2次元フーリエ変換の結果の表示の仕方について

現在、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型に置き換えて画像として出力する。

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

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

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

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

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

よろしくお願いします。

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

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

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

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

・...続きを読む

Aベストアンサー

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

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

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

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

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

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

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

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

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


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング