あなたの問題は現場ではかなり標準的です。
まず、
カメラを調整する必要があります。これは、オフライン(作業がはるかに簡単になります)またはセルフキャリブレーションを介してオンラインで実行できます。
オフラインで調整してください。
第二に、
カメラKのキャリブレーション行列を取得したら、連続するシーンでのカメラの投影行列を決定します(他の人が述べているように視差を使用する必要があります)。これは、このOpenCVチュートリアルで詳しく説明されています。
GPS情報を使用して、連続するシーン(ほとんどのGPSユニットに固有のノイズが原因で問題になる可能性があります)のカメラ間の相対的な向きを見つける必要があります。つまり、チュートリアルで説明したRとt、または回転と平行移動です。 2台のカメラの間。
これらすべてを解決すると、2つの投影行列が作成されます---これらの連続するシーンでのカメラの表現。これらのいわゆるカメラマトリックスの1つを使用して、シーン上の3DポイントMを、ピクセル座標m上のカメラの2Dイメージに「投影」できます(チュートリアルのように)。
これを使用して、ビデオで見つかった2Dポイントから実際の3Dポイントを三角測量します。
第三に、
関心点検出器を使用して、関心のあるオブジェクト上にあるビデオ内の同じ点を追跡します。いくつかの検出器が利用可能です。Shi-Tomasiコーナー、Harrisなどの他の検出器もいくつかあるOpenCVがあるので、SURFをお勧めします。
第四に、
シーケンス全体でオブジェクトのポイントを追跡し、対応する2Dピクセル座標を取得したら、投影行列と2Dポイントを指定して、最適な3Dポイントを
三角測量する必要があります。
上の画像は、不確実性と最適な3Dポイントの計算方法をうまく捉えています。もちろん、あなたの場合、カメラはおそらくお互いの前にあります!
ついに、
オブジェクト上の3Dポイントを取得すると、カメラの中心(ほとんどの場合は原点)とポイントの間のユークリッド距離を簡単に計算できます。
ノート
これは明らかに簡単なことではありませんが、それほど難しいことでもありません。HartleyとZissermanの優れた本MultipleViewGeometryをお勧めします。この本では、起動するMATLABコードを使用して上記のすべてを明確に詳細に説明しています。
楽しんで、質問を続けてください!