【安装】Colmap安装与使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

Colmap安装与使用

  • Colmap编译与安装
    • 一、QT安装
    • 二、安装cuda10.1
    • 三、安装Boost
    • 四、CGAL安装与编译
    • 五、Colmap安装
  • Colmap详解
    • Structure from Motion
      • 图像特征提取
      • 图像特征匹配
      • 相机位姿求解与优化
      • 模型转换与参数读取
    • Dense Reconstruction
      • 图像畸变矫正
      • 立体块匹配
    • Mesh and Texutre Map
      • 点云融合
      • 表面网格重建

参考:https://blog.csdn.net/qq_39003069/article/details/109383593?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control

https://blog.csdn.net/any_howe/article/details/83106940

Colmap编译与安装

一、QT安装

下载链接:http://download.qt.io/archive/qt/

二、安装cuda10.1

下载链接:https://developer.nvidia.com/cuda-10.1-download-archive-base?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exenetwork
【安装】Colmap安装与使用_第1张图片
选择本地local离线安装,起初下载的network在安装时下载包失败。
(最好下载离线安装[local],在线下载安装[network])下载完成后,打开安装程序:
1. cuda_10.1.105_418.96_win10.exe
自定义安装路径 D:\Dependent\cuda10.1
2. NVIDIA 软件许可协议
3. 自定义(C)高级
【安装】Colmap安装与使用_第2张图片
但下面在选择驱动程序时全部选择了
【安装】Colmap安装与使用_第3张图片

选择安装位置,此处采用了默认,装到了C盘
【安装】Colmap安装与使用_第4张图片
5. 安装程序完成
【安装】Colmap安装与使用_第5张图片
【安装】Colmap安装与使用_第6张图片
6.安装完成,会自动添加环境变量,可以自行查看:
在这里插入图片描述
在这里插入图片描述

三、安装Boost

下载链接:https://sourceforge.net/projects/boost/files/boost-binaries/
下载具体版本根据vs版本和位数来选择,14.0对应VC2015,14.1对应VC2017,14.2对应VC2019,因此我选择boost_1_70_0-msvc-14.2-64.exe下载即可。
【安装】Colmap安装与使用_第7张图片

开始下载的boost_1_64_0-msvc-14.1-64.exe,点击bootstrap.bat时闪退,并没有生成b2.exe找不到 cl ,尝试了多挣解决办法未解决。
后来重新下载了boost1_72,成功生成了b2.exe,运行b2.exe(时间较长),是在生成链接库,在stage-lib文件夹下。但后面添加环境变量时,仍然添加的是自带的 lib64-msvc-14.1
【安装】Colmap安装与使用_第8张图片
在系统变量中添加,不是Path里
【安装】Colmap安装与使用_第9张图片

四、CGAL安装与编译

先安装其余的,如cuda,QT,BOOST,在安装这个,会用到前面的。
下载链接:https://github.com/CGAL/cgal/releases
下载.exe版本安装
1.打开cmake-gui,进入cgal所在的文件夹(如下图)。注意,cgal本身是没有build文件夹的,cmake编译过程中会自动给你创建一个。
【安装】Colmap安装与使用_第10张图片
【安装】Colmap安装与使用_第11张图片
2. 路径设置好之后,点击configure,然后在里面选择对应的vs版本,点击finish,cmake开始自动编译,编译成后显示configure done。(其中有一项CMAKE_INSTALL_PREFIX,是编译完成后文件的安装位置。)再点击generate,显示generate done。此时会在刚刚创建的build文件夹里生成cgal.sln文件
【安装】Colmap安装与使用_第12张图片
【安装】Colmap安装与使用_第13张图片
若遇到以下问题:
Cmake编译CGAL报错(1):Boost_DIR或Boost_INCLUDE_DIR找不到,只需在CMake里修改Boost_INCLUDE_DIR路径,如下图所示:
只需要将路径修改为你的boost的安装目录就可以了
【安装】Colmap安装与使用_第14张图片
在这里插入图片描述

  1. 使用vs2017打开cgal.sln文件。分别在Debug模式和release模式中把All BUILD和INSTALL都生成一边,全部生成成功,cgal就编译完成了。

在cgal编译INSTALL时报错,debug和release均报错:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210112155417489.png【安装】Colmap安装与使用_第15张图片
解决:以管理员身份运行VS2017,打开CGAL.sln,然后再右键 INSTALL- 生成 即可编译成功。

4. 添加环境变量
全部编译结束之后,添加一些环境变量,后面编译colmap的时候会用到。

五、Colmap安装

colmap下载链接:https://github.com/colmap/colmap/releases
其中,后缀带windows的是编译好的,可直接运行。

自已用python编译colmap时未成功,后来得知可以直接用编译好的版本,就暂时搁置了,未继续搭建编译colmap的环境与安装,以上步骤均已完成。但最后编译未通过,不知是否与前面的安装有关系。

Colmap详解

完整的 multi view stereo pipeline 会有以下步骤

  1. structure from motion(SfM)==> camera parameters, sparse point cloud
  2. multi view stereo(MVS)==>depth map, dense point cloud
  3. surface reconstruction(SR)==>poisson or delauny reconstruction, mesh
  4. texture mapping™==>get mesh with texture

COLMAP整体流程如下图所示

【安装】Colmap安装与使用_第16张图片

COLMAP重建过程主要步骤

COLMAP 兼容好几种不同的相机模型,我们在使用时可以对相机模型进行限制以获得最好的效果。

如果提前不知道相机内参,最好使用包含畸变系数的模型,默认为 SIMPLE_RAIDIAL

如果已知相机没有畸变或畸变影响很小,建议使用 SIMPLE_PINHOLE 模型。

可供选择的模型分别为

SIMPLE_PINHOLE, PINHOLE, SIMPLE_RADIAL, RADIAL, OPENCV, FULL_OPENCV, 

SIMPLE_RADIAL_FISHEYE, RADIAL_FISHEYE, OPENCV_FISHEYE, FOV, THIN_PRISM_FISHEYE

不同模型含义及参数如下表所示,详见 Camera Models

【安装】Colmap安装与使用_第17张图片

Camera Models

Pinhole_camera_model

camera_calibration_and_3d_reconstruction

Structure from Motion


运动恢复结构流程如下图所示
【安装】Colmap安装与使用_第18张图片

运动恢复结构主要步骤

运动恢复结构的目的是求解相机参数,需要把所有输入图片放到一个文件夹下。按如下步骤依次进行。

图像特征提取

相机内参已知的情况下我们可以直接通过命令行参数 ImageReader.camera_params 传给 COLMAP。

a. 相机内参已知

$ colmap feature_extractor \
    --database_path ./database.db \
    --image_path images \
    --ImageReader.camera_model SIMPLE_PINHOLE \
    --ImageReader.camera_params "1813.3334,1920,1080" \
    --SiftExtraction.max_image_size 3840

其中 camera_params 为 std::string 类型,不同的模型有对应的表示方式。参数及含义参考上面表格中的各种相机模型。

b. 相机内参未知

$ colmap feature_extractor \
    --database_path ./database.db \
    --image_path images \
    --ImageReader.camera_model SIMPLE_PINHOLE \
    --SiftExtraction.max_image_size 3840

其中 database_path 设置工程数据文件的保存路径

image_path 设置输入图像所在文件夹路径

camera_model 设置相机模型

max_image_size 设置为大于图像最大边所对应的分辨率的值

图像特征匹配

$ colmap exhaustive_matcher --database_path $DATASET_PATH/database.db

其中 database_path 设置为特征点检测时工程数据文件保存的路径。

相机位姿求解与优化

$ mkdir $DATASET_PATH/sparse

$ colmap mapper \
    --database_path $DATASET_PATH/database.db \
    --image_path $DATASET_PATH/images \
    --output_path $DATASET_PATH/sparse \
    --Mapper.ba_refine_principal_point true

模型转换与参数读取

在进行稀疏重建之后,model 默认会被导出到 bin 文件中,因为这样比较紧凑,节省空间,可以使用 COLMAP 的模型转换功能将其转换成 txt 文件。

注意下面的指令中 input_pathoutput_path 是文件所在文件夹的路径,而不是单个文件路径。

$ colmap model_converter \
    --input_path $DATASET_PATH/sparse/0 \
    --output_path $DATASET_PATH/sparse \
    --output_type TXT

a. 相机内参 cameras.txt 格式如下

# Camera list with one line of data per camera:
#  CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]
# Number of cameras: 3
1 SIMPLE_PINHOLE 3072 2304 2559.81 1536 1152
2 PINHOLE 3072 2304 2560.56 2560.56 1536 1152
3 SIMPLE_RADIAL 3072 2304 2559.69 1536 1152 -0.0218531

b. 相机外参,包含旋转和平移,以及每张图片中特征点在图像中的二维坐标及其对应的三维稀疏点索引images.txt 格式如下,注意这里的旋转保存为单位四元数形式,与 Eigen::Quaterniond 格式相同

# Image list with two lines of data per image:
#  IMAGE_ID, QW, QX, QY, QZ, TX, TY, TZ, CAMERA_ID, NAME
#  POINTS2D[] as (X, Y, POINT3D_ID)
# Number of images: 2, mean observations per image: 2
1 0.851773 0.0165051 0.503764 -0.142941 -0.737434 1.02973 3.74354 1 P1180141.JPG
2362.39 248.498 58396 1784.7 268.254 59027 1784.7 268.254 -1
2 0.851773 0.0165051 0.503764 -0.142941 -0.737434 1.02973 3.74354 1 P1180142.JPG
1190.83 663.957 23056 1258.77 640.354 59070

c. 稀疏三维点云中三维空间点的信息 points3D.txt 格式如下

# 3D point list with one line of data per point:
#  POINT3D_ID, X, Y, Z, R, G, B, ERROR, TRACK[] as (IMAGE_ID, POINT2D_IDX)
# Number of points: 3, mean track length: 3.3334
63390 1.67241 0.292931 0.609726 115 121 122 1.33927 16 6542 15 7345 6 6714 14 7227
63376 2.01848 0.108877 -0.0260841 102 209 250 1.73449 16 6519 15 7322 14 7212 8 3991
63371 1.71102 0.28566 0.53475 245 251 249 0.612829 118 4140 117 4473

如果需要进一步 rectify, 可以把参数输入到 OpenCV 的 stereoRectify() 函数中,之后 initUndistortRectifyMap() , 最后使用 remap() 函数进行重映射 从而得到矫正的结果。

Dense Reconstruction


利用前面的步骤求得的相机参数进行稠密重建,由 PatchMatch 求解单视角对应的深度图和法向图,同时根据需要对深度图和法相图进行滤波。

图像畸变矫正

$ 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 3840

立体块匹配

$ colmap patch_match_stereo \
    --workspace_path $DATASET_PATH/dense \
    --workspace_format COLMAP \
    --PatchMatchStereo.max_image_size 3840 \
    --PatchMatchStereo.window_radius 9 \
    --PatchMatchStereo.geom_consistency true \
    --PatchMatchStereo.filter_min_ncc 0.07

对于纹理不是特别丰富的场景,建议增加 windows_radius 以及降低 filter_min_ncc 来提升深度值求解的准确度。

Mesh and Texutre Map


点云融合

$ 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
  或
    --output_path $DATASET_PATH/dense/meshed-poisson.ply

你可能感兴趣的:(三维重建,colmap)