首页 > 其他分享 >传统方法Colmap进行三维重建实践(GUI|命令行)

传统方法Colmap进行三维重建实践(GUI|命令行)

时间:2023-01-03 19:06:01浏览次数:53  
标签:bin -- GUI JPG 点击 observations path Colmap 三维重建


Colmap算法pipeline

传统方法Colmap进行三维重建实践(GUI|命令行)_深度图

Colmap安装

​在Ubuntu Docker中安装Colmap​


数据采集

​多视角三维重建(MVS)的数据采集​


Colmap GUI操作

稀疏重建

采用增量SfM技术

其中SfM技术出自​​GitHub - openMVG/openMVG: open Multiple View Geometry library. Basis for 3D computer vision and Structure from Motion.​

1. 准备工作

  1. 创建工程目录​​TestScan​
  2. 在其中创建​​images​​目录并存放原始图像
  3. 运行​​colmap gui​​​,点击​​file - New Project​​弹出Project窗口
  4. ​在Database​​​行点击​​New​​​,在​​TestScan​​​目录中创建​​TestScan.db​​文件用于存储原始图片地址、特征匹配等数据
  5. 在​​Images​​​行点击​​Select​​选择场景原始图片所在目录
  6. 最后点击​​save​​ 初始的目录结构为:
.
|-- TestScan.db
`-- images
|-- 00000000.jpg
|-- 00000001.jpg
|-- ...
`-- 00000048.jpg

2. 特征提取

此步骤进行对应点搜索,可以理解为全局特征匹配
点击​​​processing - Feature Extraction​

  • 选择相机模型为​​Pinhole​
  • 选择​​Parameters from EXIF​​:从EXIF中提取相机内参(一般采集到的影响都携带EXIF文件)
  • 其他参数暂且默认
    然后点击​​​Extract​​进行特征提取

传统方法Colmap进行三维重建实践(GUI|命令行)_深度图_02

3. 特征匹配

点击​​processing - Feature Matching​​​,参数全部选用默认,然后点击​​Run​​进行特征匹配

这个步骤结束之后会自动生成场景图匹配矩阵(以不同视图之间同名特征数为权重,以不同视图为图节点的图结构)

从右侧的​​Log​​中可以看到这两步的输出

传统方法Colmap进行三维重建实践(GUI|命令行)_计算机视觉_03

4. 增量式建模

点击​​reconstruction - start reconstruction​​进行一键式增量迭代重建

此步骤逐渐增加视角,并进行迭代优化重投影误差
目的是计算不同视图的相机参数、得到场景的稀疏点云和确定不同视图与点云间的可视关系
最后可以得到场景的稀疏点云和各个视角的相机姿态

传统方法Colmap进行三维重建实践(GUI|命令行)_计算机视觉_04

以第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也只能点一次,第二次同样会因为路径已存在闪退

传统方法Colmap进行三维重建实践(GUI|命令行)_计算机视觉_05

带有畸变的图像会导致边缘有较大的时差估计误差,因此在深度图估计之前,使用光学一致性和几何一致性联合约束构造代价匹配

dtu数据集和之前配置成针孔模型已经隐含无畸变
如果使用自采集数据集需要更改相机模型为带畸变参数的相机模型

2. 深度估计

在稠密重建窗口中点击​​stereo​​​进行场景深度估计
深度估计结束后可以得到​​​photometric​​​和​​geometric​​下的深度图和法向量图

这一步很慢而且资源消耗比较大

传统方法Colmap进行三维重建实践(GUI|命令行)_计算机视觉_06

之后点击红框里的这些就可以观察光学一致性photometric和几何一致性geometric后的depth map和normal map

传统方法Colmap进行三维重建实践(GUI|命令行)_计算机视觉_07

Colmap会利用光学一致性同时估计视角的深度值和法向量值,并利用几何一致性进行深度图优化


稠密重建

点击​​Fusion​​即可进行基于深度图融合的稠密重建

传统方法Colmap进行三维重建实践(GUI|命令行)_深度图_08

重建后会在​​dense​​​中生成​​ply​​模型文件

可视化显示

Meshlab

安装​​MeshLab​​进行显示

sudo snap install meshlab

【报错:meshlab无法打开ply文件】

传统方法Colmap进行三维重建实践(GUI|命令行)_计算机视觉_09

问题分析:用文本浏览器打开ply文件发现header之后全部问乱码

传统方法Colmap进行三维重建实践(GUI|命令行)_点云_10

找了很多资料还是没有找到解决方案,最后找师兄要了一个显示ply的python脚本,主要是用的是open3d库就成功了

标签:bin,--,GUI,JPG,点击,observations,path,Colmap,三维重建
From: https://blog.51cto.com/doubleZ/5986591

相关文章

  • 双目三维重建系统(双目标定+立体校正+双目测距+点云显示)Python
    双目三维重建系统(双目标定+立体校正+双目测距+点云显示)Python目录​​双目三维重建系统(双目标定+立体校正+双目测距+点云显示)Python​​​​1.项目结构​​​​2.Envir......
  • m基于MATLAB-GUI的GPS数据经纬度高度解析与kalman分析软件设计
    1.算法概述经度纬度和高度来自GPS信号的中的GPGGA的数据。所以提取这三个信息主要是对GPGGA中的数据进行整理。GPGGA的数据格式如下所示:GPGGA是GPS数据输出格式语句,意......
  • m基于MATLAB-GUI的GPS数据经纬度高度解析与kalman分析软件设计
    1.算法概述       经度纬度和高度来自GPS信号的中的GPGGA的数据。所以提取这三个信息主要是对GPGGA中的数据进行整理。GPGGA的数据格式如下所示:       ......
  • C++ Style Guide
    CommonRulesThefollowingstyleguidelineswillbefollowedforbothSliceandC++code:C1.Bracesforcompoundstatementswillbeontheirownlines,atthesa......
  • 【21天学习挑战赛】GoatGui邀你参加机器学习研讨班
    A.活动介绍平台优质专栏作者带队精准学习精选高质量专栏学习资料活动期内限时免费学习此刻开启学习打卡之路,收获知识、赢取豪礼更能结交志同道合的博友B.作者本人简单介......
  • wsl 安装ubuntu gui
    wslwindowslinux子系统安装ubuntu桌面1、下载在windows应用商店搜索ubuntu18,点击安装。  2.初始化下载完成后点击打开,会让你输入用户名、密码、确认密码。输......
  • ngui的betterlist做了哪些性能改进?
    betterlist简介:  betterlist是对System.Collections.Generic.List的改进。  betterlist版本对应该连接:https://github.com/NewbieGameCoder/BetterList  作者的目......
  • 重磅直播|计算深度分割技术的实现与全局效应下的结构光三维重建
    主讲人对该领域的核心和主流技术进行了详解,干货满满,线下的答疑更是赢得了同学们的好评。本期由天津大学仪器科学与技术博士邓吉分享,分享的主题为《计算深度分割技术的实现与......
  • 何为GUI???
    1.GUI是什么–简介GUI的全称为GraphicalUserInterface,图形化界面或图形用户接口,是指采用图形方式显示的计算机操作环境用户接口。与早期计算机使用的命令行界面相比,......
  • 第十二章 GUI界面编程
    实例01:使用wx.StaticText输出Python之禅 使用StaticText类输出中文版的Python之禅。 代码如下:#_*-coding:utf-8_*_importwxclassMyFrame(wx.Frame):d......