2016-04-05 11 views
0

私はopencv C++を使用しています。新しいユーザーです。私はオブジェクト検出の問題に興味があります。これまでのところ私は研究を行い、固定カメラからのビデオに疎光学フロー(Lucas Kanade法)を使用しました.k平均法とバックグラウンド差し引きを試した後、私はより困難な問題に移動することを決めました。 。findHomography usage opencv

私はこれまでにいくつかのドキュメントを調べて、ビデオのフレームシーケンス中にinliersやoutliersを見つけて、返された値からどのような動きが原因で発生したのかを理解するためにcv :: findHomographyを使用できることを発見しましたカメラの動きと物体の動きによるもの。さらに、SURF機能を使用していくつかのオブジェクトを追跡し、どれが良い点であるかを判断することができます。

しかし、私はこの理論をどのように実装できるのだろうかと思っていました。たとえば、最初のフレームをグラウンドトゥルースとして使用し、SURFを使用していくつかのフィーチャを検出し、残りのビデオについては、各フレームのfindHomographyを使用する必要がありますか?どんなアイデアや助けも歓迎です!

答えて

1

移動するカメラから動きのあるオブジェクトを検出することは非常に難しい作業です。複数のビューのジオメトリを理解する必要があります。このトピックに関する情報は少ないです(例:動きからの構造など)。

とにかく、ホモグラフィ行列は、移動するオブジェクトの検出には適していません(ただし、バックグラウンドを十分に正確に表現できることが100%保証されている場合を除きます)。おそらく、基本行列または3点テンソルを使うべきです。

Fundamental matrixは、2つのフレーム間のポイント対応から計算されます。これは、ある画像上の点を他の画像(いわゆるエピポーラ線)上の線と結びつけ、シーン構造から独立している。 RANSACまたはLMEDSのようなロバストな推定方法を使用してF行列を取得した後(RANSACはこの種のタスクに適しているようです)、各点の再投影誤差を計算できます。シーンから独立して移動するオブジェクトは、F行列によって正確に記述されず、より大きな誤差を有することになる。したがって、2つのフレームにわたる画像一致から計算されたF行列の外れ値は、移動するオブジェクトとみなすことができる。しかし、エピローラ線に沿って移動するオブジェクトは、視差が深度レベルで記述されるため、この方法では検出されません。

Trifocal tensorエピポーラ線に沿って移動するオブジェクトでは、奥行き/動きのあいまいさはありませんが、見積もりが難しく、OpenCVには含まれていません。それは3フレームにわたる対応から計算することができ、その使用法は概念的に2ビューからポイントを三角形分割し、次に第3のビューで再投影誤差を計算することとして記述することができる。

マッチングについて - ビデオシーケンスを扱う場合、LK trackingはSURFマッチングより優れていると思われます。その場合、マッチとして非常に遠い点を考慮する必要はなく、通常はトラッキングが速い検出+照合。

+0

非常に分析的な回答ありがとうございました!私はマスター・テーゼを行うためにこのプロジェクトに取り組んでいますので、トラッキングの精度についてあまり気にしません。私はいくつかの方法を試してみたいと思います。 さらに、findHomographyの行列と基本行列の違いについて説明できますか?彼らは同じではありませんか? –

+0

いいえ、それらは同じではありません。ホモグラフィは、ポイント(通常、ラインと平面の対応に使用することはできますが)とポイントを関連付けます。基本的なマトリックスポイントはラインを使用します。ホモグラフィは、任意の剛体に対して、平面、基本行列のために働く。ホモグラフィは8自由度、基本行列 - 7です。私はより多くの違いを見つけることができると思います。 – alexisrozhkov