0

2DFFTを使用して画像にフィルターを適用しようとしています。フィルター行列(畳み込みカーネルなど)がありますが、fftを使用する場合は、フィルターと画像行列を2乗行列に拡張する必要があります。

最初にゼロで展開し(画像とフィルターの行列は2行列の大きな累乗の左上隅になります)、この結果が得られました

単純なゼロ展開の結果

次に、fftなしで畳み込みを適用するときに、画像マトリックスで行ったことを試しました。各側からフィルター次元が2のパッド付き画像マトリックスであり、単純な拡張フィルター行列を使用したパッド付きマトリックスよりも、fftとiで畳み込む2つのマトリックスの累乗です。これを得ました パッド入りマトリックス付き

これはオリジナルの写真です。

オリジナル

アルゴリズムについて:私は、単純な逆fftを実行した後、展開された行列とドット単位の乗算行列の両方に2dfftを適用しています。また、画像マトリックスは0〜16Mの数値です(最初の8ビットは赤、2番目の8ビットは緑、3番目の8ビットは青です)

問題は、画像とフィルター行列を2行列の2乗に拡張する方法にあると思いますが、よくわかりません。私はfft関数をテストしました(fftと逆fft、同じ画像を取得しました(ドット単位の乗算なし))

また、フィルターは

 0 .2  0
.2 .2 .2
 0 .2  0
4

1 に答える 1

2

画像を一度に変換する必要はありません。サブブロックで FFT を使用します。変換されたサブイメージをカーネル サイズでオーバーラップし、ラップアラウンド トランジェントを破棄するか (overlap-save)、入力オンおよび入力オフ トランジェントを追加します (overlap-add)。

2 次元で行う前に、1 次元で高速畳み込みを理解してください。

于 2013-01-15T05:18:55.383 に答える