1

私は標準的な VO アルゴリズムを実装していますが、いくつかの変更、つまり特徴の抽出、特徴点の一致、必須マトリックスの検索、ポーズを取得するための分解を行っています。ただし、初期化後、後続のフレームに 3D-2D モーション推定 (PNP) を使用する代わりに、同じ 2D-2D モーション推定 (必須行列を使用) を使用しています。2D-2D 推定は 3D-2D よりもはるかに正確であるように思われます。最初のポーズに対する 2 番目のポーズの相対的なスケールを見つけるために、(両方のフレーム ペアで三角測量された) 共通点を見つけることができます。Visual Odometry Tutorial, Scaramuzzaによると、共通点のペア間の相対距離の比率を見つけることで、相対スケールを見つけることができます。

f13Dとが後続のフレーム ペアからの三角形分割された 3D ポイントである場合、f23Dポイント ペアをランダムに選択し、距離を計算します。これは、同じ大まかなコード スニペットです。

indices = np.random.choice(np.arange(0,len(f23D)), size=(5 * len(f23D),2),replace=True)
indices = indices[indices[...,0]!=indices[...,1]]
num = np.linalg.norm(f13D[indices[...,0]] - f13D[indices[...,1]], axis=1).reshape((len(indices),1))
den = np.linalg.norm(f23D[indices[...,0]] - f23D[indices[...,1]], axis=1).reshape((len(indices),1))
return np.median(num/den).

また、最後の行を線形ランサック推定器に置き換えてみました。ただし、スケールの三角形分割は完全ではないため、これらの値は非常にノイズが多く、異なる numpy シードを使用すると、スケールの推定値も大きく異なります。

記事で説明されているように、これは単眼 VO で相対スケールを実装する正しい方法ですか? そうでない場合、それを行う最善の方法は何ですか(回転の精度が低いように見えるため、PNPを使用したくありません)

4

0 に答える 0