2016-09-02 9 views
0

私は次の問題があります: 下のスケッチに示すように、私は900x900pxソースイメージとより小さい300x300pxテンプレートイメージを持っています。次に、ソース画像の任意のサブセクションとテンプレート画像の回転画像との間の相関関係を計算する必要があります。回転角(φ)およびサブセクション(x、y)の座標が与えられ、相関を計算すればよい。しかし、x、y、およびphiのさまざまな組み合わせに対して、操作全体を非常に頻繁に繰り返す必要があります。OpenCV C++のテンプレートマッチング/相関

sketch

私は、このタスクのためのOpenCV(バージョン3.1)を使用する予定。 x、y、phiのさまざまな組み合わせに対して操作を繰り返す必要があるので、私は非常に高速な解決策を探しています。 現時点では、warpAffine()を使用して角度を指定してテンプレートを回転し、その後、matchTemplate()関数を使用して相関を計算します。 しかし、matchTemplate()は単純な相関の代わりにより多くの畳み込みを計算するようです。また、matchTemplate()の部分は私のプログラムのボトルネックです。 これをスピードアップする方法はありますか? この場合、グラフィックスアクセラレーションを使用すると便利ですか? または、相関を実行する前に、画像の変換されたバージョンを保存すると便利でしょうか? まったく違うアイデアはありますか?

おかげ

答えて

1

それは時間がかかるのはなぜ?

このタイプの画像スキャンは、可能性の異なるスキャンの数によって時間がかかります(たとえば、テンプレートを2度ずつ回転させてから、画像全体をもう一度スキャンして繰り返します)。ソリューション空間の可能性の拡大)。さらに、スキャニングストライドの選択は、サーチ時間を増加させるのに役立つが、より大きなジャンプ間隔に起因して最適解を見逃す可能性がある。

GPU実装

GPUの実装では、速度を上げることができますが、保証はありません。あなたcv::cuda::TemplateMatching

その他のOpenCVにおけるGPUの実装では、あなたが慎重なSIFTように、スケール不変であるクラフト機能は比較的速く、緻密よりなりうるなど、テンプレートの種類に応じて、すなわち、テクスチャやテクスチャの

に近づきますテンプレートマッチング。画像のサイズが大きいほど、リアルタイムのSIFT検出は難しくなりますが、私は今使用している方法よりも速くなります。

this paperは、画像機能のレビューで確認できます。

関連する問題