三维重建: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场景
我们将图片组织为colmap的工程格式:
/path/to/project/...
+── images
│ +── image1.jpg
│ +── image2.jpg
│ +── ...
│ +── imageN.jpg
工作目录中包含一个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_map
和normal_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_converter
将sparse
文件夹中的bin文件转为txt文件。使用COLMAP GUI对稀疏重建结果进行可视化
3.3.2 深度图、法向图可视化
原图、
深度图、
法向图
3.3.3 稠密重建结果可视化
Pipes场景SfM失败
以上是关于三维重建:colmap安装与使用的主要内容,如果未能解决你的问题,请参考以下文章
重建我的3D世界代码开源连载-3Colmap和OpenMVG对比
重建我的3D世界代码开源连载-3Colmap和OpenMVG对比