画像データのFFT:境界効果を回避するための「ミラーリング」


8

Matlabに米の画像を読み込んで表示します。

g = imread('rice.png');
imshow(g);

ご飯

この画像のFFTを取り、シフトします。

G = fft2(g);
imshow(log(abs(fftshift(G)) + 1), []);

FFT(米)

画像の中心を介してax軸とy軸を配置すると、画像が対称であることがわかりましたg(-x、-y)= g(x、y)。1D信号の場合、実信号のFFTには対称の実部と非対称の虚部があることがわかります。これが2次元で表示されているものでしょうか。

元の画像は上部より下部の方が暗いため、周期的な境界で強い水平方向の不連続性があり、FFTの垂直線が発生しています。

この境界効果を解消したい。これに対する一般的なアプローチは、ウィンドウ処理のようです。

しかし、私はこの問題を「ミラーリング」と呼ばれる論文で見つけた手法で解決したいと思っています。論文はあまり具体的ではなかったので、このアプローチを理解するには、あなたの助けが必要です:-)。

最初に、元の画像から対称的な「タイル」を作成します。

tile=[flipdim(g,2) g; flipdim(flipdim(g,1),2) flipdim(g,1)];
imshow(tile);

ここに画像の説明を入力してください

次に、この「タイル」のFFTを使用します。

Tile=fft2(tile);
imshow(log(abs(fftshift(Tile)) + 1), []) 

ここに画像の説明を入力してください

縦線は(ほとんど)なくなっているようです。ただし、ミラーリングにより対称性が高まったようです。

正しい結果は何ですか?元の画像のFFTまたは「ミラーリングされた」画像のFFT?

境界効果をなくし、純粋に本物のFFTを取得できるように、「ミラーリング」できる方法はありますか?

どんな答えも事前にありがとう!

回答:


13

元の画像のFFTは正しいです。DFT基底関数は非周期信号を表すことが難しいため、表示されているアーティファクトはDFTの典型的なものです。DFTは有限の長さですが、実際には、負および正の無限大に広がる周期的な信号を表しています。DFTの基底関数はすべてDFTサイズの整数除数である周期をもつ正弦波であるため、すべて同じ値で開始および終了し、このように周期的でない信号を適合させることは困難です。したがって、イメージをタイリングすることを想像してみてください。実際、エッジに突然の不連続があります。エッジがうまく一致していません。これが境界効果の理由です。

FFTが頻繁に使用されるオーディオ信号処理では、非常に一般的なアプローチは、ウィンドウ関数を使用することです。これにより、エッジが0に向かって先細りになり、この影響が減少します。

画像処理では、DFTではなくDCTが通常使用されます。これは、DCTがより良い結果をもたらすさまざまな対称制約を課すためです。つまり、表示されている問題を正確に防止するために使用されます。DFTの基底関数とは対照的に(すべてが同じ値で開始および終了することに注意してください)、DCTの基底関数は整数除数または整数除数の半分であるため、それらの多くは異なる値で開始および終了します。結果として、暗黙の境界条件は異なります。信号は、そのエッジに関して対称であると想定されます。これは、実際に、実験していた「ミラーリング」に多少似ています。これは、DCTに関するもう少し詳しい情報を含む、私による別の投稿です。https//dsp.stackexchange.com/a/362/392

したがって、簡単にまとめると、FFTの使用に完全に慣れている場合は、ウィンドウ処理を試してみることをお勧めします。ただし、最良の選択はおそらくDCTを使用することです。これは、「ミラーリング」のアイデアと同様の境界条件を意味し、その結果、画像をより適切に処理します。


私が理解できたことから、DFTは定期的な拡張を意味しますが、DCTは拡張を意味します。画像圧縮を行う場合、画像の小さなブロックに取り組んでいます。DFTによって暗示される周期的な拡張は境界でジャンプを引き起こすため、収束率が低下します。画像圧縮にはDCTを使用することをお勧めします(より高速な収束->同じ量の可視情報を持つ小さなファイル)。ただし、DCTは主にこのコンテキストで言及されているようです。私が取り組んでいるコンテキストは、ガボールフィルターで画像をフィルター処理することです。これはDCTを使用して実行できますか?
Andy

ガボールフィルターで画像をフィルター処理する場合は、FFTを使用するだけです。境界条件は問題になりません。ガボールフィルターでフィルタリングするために、境界条件や純粋な実数スペクトルが心配なのはなぜですか?
schnarf 2012年

純粋に実数のスペクトルを持つこと:私は支配的な周波数を推定する必要があります:fu = Sum(u * G)/ Sum(G)とfv、ここでG(u、v)は私の画像g(x、y)のFFTです。Gが複雑な場合、これがどのように機能するのかわかりません。私は複雑なfuを取得しますか?
Andy

複雑な値を考慮するのではなく、それらの大きさを考慮する必要があります。つまり、各複素周波数ビンz = a + biの場合、その大きさはsqrt(a ^ 2 + b ^ 2)です。
schnarf 2012年

もう1つ考えること:実際のデータを取得して複雑なスペクトルを取得していると混乱するかもしれません。複素スペクトルは、各正弦波に特定の位相を与えるための単なる方法です。
schnarf 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.