私は画像からノイズを除去するプログラムを行っています。その中で、点ごとの乗算の合計をたくさん計算する必要があります。今、私は直接的なアプローチでそれを行い、莫大な計算コストがかかります:
int ret=0, arr1[n][n].arr2[n][n];
for (int i=0;i<n;i++) for (int j=0;j<n;j++) ret+=arr1[i][j]*arr2[i][j];
2つの配列間のこの畳み込みを計算するには、これを行う必要があると言われました( 詳細はこちら):
- 配列 1 の DFT を計算します (FFT 経由)。
- 配列 2 の DFT を計算します (FFT 経由)。
- 2 つの DFT を要素ごとに乗算します。それは複雑な乗算でなければなりません。
- 乗算された DFT の逆 DFT (FFT 経由) を計算します。それが畳み込みの結果になります。
アルゴリズムの部分は多かれ少なかれ明確なようですが、私は新しい問題に遭遇しました:
このタスクにfftwを選択しましたが、ドキュメントを読んで長い時間を費やした後、2D配列ではなく、2D配列全体ではなく、直接アプローチに似た単一の値を返す2D逆fftの関数が表示されません、何が欠けていますか?