3

ここに画像の説明を入力ここに画像の説明を入力ここに画像の説明を入力質問は少し広いです。

これが私がやったことです:

fftを適用する方法があります。正しいか間違っているかはここでは重要ではないため、投稿するつもりはありません。

メソッドを使用して画像を実行し、同じサイズの 2 つの画像 (1 つは実部用、もう 1 つは虚部用) として出力されるものを表示しようとします。

私の方法から得られるグレースケール値が通常255よりもはるかに大きいことを除いて、これはうまくいくようです。したがって、私が何を見ているのかわかりません。

次に、生の結果 (表示するピクセル値が何であれ、0 から 255 の間に収まるように変更されていると想定しているため) を取得し、前と同じ方法で実行しますが、ifft を達成するために符号を変更します。

次に、これも表示しようとします。繰り返しますが、ほとんどの場合、生の値は 255 よりもはるかに大きくなっています。

私の質問は次のとおりです。b.) ifft を実行するとき、このスケーリングを逆にする必要がありますか? c.) ifft を適用する前に、fft で行う必要がある変換はありますか?

パート c は、fft のコーナーを中央に配置することについて話していることをいくつか読んだという事実から生じますが、これが何を意味するのかはよくわかりません。

より少ない質問、パートdは、最初に1d fftをすべての行に適用し、次にすべての列に適用することにより、元の画像に2d fftを適用する場合、同じ順序でifftを適用する必要があるか、または順序を逆にする必要がありますか。

今はそれだけだと思います。私は多くの答えを探してきましたが、多くを見つけることができないようですので、どんな助けも大歓迎です。

編集:いくつかの画像を追加しました。おそらく役立つでしょう。1 つ目は元のイメージ、2 つ目は私の fft メソッド (大きさと虚数成分) の結果、3 つ目は中間イメージの ifft の結果です。

EDIT2:画像を新しい方法のものに更新しました。

4

2 に答える 2

3

通常、実数部と虚数部を別々に表示するのはあまり便利ではありませんが、代わりに大きさと場合によっては位相を表示しますが、通常は大きさだけを表示します。

a) 一般に、表示しているコンポーネントに関係なく、スケーリングを適用する必要があります。画像の総パワーと FFT の間にはスケーリング関係がありますが、個々のコンポーネントには関係ありません。また、データのログを取得したり、ゼロ コンポーネントを無視したりしたいことがよくあるので、自分でスケーリングを行うのが最善です。

b) パートaでは、視覚化のためにスケーリングを行う必要があり、実際の FFT をスケーリングしないでください。元の FFT の IFFT を取得する必要があります。

c) FFT ルーチンによっては、2pi の係数またはサンプル内のポイント数で割る必要がある場合がありますが、これは FFT ルーチンがどのように機能するかによって異なります。ドキュメントはこれを明確にする必要があります。まず、開始と終了の間に 2pi の係数があるかどうかを確認します。

于 2012-12-19T18:14:27.693 に答える
0

4 つの質問に対する回答:

を。FFT の結果を表示するためにスケーリングする必要がありますか? はい。マグニチュードを取得してから、0 から 255 の間の値にスケールダウンする必要があります。

b. IFFT の前にスケーリングを逆にする必要がありますか。A は、FFT の結果を表示する場合のみです。スケーリングされた数値を IFFT することはできません。元の数字を使用してください。

c. FFT と IFFT の間の変換を行いますか? いいえ。

d. FFT 中の行と列の順序は重要ですか? いいえ。FFT の結果は実数と虚数のセットです。これは決定論的な結果です。どちらの順序でも IFFT を実行できます。

問題を抱えている可能性のある重要な側面の 1 つは、数学と視覚化の違いです。IFFT は float または double の実数と虚数で動作します。イメージは 0 から 255 までの整数を想定しています。この変換はコードで処理する必要があります。あなたはそれが「何らかの形で変更された」と思ったことを示しました。この変換を自分で実行する方が安全です。

最後に、tom10の回答についても同様です。IFFT の結果をスケーリングする必要がある場合があります。これは、FFT および IFFT の実装に依存します。

于 2012-12-23T14:48:31.067 に答える