三維重建(一):colmap安裝與使用


Image-based 3D Reconstruction from Scratch (using COLMAP)

本文將介紹COLMAP的安裝與使用,重點介紹3D重建過程中每個步驟的輸入輸出。

一、安裝

在GitHub上下載COLMAP源代碼(我用的是3.5版本),下載后進入colmap目錄編譯

cd ./colmap-3.5              # 進入colmap目錄
mkdir build && cd ./build    # 創建build文件夾,並進入
cmake ..                     # cmake
make -j8                     # make多線程編譯

二、運行colmap(命令行)

2.1 數據准備

我們做的是:基於多視圖圖像的三維重建,因此我們需要一些待重建的圖片。
這里我們用的是Sceaux Castle數據集👇👇👇 Sceaux Castle數據集的百度雲鏈接,提取碼mkzm

圖1. Sceaux Castle數據集

我們將圖片組織為colmap的工程格式:

/path/to/project/...
+── images
│   +── image1.jpg
│   +── image2.jpg
│   +── ...
│   +── imageN.jpg
圖2. colmap工程組織格式

工作目錄中包含一個images文件夾,images中即為待重建的圖片。

2.2 開始重建

以下所有命令均可在COLMAP官方說明文檔中查閱。
colmap提供了自動重建的命令,我們這里還是逐步進行重建,以觀察每一步的輸入輸出結果。

2.2.1 特征提取(feature_extractor)
./colmap feature_extractor \
   --database_path $DATASET_PATH/database.db \  # 輸出:特征點保存至數據庫database.db
   --image_path $DATASET_PATH/images            # 輸入:多視圖圖像
2.2.2 特征點匹配(exhaustive_matcher)
./colmap exhaustive_matcher \
   --database_path $DATASET_PATH/database.db    # 輸入輸出:數據庫文件database.db
2.2.3 稀疏重建(SfM, Structure-from-Motion)(mapper)
mkdir $DATASET_PATH/sparse    # 新建sparse文件夾
./colmap mapper \
    --database_path $DATASET_PATH/database.db \    # 輸入:數據庫文件database.db
    --image_path $DATASET_PATH/images \            # 輸入:多視圖圖像
    --output_path $DATASET_PATH/sparse             # 輸出:`sparse`文件夾

輸出結果sparse文件夾如下所示👇

└── sparse        # 稀疏重建結果
    └── 0
        ├── cameras.bin        # 相機內參
        ├── images.bin         # 相機位姿
        ├── points3D.bin       # 稀疏3D點
        └── project.ini
2.2.4 圖像去畸變(image_undistorter)
mkdir $DATASET_PATH/dense    # 新建dense文件夾
./colmap image_undistorter \
    --image_path $DATASET_PATH/images \          # 輸入:多視圖圖像
    --input_path $DATASET_PATH/sparse/0 \        # 輸入:sparse文件夾
    --output_path $DATASET_PATH/dense \          # 輸出:dense文件夾
    --output_type COLMAP \                       # 參數:輸出格式
    --max_image_size 2000                        # 參數:最大圖像尺寸

輸出結果dense文件夾如下所示👇

└── dense
    ├── images
    │   ├── 100_7100.JPG
    │   ├── 100_7101.JPG
    │   ├── ...
    │   └── 100_7110.JPG
    ├── run-colmap-geometric.sh
    ├── run-colmap-photometric.sh
    ├── sparse
    │   ├── cameras.bin
    │   ├── images.bin
    │   └── points3D.bin
    └── stereo
        ├── consistency_graphs
        ├── depth_maps
        ├── fusion.cfg
        ├── normal_maps
        └── patch-match.cfg
2.2.5 稠密重建
./colmap patch_match_stereo \
    --workspace_path $DATASET_PATH/dense \        # 輸入輸出:dense文件夾
    --workspace_format COLMAP \                   # 參數:工作區格式
    --PatchMatchStereo.geom_consistency true      

稠密重建的結果:為每張圖像估計depth_mapnormal_map

└── dense
    ├── images                        # resize之后的圖像
    │   ├── 100_7100.JPG
    │   ├── 100_7101.JPG
    │   ├── ...
    │   └── 100_7110.JPG
    ├── run-colmap-geometric.sh
    ├── run-colmap-photometric.sh
    ├── sparse
    │   ├── cameras.bin
    │   ├── images.bin
    │   └── points3D.bin
    └── stereo
        ├── consistency_graphs
        ├── depth_maps
        │   ├── 100_7100.JPG.geometric.bin
        │   ├── 100_7100.JPG.photometric.bin
        │   ├── ...
        │   ├── ...
        │   ├── 100_7110.JPG.geometric.bin
        │   └── 100_7110.JPG.photometric.bin
		├── fusion.cfg
        ├── normal_maps
        │   ├── 100_7100.JPG.geometric.bin
        │   ├── 100_7100.JPG.photometric.bin
        │   ├── ...
        │   ├── ...
        │   ├── 100_7110.JPG.geometric.bin
        │   └── 100_7110.JPG.photometric.bin
        └── patch-match.cfg
2.2.6 融合
./colmap stereo_fusion \
    --workspace_path $DATASET_PATH/dense \             # 輸入:dense文件夾
    --workspace_format COLMAP \                        # 參數:工作區格式
    --input_type geometric \                           # 參數:輸入類型
    --output_path $DATASET_PATH/dense/fused.ply        # 輸出:fused.ply文件

3.3 重建結果可視化

3.3.1 稀疏重建結果可視化

使用model_convertersparse文件夾中的bin文件轉為txt文件。使用COLMAP GUI對稀疏重建結果進行可視化

圖3. 稀疏重建結果 && 相機位姿圖
3.3.2 深度圖、法向圖可視化

圖4. 從左到右:100_7104原圖,重建深度圖,重建法向圖
3.3.3 稠密重建結果可視化

圖5. 稠密重建結果

Bug Reporter

也許在編譯過程中會出現一些問題,不要慌,我們去colmap的Github-Issues中去找一下。

問題匯總

  • CMake時提示Anaconda相關問題

參考

文中圖4 將三張圖拼接為一張圖👉GitHub


Questions

  1. colmap重建不用相機內參嗎?如果相機內參已知的話,是否會提高重建精度呢?
  2. SfM失敗!!!
Click Here: 點擊查看詳細內容

Pipes場景SfM失敗
![](https://img2018.cnblogs.com/blog/1511168/202002/1511168-20200208110635739-1493500627.png)
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM