Colmap根据相机内外参数重建稀疏模型
该摘要总结了使用COLMAP进行稀疏模型重建的完整流程,包括创建工作文件夹、运行特征提取器、导入相机内参、特征匹配、三角测量以及Bundle adjustment的运行。具体步骤如下:
创建稀疏模型工作文件夹:创建cameras.txt、images.txt和points3D.txt文件,分别存储相机参数、外参信息和初始点云数据。
运行特征提取器:使用colmap feature_extractor提取图像特征点,并自动生成database.db文件。
导入相机内参:通过COLMAP GUI导入相机内参,确保所有图像使用相同的参数进行处理。
特征匹配:使用colmap exhaustive_matcher进行特征匹配,生成匹配结果。
三角测量:运行colmap point_triangulator进行三角测量,生成triangulated/sparse文件夹中的点云数据。
Bundle adjustment:通过运行COLMAP GUI导入triangulated/sparse文件夹中的模型,检查重建效果是否收敛。如果收敛则成功,否则可能需要进一步检查和调整参数。
Colmap基于相机内外参数构建稀疏[模型],并指向该链接]()。
-
- 建立稀疏模型工作文件夹
-
- 通过命令行工具进行稀疏重建
- 2.1 提取图像的关键特征点
- 2.2 手动导入相机内参信息
- 2.3 进行特征匹配计算
- 2.4 完成三角测量计算
官方文档:https://colmap.github.io/faq.html#reconstruct-sparse-dense-model-from-known-camera-poses
参考博客:http://www.mamicode.com/info-detail-2838274.html
1.创建稀疏模型工作文件夹
已知相机的姿态信息,手动生成文件cameras.txt、points3D.txt以及images.txt,并记录其文件路径信息:
+── .../created/sparse
│ +── cameras.txt
│ +── images.txt
│ +── points3D.txt
其中相机内参被存储于cameras.txt中,相机的外参数(外参)被存储于images.txt中,points3D.txt则为空文件。
# Camera list with one line of data per camera:
# CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]
# Number of cameras: 1
1 OPENCV 1280 720 913.603 915.366 651.568 366.541 0.0961 -0.1858 0 0
仅配置一台相机,若有多台相机,可在下一行逐一填写各相机的参数设置。基于OpenCV的相机模型。
# 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.477458 0.543198 -0.521067 0.453276 0.0447519 0.146365 -0.115584 1 image0001.jpg
# Make sure every other line is left empty
2 0.477646 0.543413 -0.520842 0.453078 0.0401251 0.155332 -0.182149 1 image0002.jpg
3 0.477833 0.543629 -0.520617 0.452881 0.0353862 0.1643 -0.24872 1 image0003.jpg
4 0.478038 0.543864 -0.520372 0.452665 0.0247215 0.202905 -0.535662 1 image0004.jpg
数据的排列顺序即为IMAGE_ID, QW, QX, QY, QZ, TX, TY, TZ, CAMERA_ID, NAME依次排列。其中,IMAGE_ID表示在database management系统中的图片顺序编号,QW、QX、QY、QZ代表相机的旋转四元数,而TX、TY、TZ代表相机的平移向量。 CAMERA_ID表示使用的相机内参信息,若仅使用一台相机则所有CAMERA_ID值设为1。NMAE字段存储了图片的名称信息。由于当前数据中没有二维信息,因此每行数据结束后需要留空一行。为了整合外参信息,可以将分散的txt文件按照格式对应关系整合到Excel表格中,确保每列数据对应正确的外参信息。参考这篇博客可以获取更详细的指导。使用终端执行相关操作时,请确保路径正确。参考本次测试的路径设置:
/home/yzh/datatest
├── created
│ └── sparse
│ ├── cameras.txt
│ ├── images.txt
│ └── points3D.txt
├── dense
├── images
│ ├── image0001.jpg
│ ├── image0002.jpg
│ ├── ...
└── triangulated
└── sparse
images/文件夹下存放图片,其他文件夹为后面操作做准备。
2.命令行执行稀疏重建
2.1提取图像特征点
在datatest目录下打开终端执行命令:
colmap feature_extractor --database_path database.db --image_path images
会自动生成database.db文件,输出示例:
==============================================================================
Feature extraction
==============================================================================
Processed file [1/354]
Name: image0001.jpg
SKIP: Features for image already extracted.
Processed file [2/354]
Name: image0002.jpg
SKIP: Features for image already extracted.
Processed file [3/354]
Name: image0003.jpg
...
Processed file [354/354]
Name: image0354.jpg
SKIP: Features for image already extracted.
Elapsed time: 0.006 [minutes]
2.2手动导入相机内参
在终端运行colmap gui后,依次设置File->New Project->Database->Open以打开新创建的database.db文件,并指定图片存放路径。完成设置后,进入Processing->Database management界面,配置相机内参参数,并确保所有图片都应用该参数设置。
2.3特征匹配
在ProjectPath 目录上运行终端命令:
colmap exhaustive_matcher --database_path database.db
输出示例:
==============================================================================
Exhaustive feature matching
==============================================================================
Matching block [1/8, 1/8] in 0.070s
Matching block [1/8, 2/8] in 0.094s
...
2.4三角测量
继续在终端上执行:
colmap point_triangulator --database_path database.db --image_path images --input_path created/sparse --output_path triangulated/sparse
输入如下:
==============================================================================
Loading database
==============================================================================
Loading cameras... 354 in 0.000s
Loading matches... 5904 in 0.012s
Loading images... 354 in 0.012s (connected 347)
Building correspondence graph... in 0.051s (ignored 0)
Elapsed time: 0.001 [minutes]
==============================================================================
Triangulating image #1
==============================================================================
=> Image has 0 / 2221 points
=> Triangulated 499 points
...
==============================================================================
Bundle adjustment
==============================================================================
iter cost cost_change |gradient| |step| tr_ratio tr_radius ls_iter iter_time total_time
0 6.639401e+06 0.00e+00 2.47e+06 0.00e+00 0.00e+00 1.00e+04 0 5.93e-02 1.94e-01
1 7.112741e+16 -7.11e+16 0.00e+00 1.04e+03 -3.41e+10 5.00e+03 0 3.50e-02 2.29e-01
2 1.068943e+10 -1.07e+10 0.00e+00 9.39e+02 -5.14e+03 1.25e+03 0 1.97e-02 2.49e-01
3 1.513723e+10 -1.51e+10 0.00e+00 6.78e+02 -7.42e+03 1.56e+02 0 2.63e-02 2.75e-01
...
Bundle adjustment report
------------------------
Residuals : 90434
Parameters : 38499
Iterations : 3
Time : 0.136264 [s]
Initial cost : 1.02783 [px]
Final cost : 1.02605 [px]
Termination : Convergence
=> Merged observations: 48
=> Completed observations: 49
=> Filtered observations: 24
=> Changed observations: 0.002676
==============================================================================
Extracting colors
==============================================================================
关于Bundle adjustment的收敛性问题,若不收敛,必然导致失败;即使收敛,也不一定达到预期效果。我们可以使用COLMAP的图形用户界面程序,执行File->Import model,导入生成的稀疏重建模型,观察其重建效果。例如,通过导入上述方法生成的模型,可以直观评估重建质量。

