主要内容

结构从运动の概要

结构与运动(SfM)は一連の2次元イメージから3次元シーンの構造を推定するプロセスです。SfMは3次元スキャン,拡張現実,および视觉同步定位和映射(vSLAM)など,多くのアプリケーションで使用されています。

SfMは多くの異なる方法で計算することができます。問題に取り組む方法は,使用するカメラの台数やタイプ,イメージが順序付けられているかどうかなど,さまざまな要素によって異なります。キャリブレションされた単一のカメラでメジが撮影される場合,“スケ,ルを除いた”3次元構造とカメラの動きのみを復元できます。“スケ,ルを除いた”とは,構造とカメラの動きの大きさを再スケーリングしながら,測定値をそのまま維持できることを意味します。たとえば,カメラをオブジェクトの近くに置くと,オブジェクトを拡大してカメラを遠ざけたときと同じイメージを確認できます。構造と動きの実際のスケ,ルをワ,ルド単位で計算するには,以下のような追加情報が必要になります。

  • シンにおけるオブジェクトのサズ

  • 別のセンサ,からの情報(たとえば走行距離計など)

2 .来自运动的结构:のビュ,からの

2つの静止カメラまたは1つの移動カメラからの構造という単純なケースでは,1つのビューがカメラ1,もう一方のビューがカメラ2と見なされます。このシナリオでは,カメラ1が原点にあり,その光学軸はz軸に沿っているとアルゴリズムによって仮定されます。

  1. SfMは,econfメ,econfジ間の点の対応関係を必要とします。2へと,特徴のマッチングまたは点の追跡を行って対応点を見けます。Kanade-Lucas-Tomasi (KLT)アルゴリズムなどの特徴追跡手法は,各カメラの位置が近い場合にうまく機能します。カメラの位置が遠くなるにつれKLTアルゴリズムは機能しなくなり,代わりに特徴のマッチングが使用できるようになります。

    カメラ間の距離(ベスラン) 点の対応関係の判定手法
    遠い matchFeaturesを使用した特徴のマッチ 自動特徴マッチングを使用したメジの回転とスケルの検出
    近い 愿景。PointTrackerを使用した特徴の追跡 KLTアルゴリズムを使用した顔の検出と追跡

  2. カメラ1に対するカメラ2の姿勢を求めるには,基礎行列を計算しなければなりません。前の手順で見けた対応点を使用して計算します。基礎行列は2のカメラのエピポラ幾何を記述します。これにより,一方のカメラでの点がもう一方のカメラのエピポ,ラ線に関連付けられます。関数estimateFundamentalMatrixを使用して基礎行列を推定します。

  3. 基礎行列を関数relativeCameraPoseに入力します。relativeCameraPoseは,カメラ1の座標系におけるカメラ2の向きと位置を返します。スケルを除いた位置のみが計算できるため,2のカメラ間の距離は1に設定されます。まり,カメラ間の距離が1単位になるように定義されます。

  4. 由三角形组成的を使用して,マッチする点の3次元での位置を決定する。姿勢はスケ,ルを除くため,構造を計算すると形状は正しくなりますが,実際のサ,ズは得られません。

    関数由三角形组成的では2のカメラ行列を使用しますが,これはcameraMatrixを使って計算できます。

  5. pcshowまたはpcplayerを使用して,再構成を表示します。plotCameraを使用して,カメラの姿勢を視覚化します。

再構成のスケ,ルを復元するには追加情報が必要です。スケ:。2 .来自运动的结构:のビュ,からのの例では、シ、ンの点群で既知サ、ズの球体を検出してスケ、ルを復元する方法を説明します。

複数のビュ,からの来自运动的结构

ロボット工学や自動運転など,ほとんどのアプリケーションにおいてSfMは3つ以上のビューを使用します。

2 .。SfMで使用する複数のビュ,のセットには,順序を付けることも付けないことも可能です。ここでのアプロ,チでは,ビュ,のシ,ケンスが順序付けられていると仮定します。複数のビュからのSfMでは,“トラック”と呼ばれる,複数の。一般的な手法では,ペアごとの点の対応関係からトラックを計算します。imageviewsetを使用してペアごとの対応関係を管理し,トラックを求めることができます。各トラックは,そのシ,ンにおける3次元点に対応します。トラックから3次元点を計算するにはtriangulateMultiviewを使用します。3次元点は,worldpointsetオブジェクトに保存できます。worldpointsetオブジェクトは,カメラビュー全体の3次元点と2次元イメージ点の間の対応についても保存します。

2つのビューからのSfMにおけるアプローチを使用して,カメラ1に対するカメラ2の相対的な姿勢を求めることができます。このアプローチを複数のビューの場合へと拡張するには,カメラ2に対するカメラ3の相対的な姿勢を求め,他のカメラについても同様にします。相対的な姿勢は,共通の座標系に変換しなければなりません。通常は,すべてのカメラの姿勢をカメラ1に対して計算し,すべての姿勢が同じ座標系のものとなるようにします。imageviewsetを使用してカメラの姿勢を管理できます。imageviewsetオブジェクトは,ビュ,およびビュ,間の接続を格納します。

各カメラの姿勢の推定には,1。その誤差は,イメージ内の点の不正確な位置情報,ノイズを含んだ一致および不正確なキャリブレーションから生じます。これらの誤差はビュの数が増えるにれて累積され,“ドリフト”効果と呼ばれています。ドリフトを減らす1の方法は,カメラの姿勢と3次元点の位置を調整することです。関数bundleAdjustmentによって実装される“バンドル調整”と呼ばれる非線形最適化アルゴリズムを使用して調整することが可能です。bundleAdjustmentMotionを使用して,カメラの姿勢を修正し,3次元点の位置のみを調整できます。また,bundleAdjustmentStructureを使用して,カメラの姿勢を修正し,3次元点の位置のみを調整することもできます。

ドリフトを減らす別の方法は,imageviewsetオブジェクトに対して“姿勢グラフの最適化”を使用することです。ル,プクロ,ジャが検出されたら,imageviewsetオブジェクトに新しい接続を追加し,関数optimizePosesを使用して,相対姿勢によって制約されたカメラの姿勢を調整します。

2 .来自运动的结构:のビュ,からのの例では,2次元ビュのシケンスから3次元のシンを再構成する方法を説明しています。この例ではカメラキャリブレタアプリを使用して,ビュ,を撮影するカメラのキャリブレ,ションを行います。imageviewsetオブジェクトを使用して各ビュ,に関連付けられたデ,タの格納と管理を行います。

単眼の视觉同步定位和映射の例では,単眼カメラのイメージデータを処理して,屋内環境のマップをビルドし,カメラの動きを推定する方法を説明します。

参考

アプリ

関数

オブジェクト

関連するトピック