2D-3D correspondence

既知のマップにある nn 個の3D点 {Xi}\{\mathbf{X}_i\} と、カメラ画像上のそれらの2D投影 {ui}\{\mathbf{u}_i\} が与えられているとき、Perspective-n-Point (PnP) 問題はカメラ姿勢 [Rt][R|\mathbf{t}] を推定する。これは、マップが既に存在する場合にSLAMシステムが新しいフレームごとに自己位置を推定する標準的な方法である。

P3P

Perspective-3-Point問題は、まさに3組の対応点を使う ―― 姿勢の6自由度に対応する最小ケースである(各2D点は2つの制約を与える)。この幾何は古典的な「余弦定理」系に帰着する: 視線方向間の3つの角度は画像から既知であり、3点間の距離はマップから既知であるため、最大4つの実数解を持つ多項式系が得られる。4つ目の対応点によって曖昧性が解消される。必要な点数が非常に少ないため、P3PはRANSAC内部で選ばれる最小解法である ―― 必要な反復回数はサンプルサイズに対して指数的に増加するため、s=3s = 3 はより大きな解法に比べて大きな優位性を持つ。

EPnP

EPnP(Lepetit et al., 2009)は nn 個の3D点を4つの仮想制御点の重み付き和として表現し、PnPを(nnに関わらず)12個の未知数(カメラ座標系における制御点の座標)を推定する問題に帰着させる。その O(n)O(n) の計算量は大きな対応集合に対して効率的であり、多くのパイプラインでデフォルトとなっている(cv::solvePnP は直接サポートしている)。

DLTとSVDの役割

直接線形変換(Direct Linear Transform)は、n6n \geq 6 組の対応から 3×43 \times 4 の射影行列 PP 全体を、同次線形系としてSVDを用いて解く: 解は最小特異値を持つ右特異ベクトルである。姿勢はその後 P=K[Rt]P = \mathbf{K}[R|\mathbf{t}] の分解(内部パラメータも未知の場合はRQ分解)によって抽出される。DLTはEPnPより単純だが精度は劣る。実際には、どちらも再投影誤差を最小化することで洗練される初期化として役立つ。

非線形refinement(motion-only bundle adjustment)

どの解法が初期姿勢を与えたとしても、精度の高い答えはマップ点を固定したまま姿勢のみに関する再投影誤差を最小化することから得られる:

T=argminTSE(3)iρ ⁣(uiπ(TXi)2)T^* = \arg\min_{T \in SE(3)} \sum_{i} \rho\!\left(\big\|\mathbf{u}_i - \pi(T\,\mathbf{X}_i)\big\|^2\right)

ここで π\pi はカメラ投影であり、ρ\rho は残存する外れ値の影響を制限するロバストカーネル(例: Huber)である。これはGauss-NewtonまたはLevenberg-Marquardtによって数回の反復で解かれる ―― これは特徴点ベースSLAMにおいて毎フレームで実行される「motion-only BA」ステップである。

典型的なパイプライン

  1. 現在フレームのキーポイントをマップ点とマッチングする(記述子マッチング、あるいは投影ガイド付き探索)。
  2. P3Pを用いたRANSACで外れ値のマッチを除去し、初期姿勢を得る。
  3. すべての内点に対して非線形最小二乗法で姿勢を洗練する(再投影誤差にロバストカーネルを適用)。

よくある落とし穴

SLAMにおける意義

PnPは特徴点ベースSLAMのトラッキングの中核である: ORB-SLAMはローカルマップ点とのマッチングとPnPの求解によって毎フレームをトラッキングし、トラッキング失敗後の再局在化(relocalization)は場所認識の候補に対するPnPである。これはまた、視覚的自己位置推定サービス(クエリ画像と既存のマップ)がカメラ姿勢を計算する方法でもある。2D-2D(初期化)と3D-3D(点群の位置合わせ)とともに、SLAMエンジニアが知っておくべき対応関係問題の三本柱を完成させる。

ハンズオン

関連ノート