私は3台のカメラすべてが以下に示すように同一線上に配置されているパラレルな三眼眼科のセットアップをしています。3眼ステレオのマージン深度マップ
左カメラ------------センターカメラ---------------------------- -----右カメラ
左カメラと中央カメラ間のベースライン(カメラ間距離)が最も短く、左右カメラ間のベースラインが最も長くなります。
理論的には、異なるカメラの組み合わせ(L-R、L-C、C-R)を使って3セットの視差画像を得ることができます。私は3つの深さマップを持っています。
LCコンビネーションは、近くにあるオブジェクト(ベースラインが短いため)の精度が高い(測定距離がより正確です)一方、 は、LRコンビネーションが遠いオブジェクト(ベースラインが長いため)。同様に、C-Rの組み合わせは、中距離の物体に対して正確である。
ステレオ設定では、通常、左(RGB)画像を基準画像として定義します。私のプロジェクトでは、深さの値を閾値化することによって、参照画像にROIを取得します。たとえば、10〜20mの間の奥行き値を持つすべてのピクセルを見つけ、それぞれのピクセル位置を見つけます。この場合、3D点と対応するピクセル位置との間に関係があります。
通常のステレオ設定では、ベースライン(近、遠)に応じて2つの領域のうちの1つに対してのみ深度の精度を高めることができるため、3台のカメラを使用する予定です。これは、3つの領域(近、中、遠)の3D点をより正確に生成するのに役立ちます。
ここで、3つの深度マップをマージしてグローバルマップを取得します。私の問題は以下の通りです。
- どのように3つの深さマップをマージしますか?
- マージ後、どの深度の値が参照(左RGB)イメージのどのピクセル位置に対応するのかをどのように知ることができますか?
あなたの助けに感謝します:)
ありがとう@marcoresk。 3Dポイントクラウドをマージするためには、最も近いネイバーまたは何らかの距離測定を使用することができます。 しかし、私のカメラは静的ではない、私は固有の行列Kを持っていますが、どのようにRとTを見つけるのですか?私はあらかじめ定義されたワールド座標系を持っていません。もし私が素朴に聞こえたら、私はまだ学習中です –
@Beginner_In_Image_あなたは歓迎しています、私はあまりにも学習の過程にあります。私は文章「3つのカメラすべてが「3つのカメラの逆の位置/向きは、左側のカメラに関して固定されている」を意味する平行三つ眼のセットアップを有する」と仮定した。私は、視差のセットが時間的に「凍った」単一のフレームである「静的」オブジェクトであるとも仮定しました。したがって、[this](https://github.com/opencv/opencv/blob/master/samples/cpp/stereo_calib.cpp)のようなステレオキャリブレーションのいくつかの手順を実行することで、Rとteを取得できます。あなたのワールド座標系は左カム – marcoresk
@Beginner_In_Image_Processingで起点として設定されています。あなたが(前のコメントでは剛性と仮定された)三眼系を動かしたときに、別の瞬間に得られたポイントをマージする必要がある場合、次回は、あなたのカメラが動いているかどうかを指定してください。私の答えを感謝したなら、それを受け入れることを検討してください。 – marcoresk