【colmap】基于colmap的多视图三维重建
《基于多视角图像的三维重建》👉https://github.com/XYZ-qiyh/multi-view-3d-reconstruction
本文将介绍COLMAP的安装与使用,重点介绍3D重建过程中每个步骤的输入输出。
一、安装
本文使用colmap-3.6版本,但同样适合新版本,下载完毕后进入colmap目录进行源码编译。
cd ./colmap-3.6 # 进入colmap目录
mkdir build && cd ./build # 创建build文件夹,并进入
cmake .. # cmake
make -j8 # make多线程编译
二、基于colmap的三维重建
2.1 数据准备
基于colmap开源框架进行多视图三维重建,使用Sceaux Castle数据集提供的图片👇
我们将图片组织为colmap的工程格式:
/path/to/project/...
+── images
│ +── image1.jpg
│ +── image2.jpg
│ +── ...
│ +── imageN.jpg
工作目录中包含一个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_map
和normal_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_converter
将sparse
文件夹中的bin文件转为txt文件
./colmap model_converter \
--input_path $DATASET_PATH/dense/sparse \
--output_path $DATASET_PATH/dense/sparse \
--output_type TXT
- 使用COLMAP GUI对稀疏重建结果进行可视化
3.3.2 深度图、法向图可视化
3.3.3 稠密重建结果可视化
4 备注
4.1 Castle场景的重建结果见百度网盘
链接:https://pan.baidu.com/s/1l0JP2f5RqTzZiMaqhC-qGw 提取码:jgou
4.2 colmap三维重建的Shell脚本colmap_3d_recon.sh,修改其中的可执行文件路径EXE_PATH
和数据路径DATASET_PATH
即可对自己的数据进行三维重建。
4.3 相机位姿可视化:https://github.com/demul/extrinsic2pyramid
4.4 SceauxCastle:https://en.wikipedia.org/wiki/Château_de_Sceaux
4.5 fused.ply.vis: https://github.com/colmap/colmap/issues/857
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)