0

私は小さなテンプレート(T)と画像(imin)を持っているプロジェクトをやっています。目的は、fftに沿った畳み込みを使用して、iminで最も類似したパターンの場所を見つけることです。この目的のために、C++でFFTWコードを使用したいと思います。しかし、私はC ++の初心者であり、この目的のためにこのツールボックスをどのように使用すべきかわかりません。


ポールに感謝します。実際、大きな3Dマトリックスがあり、小さな3Dマトリックスと一致させたい3Dの場合にFFTを使用したいと思います。そのため、FFTを使用したいと思います。私はすぐにそれを行う必要があるので、この目的のためのC ++コードを知っていますか?2Dおよび3D(FFTによる)。

4

2 に答える 2

0

FFTW を使用するのではなく、OpenCVの使用を検討することをお勧めします。これは、コンピューター ビジョンおよび画像処理全般の高レベル API であり、FFT などの低レベルのビルディング ブロックから独自のルーチンを構築するよりもはるかに簡単に使用できます。OpenCV には、たとえばテンプレート マッチング関数cvMatchTemplateが既にあり、必要に応じて「内部」で効率的な FFT 実装を使用できるため、パフォーマンスが問題になることはありません。

本当に FFTW を使用する必要がある場合は、ドキュメントを広範囲に読んで、最初は急な学習曲線になることを覚悟してください。相互相関の手順 (テンプレート マッチングに使用する必要があると想定しています) は、通常、次のとおりです。

  • より大きな画像サイズのフォワード/リバース FFT プランを作成する
  • フォワード FFT プランを使用してターゲット イメージの FFT を実行します
  • テンプレート画像をゼロでターゲット画像のサイズにパディングします
  • フォワード FFT プランを使用して、パディングされたテンプレート イメージの FFT を実行します。
  • パディングされた画像テンプレートの FFT 出力の複素共役を取る
  • パディングされた画像テンプレートの複素共役でターゲット画像のFFT出力を乗算しますFFT出力
  • 逆FFT計画を使用して製品のIFFTを取る

次に、ターゲット画像内のテンプレート画像の位置に対応する 1 つ以上のピーク値の結果を調べることができます。

より良い結果を得るには、正規化された相互相関を使用することを検討する必要がありますが、これを周波数領域で実装するにはかなり複雑になることに注意してください。

于 2012-07-27T08:06:45.217 に答える