私はこの分野を研究して、リアルタイムでオブジェクト検出を取得します。
ビデオの例:
しかし、どのようにして彼らはシフト キーポイントを抽出し、それらをすばやく一致させることができるのでしょうか?
通常、SIFT 抽出には 1 秒が必要です
私はこの分野を研究して、リアルタイムでオブジェクト検出を取得します。
ビデオの例:
しかし、どのようにして彼らはシフト キーポイントを抽出し、それらをすばやく一致させることができるのでしょうか?
通常、SIFT 抽出には 1 秒が必要です
私は OpenIMAJ 開発者で、最初のビデオの作成を担当しています。
そのビデオでマッチングを高速化するために特別なことはしていません。SIFT の検出と抽出は、すべてのフレーム全体に対して実行されます。実際、このビデオは最適化を行う前に十分に作成されています。そのデモの現在のバージョンは、はるかにスムーズです。すべてのフレームで SIFT を実行する必要がないため、さらに高速に動作するハイブリッド KLT トラッカーを備えたバージョンもあります。
@Mario が示唆するように、画像サイズは抽出速度に大きな影響を与えるため、小さなフレームを処理すると大きな効果が得られます。第 2 に、SIFT 論文で Lowe によって提案されたガウスの関心点の位置特定の違いに関する元の説明では、特徴の数を増やすために入力画像のサイズを最初に 2 倍にすることが提案されました。この 2 倍のサイジングを実行しないことで、対応する機能が少なくなりますが、パフォーマンスが大幅に向上します。
コードはオープン ソース (BSD ライセンス) であり、http://www.openimaj.orgのリンクから入手できます。ビデオの説明で述べたように、画像処理コードは純粋な Java です。唯一のネイティブ コードは、Web カメラへのシン インターフェイスです。現在のチュートリアル PDF ドキュメントのチュートリアル番号 7 では、OpenIMAJ で SIFT を使用するプロセスについて説明しています。ダブルサイジングを無効にするには、次のようにします。
DoGSIFTEngine engine = new DoGSIFTEngine();
engine.getOptions().setDoubleInitialImage(false);
一般的で最初のアイデア: 動画をアップロードしたユーザーに尋ねます。何が行われたか、またはどのように行われたかを推測することができます。これまでに行ったことを知ることも役立つ場合があります (ビデオの解像度、処理能力、画像の準備など)。
私は特に SIFT を使用したことはありませんが、ここ数年の間にかなりのオブジェクト/モーション トラッキングを行ったので、これはより一般的なものです。すでにいくつかのポイントを試したかもしれませんが、わかりません。
SIFT はいくつかの方法で高速化できます。
近似値を計算する余裕がある場合は、SURF と呼ばれるキーポイントをより高速に導出できます (ほとんどのタスクで積分画像を使用します)。
CPU レベル (例: OpenCV は Intel の TBB を使用) または GPU レベル (関連するコードとドキュメントの sift gpu は google) で並列実装を使用できます。
とにかく、これらはいずれも Java では利用できない (AFAIK) ため、Java ラッパーを使用して opencv を実行するか、自分で解決する必要があります。