FFT を使用してガウスぼかしを実装しようとしていますが、ここで次のレシピを見つけることができます。
これは、画像とフィルターのフーリエ変換を行い、(複雑な) 結果を乗算してから、逆フーリエ変換を行うことができることを意味します。
カーネル K、7x7 マトリックス、およびイメージ I、512x512 マトリックスがあります。
K を I で乗算する方法がわかりません。K を I (512x512) と同じ大きさにすることによってそれを行う唯一の方法はありますか?
FFT を使用してガウスぼかしを実装しようとしていますが、ここで次のレシピを見つけることができます。
これは、画像とフィルターのフーリエ変換を行い、(複雑な) 結果を乗算してから、逆フーリエ変換を行うことができることを意味します。
カーネル K、7x7 マトリックス、およびイメージ I、512x512 マトリックスがあります。
K を I で乗算する方法がわかりません。K を I (512x512) と同じ大きさにすることによってそれを行う唯一の方法はありますか?
はい、ゼロを埋めてKをIと同じ大きさにする必要があります。また、パディング後、カーネルのFFTを取得する前に、カーネルの中心(ガウスのピーク)が(0,0)になるように、ラップアラウンドで変換する必要があります。それ以外の場合は、フィルタリングされた画像が翻訳されます。または、完了したら、結果のフィルタリングされた画像を翻訳することもできます。
もう1つのポイント:FFTを使用しない小さなカーネルの場合、実際には高速になる可能性があります。2Dガウスカーネルは分離可能です。つまり、xとyの2つの1Dカーネルに分離できます。次に、2D畳み込みの代わりに、空間領域でx方向とy方向に2つの1D畳み込みを実行できます。FFTを使用して周波数領域で畳み込みを行うよりも高速になる可能性のある小さなカーネルの場合。
ピクセル シェーダーに慣れていて、FFT がここでの主な目標ではなく、ガウス ブラー カーネル IS を使用した畳み込みである場合は、畳み込みとは何かについてのチュートリアルをお勧めします。
よろしく。