ビデオでオプティカルフロー(lk)を実行した後、このデータに基づいてオブジェクトを見つけて追跡するための最良の方法は何ですか?
これはおそらく非常にわかりにくいように聞こえますが、オブジェクトの周囲に明確な輪郭を定義できるようにしたいので、奇妙な形のボトルやエッジを検出できるものであれば。
ビデオでオプティカルフロー(lk)を実行した後、このデータに基づいてオブジェクトを見つけて追跡するための最良の方法は何ですか?
これはおそらく非常にわかりにくいように聞こえますが、オブジェクトの周囲に明確な輪郭を定義できるようにしたいので、奇妙な形のボトルやエッジを検出できるものであれば。
LK が最適なアルゴリズムであるかどうかはわかりません。LK はコーナーのようなポイントのまばらなセットの動きを計算し、トラッキングは通常、高密度のオプティカル フローの結果 (Farneback や Horn Schunck など) からより適切に動作するためです。フローを計算した後、最初のステップとして、(可動部分を保持するために) そのノルムに対していくつかのしきい値処理を行い、この結果から接続された領域の抽出を試みることができます。ただし、追跡したいオブジェクトのモデルがなければ、タスクは簡単ではないことに注意してください。
一方、主にトラッキングに関心があり、多少の対話性が許容される場合は、camshift サンプル コードを見て、外観に基づいて画像領域を選択および追跡する方法を確認できます。
- - 編集 - -
カメラが静止している場合は、代わりにバックグラウンド減算を使用してください。OpenCV 2.4 ベータ版を使用するには、ビデオ モジュールのドキュメントでクラス BackgroundSubtractor とそのサブクラスを探す必要があります。
また、オプティカル フローは、適切なパラメーターの選択と GPU の実装により、リアルタイム (またはそれほど遠くない) になる可能性があることにも注意してください。Windows では、 TU Graz/Gpu4Vision グループのflowlib を使用できます。OpenCV には、クラス gpu::BroxOpticalFlow などの GPU 高密度オプティカル フローもあります。
--- 編集 2 ---
単一ピクセル検出を結合して大きなオブジェクトにすることは、連結成分ラベリングと呼ばれるタスクです。そのための高速なアルゴリズムがあり、OpenCV で実装されています。したがって、これにより次のパイプラインが得られます。
しかし、すぐに最初の質問の範囲をはるかに超えてしまうので、ここでやめなければなりません ;-)