📐 SfM パイプライン検証

COLMAP を使った Structure from Motion (SfM) パイプラインの技術検証。
複数の写真から自動的に3D点群を再構成するワークフローを検証します。

5
処理ステップ
BSD
ライセンス
GPU
推奨
PLY
出力形式

COLMAP パイプライン

写真群 → 3D点群 の変換ワークフロー(各ステップをクリックで詳細表示)

1

📷 画像入力・プロジェクト設定

対象シーンの複数写真を準備し、プロジェクトを作成

📥 入力

  • 対象シーンの写真群(20〜数百枚)
  • オーバーラップ率 60〜80% 推奨
  • EXIF データ(焦点距離等)が含まれると精度向上

⚙️ 設定

  • カメラモデル: SIMPLE_RADIAL / PINHOLE / OPENCV
  • 画像とデータベースのパスを指定
  • GPU 使用の有無

💻 コマンド例

colmap project_generator \
  --workspace_path /path/to/workspace \
  --image_path /path/to/images
💡 撮影時は対象物を中心にぐるりと周囲をカバー。テクスチャの少ない面(白壁など)は避ける。
2

🔍 特徴点抽出 (Feature Extraction)

各画像から SIFT 特徴点とディスクリプタを検出

📥 入力

  • 画像ファイル群

📤 出力

  • 各画像のキーポイント座標
  • 128次元 SIFT ディスクリプタ
  • SQLite データベースに保存

💻 コマンド例

colmap feature_extractor \
  --database_path /path/to/database.db \
  --image_path /path/to/images \
  --ImageReader.camera_model SIMPLE_RADIAL \
  --SiftExtraction.use_gpu 1
⏱️ GPU 使用時: 数秒〜数分 / CPU のみ: 数分〜数十分(画像枚数による)
3

🔗 特徴点マッチング (Feature Matching)

画像間の対応点を検出し、幾何学的整合性を検証

🎯 マッチング戦略

  • Exhaustive: 全画像ペアを比較(小規模向け)
  • Sequential: 連続撮影画像をマッチング + ループ検出
  • Spatial: GPS情報で近隣画像をマッチング
  • VocabTree: 大規模データセット向け

🔬 幾何学的検証

  • RANSAC によるアウトライア除去
  • エピポーラ幾何の一致検証
  • 基本行列 / ホモグラフィ推定

💻 コマンド例

colmap exhaustive_matcher \
  --database_path /path/to/database.db \
  --SiftMatching.use_gpu 1

# または大規模データセットの場合
colmap vocab_tree_matcher \
  --database_path /path/to/database.db \
  --VocabTreeMatching.vocab_tree_path /path/to/vocab_tree.bin
💡 100枚以下なら exhaustive_matcher が確実。100枚以上は vocab_tree_matcher を推奨。
4

🏗️ スパース再構成 (Sparse Reconstruction)

インクリメンタルSfMで3D点群とカメラ位置を推定

🔄 処理内容

  • 初期画像ペアの選定と初期再構成
  • 新しい画像の逐次的な登録 (PnP)
  • 3D点の三角測量
  • Bundle Adjustment による最適化

📤 出力

  • スパース3D点群
  • カメラの外部パラメータ(位置・姿勢)
  • カメラの内部パラメータ
  • cameras.bin, images.bin, points3D.bin

💻 コマンド例

colmap mapper \
  --database_path /path/to/database.db \
  --image_path /path/to/images \
  --output_path /path/to/sparse
📊 出力のスパース点群は数千〜数万点。密な点群にはステップ5が必要。
5

☁️ 密点群生成 (Dense Reconstruction)

Multi-View Stereo (MVS) で密な3D点群を生成

🔄 処理フロー

  1. 画像のアンディストーション(歪み補正)
  2. ステレオペアから深度マップを計算
  3. 法線マップの推定
  4. 深度マップの融合 (Fusion)
  5. オプション: メッシュ生成 (Poisson)

📤 出力

  • fused.ply — 密な3D点群(カラー付き)
  • meshed-poisson.ply — メッシュモデル(オプション)
  • 数十万〜数百万点の高密度データ

💻 コマンド例

# 1. アンディストーション
colmap image_undistorter \
  --image_path /path/to/images \
  --input_path /path/to/sparse/0 \
  --output_path /path/to/dense

# 2. ステレオ処理
colmap patch_match_stereo \
  --workspace_path /path/to/dense \
  --PatchMatchStereo.geom_consistency true

# 3. 深度マップ融合
colmap stereo_fusion \
  --workspace_path /path/to/dense \
  --output_path /path/to/dense/fused.ply

# 4. メッシュ生成(オプション)
colmap poisson_mesher \
  --input_path /path/to/dense/fused.ply \
  --output_path /path/to/dense/meshed-poisson.ply
🎯 出力の fused.ply はPhase 1 の点群ビューアで直接表示可能。 → 点群ビューアで表示する

ワンコマンド実行

COLMAP 自動再構成モード

🚀

automatic_reconstructor

上記の全ステップを一括実行するワンコマンド。初回の検証や小規模データに最適。

colmap automatic_reconstructor \
  --workspace_path /path/to/workspace \
  --image_path /path/to/images \
  --quality high \
  --use_gpu 1
品質: low / medium / high / extreme GPU推奨: ✅

必要環境

COLMAP の動作要件

💻

ハードウェア

  • GPU: CUDA 対応 NVIDIA GPU(推奨)
  • VRAM: 4GB 以上(密点群: 8GB 以上推奨)
  • RAM: 8GB 以上(大規模: 32GB 推奨)
  • ストレージ: 密点群は数GB になることも
🖥️

ソフトウェア

  • OS: Linux / macOS / Windows
  • COLMAP: 3.8+ (最新推奨)
  • CUDA: 11.0+ (GPU使用時)
  • Qt5: GUI 使用時
📦

インストール

  • Ubuntu: sudo apt install colmap
  • macOS: brew install colmap
  • Docker: colmap/colmap イメージ
  • ソースビルド: CMake + 依存ライブラリ

出力形式と次のステップ

COLMAP の出力を他のフェーズに活用

PLY 点群 → Phase 1 ビューア

fused.ply を Phase 1 の Three.js 点群ビューアにドラッグ&ドロップで直接表示可能。

→ 点群ビューアへ

スパース点群 → Gaussian Splatting

COLMAP のスパース再構成結果は、3D Gaussian Splatting の学習入力として使用可能。

→ Phase 3 Gaussian Splatting

カメラ位置 → VPS (Visual Positioning)

推定されたカメラ位置情報は、将来の VPS(Visual Positioning System)構築の基盤データ。

→ Phase 4-5 統合構想