COLMAP简易教程(命令行模式)

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

structure from motion(SfM)==> camera parameters, sparse point cloud

multi view stereo(MVS)==>depth map, dense point cloud

surface reconstruction(SR)==>poisson or delauny reconstruction, mesh

texture mapping™==>get mesh with texture

COLMAP整体流程如下图所示

test

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

Camera Models

Pinhole_camera_model

camera_calibration_and_3d_reconstruction

Structure from Motion
运动恢复结构流程如下图所示

运动恢复结构主要步骤

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

图像特征提取
相机内参已知的情况下我们可以直接通过命令行参数 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_path 和 output_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() 函数进行

http://kc.njitt.edu.cn/Item/2160.aspx
http://kc.njitt.edu.cn/Item/2161.aspx
http://kc.njitt.edu.cn/Item/2162.aspx
http://kc.njitt.edu.cn/Item/2163.aspx
http://kc.njitt.edu.cn/Item/2164.aspx
http://kc.njitt.edu.cn/Item/2165.aspx
http://kc.njitt.edu.cn/Item/2166.aspx
http://kc.njitt.edu.cn/Item/2167.aspx
http://kc.njitt.edu.cn/Item/2168.aspx
http://kc.njitt.edu.cn/Item/2169.aspx
http://kc.njitt.edu.cn/Item/2170.aspx
http://kc.njitt.edu.cn/Item/2171.aspx
http://kc.njitt.edu.cn/Item/2172.aspx
http://kc.njitt.edu.cn/Item/2173.aspx
http://kc.njitt.edu.cn/Item/217

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值