目次 — 知りたいところから読む
前提と読み方

前提知識 ベクトル・行列とカメラ投影の基礎。

入門 · 原理・構成・判断のための解説です。

観光地で同じ建物を撮った何百枚もの他人の写真をかき集めて、その建物の3次元モデルとすべての撮影位置を復元する——これがStructure from Motion(SfM、運動からの構造復元)である。撮影順序も、カメラ間の位置関係も、どのレンズを使ったかさえ事前には分からない画像の集合から、幾何学的に矛盾のない3次元点群とカメラ姿勢を同時に求める。Visual-SLAMやVO/VIOがロボットやカメラの「今」の位置をリアルタイムに追うのに対し、SfMは多くの場合オフラインで、精度を優先してシーン全体を作り込む。本稿ではこの2つの違いを軸に、SfMの内部構造を土台から解説する。

0. 30秒要約

  • SfMは、多数枚の画像から特徴点マッチングと幾何検証を経て、シーンの疎な3D点群とすべてのカメラの内部・外部パラメータを同時に復元する処理である。
  • 再構成戦略は大きく2つある。1枚ずつカメラを逐次追加していくIncremental SfMと、全ペアの相対姿勢を先に求めてから一括で大域姿勢を解くGlobal SfMである。
  • Incremental SfMは頑健だが、逐次処理ゆえにドリフト(誤差の蓄積)が起きやすい。Global SfMは全体を一度に解くためドリフトに強いが、外れ値の多い相対姿勢に弱い。
  • 三角測量で得た3D点とカメラ姿勢は、そのままでは画像ノイズの影響を受けた粗い推定に過ぎない。バンドル調整による再投影誤差の同時最小化が、SfMの精度を最終的に決める。
  • SfMとVisual-SLAMは同じ幾何学を共有するが、SfMはオフラインバッチ処理で精度・完全性を優先し、SLAMはオンライン・リアルタイムで即時性と継続性を優先するという設計思想の違いがある。

1. SfMは何を入力し、何を出力するか

入力は、撮影順序も相対位置も未知な画像集合 \{I_1,\dots,I_N\} である。各画像は異なるカメラ、異なるレンズ、異なる時刻に撮られていてもよい。出力は次の3つである。

  • 各画像 i のカメラ姿勢 P_i=K_i[R_i\mid\mathbf{t}_i](内部・外部パラメータ)
  • シーン中の3D点集合 \{\mathbf{X}_j\}(多くは特徴点に対応する疎な点群)
  • どの画像がどの3D点を観測したかという対応関係(track)

カメラキャリブレーション入門が単一カメラの内部パラメータを固定の校正パターンから求めるのに対し、SfMは多数の未校正・半校正カメラの内部・外部パラメータとシーン構造を、対応点の幾何拘束だけから同時に求める、より大きな逆問題である。EXIFメタデータに焦点距離があれば初期値として使うが、最終的な精度は画像そのものの幾何拘束に依存する。

図1 · ボタンで表示を切り替え
5枚の登録済み画像と1枚の未登録画像から、推定カメラ姿勢、疎な3D点群、同一点への観測trackを得るSfM結果の模式図
図1 SfMの代表的な出力。3D点群だけでなく、各画像の登録成否、推定カメラ姿勢、どの画像が各3D点を観測したかというtrackも復元結果に含まれる。これは構造を読むための模式図で、実データの精度評価結果ではない。

結果ビューでは、カメラが不自然に一か所へ集まっていないか、点群が二重化・飛散していないか、未登録画像がないかを最初に確認する。見た目が建物らしいだけでは精度の証明にならない。再投影誤差、track長、登録画像数に加え、基準長やGNSSなど外部尺度がある場合はそれとの誤差も併せて評価する。単眼SfMだけでは全体scaleが任意なので、点群viewer上の距離をそのままメートルと解釈してはいけない。

2. 基本パイプライン

図2 · ボタンで表示を切り替え
SfMの基本パイプライン 未整列の画像集合から、特徴抽出とマッチング、幾何検証を経て、Incremental SfMまたはGlobal SfMのいずれかで姿勢と構造を復元し、最後にバンドル調整で精密化する流れを示す図。 画像集合 特徴抽出総当たり/近傍マッチング 幾何検証F/E/H + RANSAC Incremental SfM初期対 → PnPで逐次追加→ 三角測量 Global SfM回転平均化 → 並進平均化→ 全点三角測量 BundleAdjustment

前段の特徴抽出・マッチング・幾何検証は、特徴点抽出入門やエピポーラ幾何入門で扱った要素技術そのものである。SfM固有の設計判断が生きるのは、画像対の関係が求まった後、どうやって全画像・全点を一つの矛盾のない座標系へまとめ上げるかという段階であり、これがIncremental SfMとGlobal SfMという2つの戦略に分かれる。

3. Incremental SfM:逐次的にカメラを追加する

Incremental(逐次)SfMは、視差が十分で対応点が多い初期画像対を選び、エピポーラ幾何からEssential/Fundamental Matrixを推定して最初の2視点復元を作ることから始める。以降は次を繰り返す。

  1. 既に登録済みの3D点と2D対応を持つ新しい画像を選び、PnPでその画像の姿勢を求める。
  2. 新しい画像と既存画像の対応から、まだ3D化されていない点を三角測量する。
  3. 一定枚数ごとに局所または全体のバンドル調整で姿勢と構造を精密化する。
  4. 全画像を処理し終える、または追加できる画像がなくなるまで1に戻る。

この方式はSnavelyらのPhoto Tourism(2006年)を起点に広く使われ、COLMAPの標準パイプラインもIncremental SfMを採用している。逐次的に少数の未知数だけを増やしていくため実装が頑健で、悪い画像対を検出・除外しやすい利点がある。一方、姿勢を1枚ずつ積み上げる性質上、初期の小さな誤差が後続の画像へ伝播し、大きなループ(同じ場所を再び撮影した画像群)を含むデータセットではドリフトが蓄積しやすい。定期的なバンドル調整と、ループ閉合に相当する再訪問検出が、この蓄積誤差を抑える鍵になる。

4. Global SfM:全ペアの関係を一括で解く

Global(大域)SfMは、逐次登録をせず、まず全ての(あるいは選別された)画像ペアについて相対姿勢 (R_{ij},\mathbf{t}_{ij}/\|\mathbf{t}_{ij}\|) を求めておく。その後、次の2段階でグラフ全体を一括推定する。

回転平均化(rotation averaging)は、ペアワイズな相対回転 R_{ij} の集合から、大域的に矛盾の少ないカメラ回転 \{R_i\} を求める。誤差の指標として、リー群 SO(3) 上の対数写像を使った

\min_{\{R_i\}}\sum_{(i,j)\in\mathcal E}\rho\left(\left\|\mathrm{Log}\left(R_{ij}^\mathsf{T}R_i^\mathsf{T}R_j\right)\right\|^2\right)

のような最適化がよく使われる。\rho はロバスト損失で、外れ値となる誤った相対姿勢の影響を抑える。

並進平均化(translation averaging)は、回転が定まった後、相対並進方向 \mathbf{t}_{ij} の集合からカメラ位置 \{\mathbf{t}_i\} を求める。単眼の相対並進は方向しか分からない(エピポーラ幾何入門のスケール不定性を参照)ため、多数のペアの方向拘束から矛盾のない配置を解く必要があり、外れ値除去を含む1DSfMのような手法が提案されている。

Global SfMは全画像の情報を同時に使うため、Incremental SfMのような逐次的なドリフトが原理的に起きにくく、計算も並列化しやすい。ただし、個々の相対姿勢に外れ値が混ざると、平均化の段階でそれを検出・排除できなければ大域解全体が歪む。Moulonらの研究(ICCV 2013)は、頑健な回転平均化と、trifocal tensorを用いた並進方向推定を組み合わせ、Global SfMの実用性を大きく高めた代表例である。

観点 Incremental SfM Global SfM
復元の進め方 初期対から1枚ずつ逐次追加 全ペア関係を先に求め一括最適化
ドリフトへの耐性 逐次伝播しやすく蓄積誤差が出る 全体最適のため蓄積誤差が出にくい
外れ値への耐性 画像追加時に個別検出・除去しやすい 平均化前の外れ値除去が精度を左右する
計算コスト 画像数に対し逐次的、大規模で重くなりやすい 並列化しやすいが平均化の大域最適化が必要
実装の難しさ 実装例が豊富で頑健性のチューニングがしやすい 回転・並進平均化の理論と実装の難度が高い
代表例 Bundler、COLMAP(既定)、VisualSFM openMVG(Global SfMパイプライン)、Theia

実務では、両者を完全な二択にせず、Global SfMで大まかな大域姿勢を作ってからIncremental的に精密化する、あるいは信頼度の高いペアだけをGlobalに使い、残りをIncrementalに追加するハイブリッド構成も研究されている。

5. 三角測量とtrack管理

姿勢が求まった画像の組から、対応点を三角測量して3D点を得る処理そのものは、2視点幾何の基本操作の延長にある。SfM特有の課題は、同じ物理点が3枚以上の画像で観測されたとき、それらの対応を「track」としてどう管理するかである。

  • 特徴マッチングはペアごとに行われるため、画像A–B、B–Cのマッチから、A–Cのマッチも(理想的には)導出できるはずだが、実際の記述子距離ではそうならないことがある。三角関係の整合性チェックでtrackの品質を担保する。
  • 1つのtrackに含まれる観測が多いほど三角測量は安定するが、視差が小さい画像同士だけのtrackは深度が不安定なままである。
  • 誤ったマッチが1本混ざったtrackは、その点の3D位置を歪めるだけでなく、後段のバンドル調整全体の残差にも影響する。track単位でのRANSAC的な検証や、再投影誤差が大きいtrackの棄却が必要になる。

6. Bundle Adjustmentへの橋渡し

線形な三角測量や逐次的なPnPで得られる姿勢・構造は、あくまで初期値である。全画像の再投影誤差を同時に最小化する

\min_{\{K_i,R_i,\mathbf{t}_i,\mathbf{X}_j\}} \sum_{(i,j)\in\mathcal{O}}\rho\left(\left\|\pi\left(K_i(R_i\mathbf{X}_j+\mathbf{t}_i)\right)-\mathbf{u}_{ij}\right\|^2\right)

というバンドル調整(Bundle Adjustment)が、SfMの最終的な精度を決める。この最適化がなぜ疎行列の構造を持つのか、Schur補行列を使ってなぜ大規模でも解けるのかという計算上の核心は、バンドル調整基礎入門で扱う。ここで押さえておきたいのは、Incremental SfMでは画像を数枚追加するごとに局所バンドル調整を挟み、Global SfMでは大域姿勢が出そろった後に全体バンドル調整を一度行う、という使われ方の違いである。

7. Visual-SLAMとの違いと共通点

SfMとVisual-SLAMは、特徴マッチング、エピポーラ幾何、PnP、バンドル調整という同じ数学的道具を共有する。違いは目的と制約にある。

観点 Structure from Motion Visual-SLAM
処理形態 多くはオフラインバッチ処理 オンライン・リアルタイム逐次処理
入力の順序性 未整列でよい(順不同、複数カメラ混在も可) 時系列に連続したフレームを前提
主目的 精度・完全性を優先した高品質な3D復元 現在の自己位置をリアルタイムに維持すること
最適化範囲 全画像に対するグローバルなバンドル調整が可能 キーフレームを絞った局所/大域最適化、計算予算の制約が強い
再訪問の扱い オフラインで全ペアを検証できる ループ閉合をオンラインで検出・修正する必要がある
代表実装 COLMAP、openMVG、Bundler ORB-SLAM系、VINS系

実務上、SfMで作った高精度な3D地図を、SLAMの初期地図やスケール基準として使う、あるいはSLAMのキーフレーム軌跡をオフラインSfMで後処理して精度を上げる、といった組み合わせもよく行われる。両者は競合技術ではなく、オフラインとオンラインという時間軸で補完し合う関係にある。

8. 代表的な実装

  • COLMAP:Incremental SfMを中心に、特徴抽出・マッチング・幾何検証・再構成・バンドル調整・Multi-View Stereoまでを一貫して提供する、現在もっとも広く参照される研究・実務向け実装である。
  • openMVG(open Multiple View Geometry):Incremental・Global両方のSfMパイプラインを実装したライブラリ。密な再構成にはopenMVSと組み合わせて使うことが多い。
  • Bundler:Photo Tourismの成果を公開したIncremental SfMの先駆的実装で、多くの後続研究の比較対象になった。
  • Meshroom(AliceVision):GUIでSfMからMVS、テクスチャリングまでを一気通貫で扱えるオープンソースのフォトグラメトリツール。

ライブラリを選ぶ際は「新しいから精度が良い」ではなく、扱う画像枚数、GPU/CPU資源、EXIF焦点距離の信頼性、マッチング方式(総当たり/シーケンシャル/語彙木)、そして最終的にMVSやテクスチャ生成まで一貫させたいかどうかで判断する。

9. 苦手な条件・失敗しやすいケース

  • テクスチャが乏しい、または反復模様が多いシーン:均一な壁、タイル張り、農地の畝などでは、対応点自体が得られない、または誤対応が多発する。
  • 視差が極端に小さい画像集合:望遠で遠景ばかりを撮った写真群は、三角測量が不安定になり、深度の誤差が大きくなる。
  • 移動物体や照明変化:観光地の写真群には人物・車両・季節・時刻の違いが混ざり、静的シーンの仮定を破る対応が紛れ込む。
  • 孤立した画像クラスタ:撮影が2グループに分かれ、互いに重複する視野がない場合、SfMは1つの一貫した座標系にまとめられず、複数の断片的な再構成に分裂する。
  • 対称性のあるシーン:建物の左右対称なファサードなどでは、幾何学的には整合するが物理的には誤った鏡映解へ収束することがある。

10. 実用上の選び方

  • 撮影が完全に順序立っている(動画やロボットの連続フレーム)なら、Incremental SfMの初期対選択が容易になり、COLMAPの既定パイプラインで十分なことが多い。
  • インターネット上の観光写真のように撮影順序も重複範囲も不明な大規模画像集合では、Global SfMのスケーラビリティが有利になりやすい。
  • リアルタイム性が必要な用途(ロボット、AR、車載)はSfMではなくVisual-SLAMやVIOを検討する。SfMはあくまでオフラインでの高精度復元が主戦場である。
  • 密な3D形状(メッシュやテクスチャ付きモデル)まで必要なら、SfMの疎な点群と姿勢を出発点に、Multi-View Stereoへつなげる。

11. まとめ

Structure from Motionは、順不同の画像集合から特徴マッチングと幾何検証を経て、Incremental SfMまたはGlobal SfMという戦略でカメラ姿勢と3D構造を同時に復元する技術である。Incrementalは頑健だがドリフトしやすく、Globalはドリフトに強いが外れ値に敏感という対称的なトレードオフを持つ。どちらの戦略でも、最終的な精度はバンドル調整が担い、そのままVisual-SLAMという時間軸の異なる兄弟技術、そしてMulti-View Stereoという密な復元技術へとつながっていく。

理解を確かめる
SfMで再構成した長さをそのままメートルと読める?

単眼画像だけの再構成にはスケールの自由度が残る。既知寸法や測位等を使って実寸との対応を決める。

参考資料

現在の項目 · 12 / 19 · コンピュータビジョン入門

次に読む

前提を確認するPnP入門 — 3次元点と画像だけでカメラ姿勢を求めるシリーズの次の内容へ進むバンドル調整基礎入門 — カメラ姿勢と3D点を同時に磨き上げる非線形最小二乗同じ分野を別の観点から読む画像の明るさ・輝度 Lab — 露出、ガンマ、クリッピングを比較