3

周波数領域の画像をスムージングしたい。グーグルを使って記事を見ると、必要のないいくつかのMatlabコードが表示されました。画像に対してFFTを実行することはできますが、周波数領域で平滑化手法(ILPF、BLPF、IHPF、BHPF)を実装する方法がわかりません。画像処理ライブラリを使用せずに上記の手法のいずれかのコードサンプルを提供できる場合、それは非常に役立ち、C#が推奨されます。

ありがとう、

4

4 に答える 4

2

「周波数ドメインでの平滑化」の意味を定義できますか? FFT を使用してスペクトル画像を生成し、その画像に関数を掛けて特定の周波数を減衰させ、逆 FFT を使用してスペクトルを画像に戻すことができます。ただし、この種のフィルタリング (周波数のスケーリング関数による乗算) の場合、空間領域で二重関数を使用して畳み込むことにより、同じ結果をより迅速に得ることができます。

いずれにせよ、これを自分で実装したい場合は、FFT (高速フーリエ変換) と畳み込みを読んでください。離散フィルタリングの背後にある理論はかなり深いため、興味がある場合は、信号処理の教科書を調べることもできます。アルゴリズムは、その理論がなければあまり意味がありませんが、理解していなくても確実に適用できます。


独自の DSP アルゴリズムを実装したい場合は、この本をオンラインでチェックしてください。特に、Ch 33 では、バターワース フィルター設計の背後にある数学とアルゴリズムについて説明しています。Ch 12 では、FFT の実装方法について説明します。

于 2010-11-03T14:58:59.347 に答える
1

Keshan、それは簡単です。FFT が、低周波数が中央にあり、高周波数が中央から離れている別の 2 つの画像であると想像してください。ピクセルに -w/2 から w/2 および -h/2 から h/2 の番号が付けられている場合、単純に中央からの距離を a(x,y)=sqrt(x^2+y^2) として測定できます。 . 次に、f(x)=1/(1+x) のような任意の単調減少関数を取り、fft の各点に f(a(x,y)) を掛けます。次に、FFT を使用して元に戻します。

f(x) にはさまざまな選択肢があり、見た目が異なります。たとえば、ガウス関数やベッセルなどです。私は学部生のためにこれをやりましたが、とても楽しかったです。あなたが私にメールを送ってくれれば、私のプログラムを送ります:-)。

1 つの注意点は、fft の出力の順序です。それが生成する配列は、奇妙な方法で順序付けできます。「分析的」フーリエ変換で、どの配列インデックスがどの x/y 位置に対応するかを調べることが重要です。

于 2010-11-05T00:54:29.073 に答える
0

すべての画像/信号処理には、OpenCVをお勧めします。

これには、マネージドC#ラッパーEmguがあります。

http://www.emgu.com/wiki/index.php/Main_Page

于 2010-11-03T13:34:29.937 に答える