3

多くの画像の各行に畳み込みフィルターを適用する必要があります。クラシックは1024x1024ピクセルの360画像です。私の使用例では、720画像560x600ピクセルです。

問題は、私のコードが記事で宣伝されているものよりもはるかに遅いことです。

素朴な畳み込みを実装しましたが、2分30秒かかります。次に、fftwを使用してFFTに切り替えました。複合体2複合体を使用し、各変換で2つの行をフィルタリングしました。今は20代くらいです。

問題は、記事が約10代を宣伝し、古典的な状態ではさらに少ないということです。ですから、畳み込みを計算するより速い方法があるかどうか、ここの専門家に尋ねたいと思います。

数値レシピは、dftで行われるソートを回避し、それに応じて周波数領域フィルター関数を適応させることを提案しています。しかし、これを行う方法のコード例はありません。

たぶん私はデータをコピーするのに時間を失うでしょう。実数2の実数変換を使用すると、データを複合値にコピーする必要はありません。しかし、とにかく0で埋める必要があります。

編集:進捗状況のフィードバックとこの問題の解決に関する詳細については、以下の私自身の回答を参照してください。

質問(正確な再定式化):

離散非周期関数(512から2048の値)に非常に高速な畳み込みを適用するためのアルゴリズムまたはコードを探しています。どうやら、離散時間フーリエ変換が進むべき道です。ただし、データのコピーと複雑な変換は避け、バタフライの並べ替えは避けたいと思います。

4

3 に答える 3

6

FFT は信号の畳み込みで知られている最速の手法であり、FFTW は FFT の計算に利用できる最速の無料ライブラリです。

最大のパフォーマンスを得るための鍵 (ハードウェアの外部... GPU は良い提案です) は、信号を 2 の累乗にパディングすることです。FFTW を使用する場合は、最高のパフォーマンスを得るために計画を作成するときに「患者」設定を使用してください。FFTW が提供するものよりも高速な実装を手動でロールする可能性はほとんどありません (NR は忘れてください)。また、Complex バージョンではなく、Forward 1D FFT の Real バージョンを使用していることを確認してください。可能であれば、単精度 (浮動小数点) のみを使用してください。

FFTW が役に立たない場合は、Intel の (非常に手頃な価格の) IPP ライブラリを検討します。さまざまなビット深度の画像用に最適化された Intel プロセッサ用に手動で調整された FFT があります。

ポール
センタースペースソフトウェア

于 2009-10-27T06:59:38.737 に答える
1

画像処理をタグとして追加したい場合があります。

ただし、この記事は、特に画像がべき乗または 2 であると仮定して、興味深いものになる可能性があります。FFT を最適化する場所も確認できます。あなたが見ている記事は、いくつかの仮定を行い、それらの方程式を最適化していると思います.

http://www.gamasutra.com/view/feature/3993/sponsored_feature_implementation_.php

より高速に処理したい場合は、GPU を使用して実際に作業を行うことができます。

GPU を使用する場合は、この本が役立ちます: http://www.springerlink.com/content/kd6qm361pq8mmlx2/

于 2009-10-11T03:17:39.183 に答える
0

この回答は、この問題に関する進捗レポートのフィードバックを収集することです。

10月11日編集:

私が測定した実行時間は、FFT の有効時間を反映していません。プログラムが終了しても、CPU はシステム時間で 10 秒間最大 42% ビジーであることに気付きました。CPU が 0% に戻るまで待機すると、プログラムを再起動する前に、GPU 処理による 15.35 秒の実行時間が得られます。FFT フィルタリングをコメントアウトすると、同じ時間が得られます。

したがって、実際には FFT は現在 GPU よりも高速であり、競合するシステム タスクによって単純に妨げられていました。このシステム タスクが何であるかはまだわかりません。これは、処理結果をディスクに書き込む前にコピーする巨大なヒープ ブロックの割り当てが原因であると思われます。入力データには、メモリ マップを使用します。

ここで、コードを変更して、FFT 処理時間を正確に測定します。たとえば、処理するデータの転送をパイプライン化するなどして、GPU 処理を最適化する余地があるため、高速化はまだ現実的です。

于 2009-10-11T07:42:35.247 に答える