Colmap算法pipeline:
Colmap安装
数据采集
Colmap GUI操作
稀疏重建
采用增量SfM技术
1. 准备工作
- 创建工程目录
TestScan
- 在其中创建
images
目录并存放原始图像 - 运行
colmap gui
,点击file - New Project
弹出Project窗口 -
在Database
行点击New
,在TestScan
目录中创建TestScan.db
文件用于存储原始图片地址、特征匹配等数据 - 在
Images
行点击Select
选择场景原始图片所在目录 - 最后点击
save
初始的目录结构为:
.
|-- TestScan.db
`-- images
|-- 00000000.jpg
|-- 00000001.jpg
|-- ...
`-- 00000048.jpg
2. 特征提取
此步骤进行对应点搜索,可以理解为全局特征匹配
点击processing - Feature Extraction
- 选择相机模型为
Pinhole
- 选择
Parameters from EXIF
:从EXIF中提取相机内参(一般采集到的影响都携带EXIF文件) - 其他参数暂且默认
然后点击Extract
进行特征提取
3. 特征匹配
点击processing - Feature Matching
,参数全部选用默认,然后点击Run
进行特征匹配
这个步骤结束之后会自动生成场景图和匹配矩阵(以不同视图之间同名特征数为权重,以不同视图为图节点的图结构)
从右侧的Log
中可以看到这两步的输出
4. 增量式建模
点击reconstruction - start reconstruction
进行一键式增量迭代重建
此步骤逐渐增加视角,并进行迭代优化重投影误差
目的是计算不同视图的相机参数、得到场景的稀疏点云和确定不同视图与点云间的可视关系
最后可以得到场景的稀疏点云和各个视角的相机姿态
以第49张图像(39个视角)为例
- 已有点云576个
- 首先进行姿态估计(Pose Refinement Report)
- 再进行BA优化:整体稀疏点云融合测量点149个,滤除测量点32个
- 再进行三角测量(Retriangulation)
- 最后再进行迭代全局的BA优化,优化已有相机的姿态和三维稀疏点云坐标
==============================================================================
Registering image #39 (49)
==============================================================================
=> Image sees 576 / 991 points
Pose refinement report
----------------------
Residuals : 1132
Parameters : 8
Iterations : 7
Time : 0.0134351 [s]
Initial cost : 0.535158 [px]
Final cost : 0.462099 [px]
Termination : Convergence
=> Continued observations: 540
=> Added observations: 73
Bundle adjustment report
------------------------
Residuals : 24684
Parameters : 2030
Iterations : 21
Time : 0.501096 [s]
Initial cost : 0.374389 [px]
Final cost : 0.367663 [px]
Termination : Convergence
=> Merged observations: 149
=> Completed observations: 27
=> Filtered observations: 32
=> Changed observations: 0.016853
Bundle adjustment report
------------------------
Residuals : 24690
Parameters : 2000
Iterations : 3
Time : 0.0764892 [s]
Initial cost : 0.430376 [px]
Final cost : 0.427614 [px]
Termination : Convergence
=> Merged observations: 10
=> Completed observations: 1
=> Filtered observations: 0
=> Changed observations: 0.000891
==============================================================================
Retriangulation
==============================================================================
=> Completed observations: 9
=> Merged observations: 186
=> Retriangulated observations: 0
深度图估计与优化
Colmap中代价构造、累积、估计和优化是封装在一起的,利用GEM模型进行求解
主要分为四个步骤:匹配代价构造 -> 代价累积 -> 深度估计 -> 深度图估计
这里的原理暂时省略,多视图几何三维重建实战系列之COLMAP
1. 图像去畸变
点击reconstruction - dense reconstruction
,在稠密重建窗口中点击select
选择文件存放位置,然后点击undistortion
即可去除图像畸变
⚠️注意:这里不要选择项目的根目录,拷贝图片的时候会报错路径已存在导致colmap gui闪退的;同时undistortion也只能点一次,第二次同样会因为路径已存在闪退
带有畸变的图像会导致边缘有较大的时差估计误差,因此在深度图估计之前,使用光学一致性和几何一致性联合约束构造代价匹配
dtu数据集和之前配置成针孔模型已经隐含无畸变
如果使用自采集数据集需要更改相机模型为带畸变参数的相机模型
2. 深度估计
在稠密重建窗口中点击stereo
进行场景深度估计
深度估计结束后可以得到photometric
和geometric
下的深度图和法向量图
这一步很慢而且资源消耗比较大
之后点击红框里的这些就可以观察光学一致性photometric和几何一致性geometric后的depth map和normal map
Colmap会利用光学一致性同时估计视角的深度值和法向量值,并利用几何一致性进行深度图优化
稠密重建
点击Fusion
即可进行基于深度图融合的稠密重建
重建后会在dense
中生成ply
模型文件
可视化显示
Meshlab
安装MeshLab进行显示
sudo snap install meshlab
【报错:meshlab无法打开ply文件】
问题分析:用文本浏览器打开ply文件发现header之后全部问乱码
找了很多资料还是没有找到解决方案,最后找师兄要了一个显示ply的python脚本,主要是用的是open3d库就成功了
标签:bin,--,GUI,JPG,点击,observations,path,Colmap,三维重建 From: https://blog.51cto.com/doubleZ/5986591