三维重建:colmap安装与使用

Posted todd-qi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三维重建: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场景
技术图片

图1. ETH3D数据集之terrace场景

我们将图片组织为colmap的工程格式:

/path/to/project/...
+── images
│   +── image1.jpg
│   +── image2.jpg
│   +── ...
│   +── imageN.jpg
图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        # 稀疏重建结果
    └── 0
        ├── cameras.bin        # 相机内参
        ├── images.bin         # 相机位姿
        ├── points3D.bin
        └── 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
 ?? │?? ├── 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                        # resize后的图像
 ?? │?? ├── 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              # 输入: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 深度图、法向图可视化

技术图片

原图、
技术图片
深度图、
技术图片

法向图

3.3.3 稠密重建结果可视化

技术图片

图4. Terrance的Colmap重建结果

技术图片

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

Pipes场景SfM失败
技术图片

以上是关于三维重建:colmap安装与使用的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记之——视觉三维重建(colmap)

colmap已知相机位姿情况下进行三维重建

重建我的3D世界代码开源连载-3Colmap和OpenMVG对比

重建我的3D世界代码开源连载-3Colmap和OpenMVG对比

重建我的3D世界代码开源连载-3Colmap和OpenMVG对比

colmap利用已知的相机内外参数重建场景