三维重建(一):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的Github-Issues中去找一下。

问题汇总

  • CMake时提示Anaconda相关问题

二、运行colmap(命令行)

2.1 数据准备

因为我们做的是:基于多视图图像的三维重建,所以首先我们需要一些待重建的图片
我们用的是ETH3D数据集中的terrace场景
三维重建(一):colmap安装与使用_第1张图片

图1. ETH3D数据集之terrace场景

我们将图片组织为colmap的工程格式:
三维重建(一):colmap安装与使用_第2张图片

图2. colmap工程组织格式

工作目录中包含一个images文件夹,images中即为待重建的图片,Pipes图片的百度云链接,提取码8tn2

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, Struggle 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        # 稀疏重建结果,可通过COLMAP GUI可视化显示结果
    └── 0
        ├── cameras.bin        # 相机内参
        ├── images.bin         # 相机位姿
        ├── points3D.bin
        └── project.ini

三维重建(一):colmap安装与使用_第3张图片

图3. 稀疏重建点 && 相机位姿图

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
    │   ├── DSC_0259.JPG
    │   ├── DSC_0260.JPG
    │   ├── ...
    │   └── DSC_0285.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
    │   ├── DSC_0259.JPG
    │   ├── DSC_0260.JPG
    │   ├── ...
    │   └── DSC_0285.JPG
    ├── run-colmap-geometric.sh
    ├── run-colmap-photometric.sh
    ├── sparse
    │   ├── cameras.bin
    │   ├── images.bin
    │   └── points3D.bin
    └── stereo
        ├── consistency_graphs
        ├── depth_maps
        │   ├── DSC_0259.JPG.geometric.bin
        │   ├── DSC_0259.JPG.photometric.bin
        │   ├── ...
        │   ├── ...
        │   ├── DSC_0285.JPG.geometric.bin
        │   └── DSC_0285.JPG.photometric.bin
        ├── fusion.cfg
        ├── normal_maps
        │   ├── DSC_0259.JPG.geometric.bin
        │   ├── DSC_0259.JPG.photometric.bin
        │   ├── ...
        │   ├── ...
        │   ├── DSC_0285.JPG.geometric.bin
        │   └── DSC_0285.JPG.photometric.bin
        └── patch-match.cfg
2.2.6 融合
./colmap stereo_fusion \
    --workspace_path $DATASET_PATH/dense \
    --workspace_format COLMAP \
    --input_type geometric \
    --output_path $DATASET_PATH/dense/fused.ply

稠密点云保存至dense/fused.ply
三维重建(一):colmap安装与使用_第4张图片

图4. Terrance的Colmap重建结果

三维重建(一):colmap安装与使用_第5张图片

图5. Terrance的Colmap重建结果(ETH3D数据集)

3.3 重建结果可视化

3.3.1 稀疏重建结果可视化

https://github.com/colmap/colmap/issues/697#issuecomment-536274551

3.3.2 稠密重建结果可视化

Pipes场景SfM失败
三维重建(一):colmap安装与使用_第6张图片

你可能感兴趣的:(三维重建(一):colmap安装与使用)