📐 SfM パイプライン検証
COLMAP を使った Structure from Motion (SfM) パイプラインの技術検証。
複数の写真から自動的に3D点群を再構成するワークフローを検証します。
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点群を生成
▼
🔄 処理フロー
- 画像のアンディストーション(歪み補正)
- ステレオペアから深度マップを計算
- 法線マップの推定
- 深度マップの融合 (Fusion)
- オプション: メッシュ生成 (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
必要環境
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 の出力を他のフェーズに活用
スパース点群 → Gaussian Splatting
COLMAP のスパース再構成結果は、3D Gaussian Splatting の学習入力として使用可能。
→ Phase 3 Gaussian Splattingカメラ位置 → VPS (Visual Positioning)
推定されたカメラ位置情報は、将来の VPS(Visual Positioning System)構築の基盤データ。
→ Phase 4-5 統合構想