简介
COLMAP是开源的计算机视觉软件,主要用于从一系列二维图像中进行三维重建。它是一个高度集成的Structure-from-Motion (SfM) 和 Multi-View Stereo (MVS) 管道工具,由斯坦福大学开发和维护。
COLMAP能够帮助用户从无序或有序的二维照片集合中恢复出三维场景的几何结构(点云)以及每张图像对应的相机姿态。其功能包括:
- 特征检测与匹配:识别并匹配不同图像间的特征点。
- 增量式SfM:通过特征匹配关系建立图像间的连接,并逐步估计所有图像的相对相机姿态,形成稀疏点云。
- 多视图立体匹配(MVS):基于已知的相机参数,生成深度图和法向量图,进而生成稠密点云和三维表面模型。
- 优化:对整个重建过程中的关键参数(如相机位置、内部参数等)进行全局优化以提高精度。
COLMAP提供了图形用户界面和命令行接口,支持多种图像格式,并可在Windows、Linux和Mac OS上运行。由于其高效性和准确性,COLMAP在学术研究和工业应用领域被广泛用于三维建模、三维地图制作、考古学、虚拟现实等多个方面。
3D处理步骤
一般来说,3d处理遵循以下步骤,基于图像的 3D 重建首先使用SFM技术(structure-from-motion)从图像中恢复稀疏表示和相机位姿。然后,前述输出用作MVS(Mutil-View Stereo)多视图立体匹配的输入,以恢复场景的稠密表示。
文件结构
+── images
│ +── image1.jpg
│ +── image2.jpg
│ +── ...
+── sparse
│ +── 0
│ │ +── cameras.bin
│ │ +── images.bin
│ │ +── points3D.bin
│ +── ...
+── dense
│ +── 0
│ │ +── images
│ │ +── sparse
│ │ +── stereo
│ │ +── fused.ply
│ │ +── meshed-poisson.ply
│ │ +── meshed-delaunay.ply
│ +── ...
+── database.db
1、以上目录都在项目数据文件夹下
2、sparse是稀疏重建的工作文件夹。
3、dense是稠密重建的工作文件夹。
SFM(structure-from-motion)运动结构重建
Structure-from-Motion (SfM) 是一种计算机视觉技术,它能够通过分析一组二维图像序列来恢复场景的三维结构以及相机在拍摄这些图像时的位置和姿态(即相机运动)。这个过程通常包括以下步骤:
- 特征检测和提取
- 特征匹配和几何验证
- 结构和运动重建
图片输入要求/建议
- 捕捉具有良好纹理的图像。避免完全无纹理的图像 (例如,白色的墙壁或空的桌子)。如果场景包含的内容不够 纹理本身,您可以放置其他背景对象,例如 海报等。
- 在相似的照明条件下拍摄图像。避免高动态 范围场景(例如,带有阴影或图片的对太阳图片 通过门/窗)。避免在有光泽的表面上出现镜面反射。
- 捕获具有高度视觉重叠的图像。确保每个对象都是 至少在 3 张图像中看到 - 图像越多越好。
- 从不同角度捕捉图像。不要站在同一个位置通过旋转相机拍摄,在每次拍摄后走几步。同时,尝试从相对相似的角度中获得足够的图像。请注意,图像越多不一定越好,可能会导致重建过程缓慢。如果您使用视频作为输入,请考虑 对帧速率进行下采样。
MVS(Multi-View Stereo)多视图立体视觉
多视图立体(MVS)方法利用了结构化运动(SfM)得到的结果,对图像中每一个像素进行深度和/或法向量数据的计算。将多个图像对应的深度和法线贴图在三维空间中整合,进而形成对场景的稠密点云表示。接下来,通过运用这些融合后的点云所包含的深度和法线信息,可以采用像(修正版)泊松表面重构这样的算法[kazhdan2013年提出的方法]来还原场景的三维表面几何结构。
问题点
稀疏重建时的GPU几乎没占用
根据大佬的说法,稀疏重建过程中用的时CPU,(特征提取和匹配用的时GPU)所以图片多的时候会很慢。
Low GPU usage during reconstruction · Issue #2354 · colmap/colmap
Mapper with pba not using GPU · Issue #1359 · colmap/colmap
稀疏重建时,只有很少图片注册上
根据官方网站,的说法,按照以下两种方式解决,我还没试过。
理想情况下,重建工作正常,所有图像都已注册。如果这是 如果不是这种情况,建议:
- 执行其他匹配。为获得最佳结果,请使用详尽匹配,启用 引导式匹配,增加词汇树中最近邻的数量 匹配,或增加顺序匹配中的重叠等。
- 如果 COLMAP 初始化失败,请手动选择初始图像对。选择“重建”>“重建”选项>“初始化”(Reconstruction > Reconstruction options > Init),然后从数据库管理工具中设置具有足够匹配度的图像。
colmap命令行调用
自动重建
# The project folder must contain a folder "images" with all the images.
$ DATASET_PATH=/path/to/project
$ colmap automatic_reconstructor \
--workspace_path $DATASET_PATH \
--image_path $DATASET_PATH/images
全手动操作
# The project folder must contain a folder "images" with all the images.
$ DATASET_PATH=/path/to/dataset
$ colmap feature_extractor \
--database_path $DATASET_PATH/database.db \
--image_path $DATASET_PATH/images
$ colmap exhaustive_matcher \
--database_path $DATASET_PATH/database.db
$ mkdir $DATASET_PATH/sparse
$ colmap mapper \
--database_path $DATASET_PATH/database.db \
--image_path $DATASET_PATH/images \
--output_path $DATASET_PATH/sparse
$ mkdir $DATASET_PATH/dense
$ colmap image_undistorter \
--image_path $DATASET_PATH/images \
--input_path $DATASET_PATH/sparse/0 \
--output_path $DATASET_PATH/dense \
--output_type COLMAP \
--max_image_size 2000
$ colmap patch_match_stereo \
--workspace_path $DATASET_PATH/dense \
--workspace_format COLMAP \
--PatchMatchStereo.geom_consistency true
$ colmap stereo_fusion \
--workspace_path $DATASET_PATH/dense \
--workspace_format COLMAP \
--input_type geometric \
--output_path $DATASET_PATH/dense/fused.ply
$ colmap poisson_mesher \
--input_path $DATASET_PATH/dense/fused.ply \
--output_path $DATASET_PATH/dense/meshed-poisson.ply
$ colmap delaunay_mesher \
--input_path $DATASET_PATH/dense \
--output_path $DATASET_PATH/dense/meshed-delaunay.ply
查看帮助
colmap help