

多视图几何三维重建实战系列之COLMAP
source link: https://mp.weixin.qq.com/s?__biz=MzU1MjY4MTA1MQ%3D%3D&mid=2247511777&idx=2&sn=73ab994649ba559d9628d1fc4dcfda5a&chksm=fbfc85d5cc8b0cc3d89f4ce189cc0cad185fcd7519193e8951833884a2c26b3f1eadfc84d098
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

因为三维重建原理复杂,且各种软件或代码之间接口变化多样,无法一言蔽之,因此作者打算分为四篇文章介绍四种经典的三维重建技术Pipeline。分别为:1)传统方法(COLMAP)2)深度学习方法(COLMAP + MVSNet)3)传统方法(COLMAP + OpenMVS)4)深度学习方法(COLMAP + R-MVSNet)多视图几何三维重建实战系列之COLMAP1.概述作为计算机视觉的核心问题,基于多视图立体(以下简称为”MVS”)的三维重建技术已经广泛应用于3D打印、离线地图重建和文物修复等行业应用中。本文先整体介绍三维重建流程(第二节),在介绍传统方法COLMAP的实际操作流程(第三节),最后根据输出结果对COLMAP的重建效果进行分析(第四节)。(注意,这个系列选用的三维重建方式均为基于深度图融合的方法。)2.三维重建流程基于MVS的三维重建技术流程包括以下步骤:数据采集,稀疏重建,深度图估计和稠密重建(图1)。
对于数据采集。多视角数据来源广泛,我们主要使用的是开源数据集和自采数据进行试验。对于稀疏重建。我们主要利用SfM进行稀疏重建。SfM,(Structure From Motion,从运动中恢复结构),是一种从一组不同视角下拍摄的无序或有序影像中,同时恢复场景三维结构和相机姿态的技术。本文主要以增量式SfM为主,目的是得到场景中的相机姿态和表示场景结构的稀疏点云(图2)。增量式SfM选择无序影像进行特征匹配,并进行几何纠正、三角测量恢复稀疏点云结构,通过已有点云重新估计相对姿态,再进行局部和全局的BA优化。之后逐步向已有的结构中增加视角或影像,进行三角测量和姿态估计,再进行BA优化修正结构数据,最后输出全部的相机参数和稀疏三维点云。
对于深度图估计,目的是恢复参考影像的深度信息。基于MVS的深度图估计,主流传统方法的流程(图3)是:首先,对一个参考影像,筛选用于和参考影像配对计算视差的原始影像(以下,被选中的影像被称为代表。整个代表集合用候选集表示)。其次,参考视差计算的经典框架,计算参考影像上第个特征对应的匹配代价,在通过代价聚合,计算深度值,最后进行深度过滤,优化初始深度图。
对于稠密重建,目的是恢复场景的稠密点云。利用深度图配准原理融合深度图,恢复稠密点云。3.COLMAP实际操作以传统方法COLMAP为例,介绍的三维重建的实际操作,行文结构按照数据采集、稀疏重建、深度图估计、稠密重建等四个步骤,希望读者可以参考本节,利用开源数据集或者自采数据,跑通基于传统方法(COLMAP)的三维重建技术。3.1数据集3.1.1数据采集1)DTU数据集DTU数据集[1]是针对于MVS而专门拍摄并处理的室内数据集(图4)。利用一个搭载可调节亮度灯的工业机器臂对一个物体进行多视角的拍摄,每个物体所拍的视角都经过严格控制,所以可以获取每个视角的相机内、外参数。
整个数据集由124个不同的物体或场景组成,每个物体共拍摄49个视角,每个视角共有7中不同的亮度,因此,每个物体或场景文件夹内部共有343个图片。每张影像的分辨率为1600×1200。(该数据集还包含带有深度图真值的训练影像集,我们将在之后文章中介绍如何利用该数据集训练神经网络。)2)Tanks and Temples数据集不同于DTU数据集,Tanks and Temples数据集[2]采集的是室外场景。这个数据集主要用于验证我们使用的网型和开源软件泛化能力,验证其是否对光照变化大、存在动态目标的场景仍具备较为精确地重建能力(图5)。
3)开源数据集下载链接:(感谢香港科技大学 姚遥开源的数据集链接)我们需要下载的是用于测试的数据集,所以打开百度云链接时,点击 “mvsnet”,再点击“preprocessed_inputs”,下载其中“dtu.zip”和“tankandtemples.zip”即可(图6)。
百度云盘链接:https://pan.baidu.com/s/1Wb9E6BWCJu4wZfwxm_t4TQ#list/path=%2F密码:s2v24) 自采数据采集要求经过笔者多次实验,自采数据主要有以下几点要求:
- 尽量使用单反相机或专业数码相机进行数据采集,如果要用手机进行采集,请使用单摄像头的手机进行数据采集。
- 尽量选择纹理丰富的外界环境进行数据采集,避免玻璃围墙、瓷砖和打蜡地板等强反光材料环境
- 尽量选择光照明亮,且光照条件变化不剧烈的环境,最好选择室内环境。如室内客厅,开启客厅大灯进行灯光补偿。
- 尽量围绕重建物体或环境采集较多的影像,且在采集过程中控制快门速度,避免模糊。
3.2 COLMAP
1)软件介绍COLMAP是一款结合SfM(Structure-from-Motion)和MVS(Multi-View Stereo)的三维重建Pipeline,编译成功后我们能获取带有图形界面的软件(Graphic Interface)和不需要图形界面的二进制可执行文件(Command-Line Interface),可进行稀疏重建和稠密重建。源码链接及教程为:https://github.com/colmap/colmap。2)代码编译代码的编译和使用我们就直接使用别人造好的轮子,大家可以自行百度或谷歌搜索相关编译教程,本文中引用一些笔者认为具有参考意义的教程。如果大家需要,笔者后期再重新整理相关教程分享给大家。
- 官方Github:https://github.com/colmap/colmap
- COLMAP的安装和简单使用:
我们将使用COLMAP中的增量式SfM技术进行稀疏重建。大家也可以使用OpenMVG增强对SfM的理解。1)准备工作首先,我们需要准备几个目录,第一个是包含原始图像的目录,第二个则是COLMAP工程的目录,各位读者可以自行管理自己的目录为了举例,以Scan1 表示COLMAP工程的目录,命名为当前场景的代号,内部包含该重建场景的原始图片,文件夹名称为images.在终端输入一下命令,打开COLMAP的图形界面(图8)。Linux : ~$ colmap gui
之后,新建项目:点击”file”,再点击“New Project”,弹出“project”窗口,点击“New”新建工程文件,将该工程文件保存在Scan1目录下,并点击“Select”选择场景原始图片所在的目录。最后点击“save”保存。
保存结束后,数据库将会显示.db文件,内部保存原始图片地址、之后特征提取匹配等数据(图9)。2)特征提取按照稀疏重建的步骤,需要我们进行对应点搜索,可以理解为全局的特征匹配。首先进行特征提取,点击“processing”中的“Feature Extraction”, 弹出选择窗体,这里面,只需要将相机模型选择为“Pinhole”模型即可,其他参数默认可以不变。读者感兴趣的话,可以自行修正。一般我们采集的影像是携带有EXIF文件的,所以这里,需要选上“Parameters from EXIF”,意思是从EXIF中提取相机内参数。之后点击“Extract”即可进行特征提取(图10)。
结束后,就可以获得目标场景稀疏点云和各个视角的相机姿态(图14)。
3.4深度图估计与优化
1)深度估计与优化原理在COLMAP中,匹配代价构造、累计、估计和优化是封装在一起的,利用GEM模型进行求解。与视差估计框架一样,深度估计框架也分为如下四个步骤:匹配代价构造,代价累积,深度估计,深度图优化[5]。
先说操作,同样在该界面下,点击“Fusion”即可进行基于深度图融合的稠密重建。而该原理就是对估计出来的深度图,首先通过配准进行深度图融合,然后通过式3),按照投影方法进行点云恢复。
从匹配矩阵中看出数据集之间相机运动规律,若相机围绕物体呈圆周采样,匹配矩阵将有条带出现(图19-b),且若途中各个条带的平行关系越紧致,则说明相机的运动控制越严格。例如Scan10中的上三角区中有平行排布的红色线条(图19-a),这是因为该数据集[1]在采样过程相机运动间隔受到严格规定(图20-a),而对于Tank and Tample[2]数据集,匹配矩阵的平行关系不紧致(图19-b),说明相机运动未受到严格限制(图20-b),只是简单的圆周运动。通过对比发现,Scan10 可以通过较少的视图得到相同完整度和精度的重建结果,说明采集相片集过程中的前期控制对重见效果有影响。
Recommend
-
16
系列篇|三维重建之纯格雷码三维重建 ...
-
10
多视图几何三维重建实战系列- Cascade-MVSNet Original...
-
21
多视图几何三维重建实战系列之R-MVSNet ...
-
43
多视图几何三维重建实战系列之MVSNet Original...
-
10
系列篇|结构光三维重建——相移法基本原理 Original...
-
12
系列篇|结构光三维重建基本原理 Original...
-
10
本文是J. L. Sconberger等人于2016年发表在CVPR的文章COLMAP。本文针对增量式SFM中三角化/BA等步骤进行了改进,能够比较明显地提升SFM的精确率/鲁棒性以及重建完整性。
-
6
基于多视图几何方式的三维重建 ...
-
14
CVPR 2021 | pixelNeRF:一种基于NeRF的多视图三维重建网络 ...
-
2
基于深度学习的三维重建MVSNet系列 [论文+源码+应用+科研] 小...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK