0

私はこの分野を研究して、リアルタイムでオブジェクト検出を取得します。

ビデオの例:

しかし、どのようにして彼らはシフト キーポイントを抽出し、それらをすばやく一致させることができるのでしょうか?
通常、SIFT 抽出には 1 秒が必要です

4

3 に答える 3

4

私は 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);
于 2012-06-25T22:28:26.723 に答える
2

一般的で最初のアイデア: 動画をアップロードしたユーザーに尋ねます。何が行われたか、またはどのように行われたかを推測することができます。これまでに行ったことを知ることも役立つ場合があります (ビデオの解像度、処理能力、画像の準備など)。

私は特に SIFT を使用したことはありませんが、ここ数年の間にかなりのオブジェクト/モーション トラッキングを行ったので、これはより一般的なものです。すでにいくつかのポイントを試したかもしれませんが、わかりません。

  • 画像の解像度を下げる: 640x480 から 320x240 にすると、データが 25% に減少します。160x120 に下げると、アルゴリズムに大きな影響を与えることなく、さらに 25% 削減されます (したがって 6.25% のデータが残ります)。
  • 同様に、画像の色深度を減らすと便利な場合があります (256 グレースケールだけでなく、64 色など)。
  • 他の方法を試して、特徴をより明確にしたり、見つけやすくしたりしてください。たとえば、画像に対してエッジ検出器を実行してみてください。
  • 少なくとも 2 番目のビデオでは追跡システムについて言及されているため、追跡対象のオブジェクトが次のフレームに再表示される領域を推測してみてください (単純な a/b フィルターなどを使用して、座標や回転を使用します)。次に、そのサブで SIFT を使用します。領域のみ (余白を追加)。再び見つからない場合にのみ、画像全体を分析してください。2 番目のビデオの約 40 秒または 50 秒で、彼らはオブジェクトを失い、かなりの時間/再検索を必要とします。
于 2012-06-19T10:42:47.993 に答える
2

SIFT はいくつかの方法で高速化できます。

  • 近似値を計算する余裕がある場合は、SURF と呼ばれるキーポイントをより高速に導出できます (ほとんどのタスクで積分画像を使用します)。

  • CPU レベル (例: OpenCV は Intel の TBB を使用) または GPU レベル (関連するコードとドキュメントの sift gpu は google) で並列実装を使用できます。

とにかく、これらはいずれも Java では利用できない (AFAIK) ため、Java ラッパーを使用して opencv を実行するか、自分で解決する必要があります。

于 2012-06-19T10:42:21.023 に答える