Colmap三维重建详解与使用方法

图片捕获过程,请遵循以下指导方针以获得最佳重建结果:

1 捕捉具有良好纹理的图像。避免使用完全没有质感的图片(例如,白色的墙或空桌子)。如果场景本身没有足够的纹理,你可以放置额外的背景对象,如海报等。

2 在相似的照明条件下捕获图像。避免高动态范围的场景(例如,背对太阳有阴影的照片或透过门/窗拍摄的照片)。避免在有光泽的表面上拍摄。

3 捕捉高视觉重叠的图像。确保每个物体至少在3张图片中看到,重叠图片越多越好。

4 围绕同一个物体进行不同的角度捕捉图像,不要只旋转相机从同一位置拍摄图像。同时,尽量从一个相对相似的角度拍摄足够多的图片。注意,更多的图像不一定更好,可能会导致缓慢的重建过程。如果你使用视频作为输入,考虑下采样帧率。

概述

基于图像的三维重建传统上首先使用运动结构(Structure-from-Motion)恢复场景的稀疏表示和输入图像的姿态。这个输出然后作为多视图立体几何(Multi-View Stereo的输入,以恢复场景的密集表示。

SFM是通过一系列有重叠的且不同视角的图片重建出物体的三维结构(稀疏点云),并且输出相机的内外参数,内参指的是将真实空间的三维点通过内参矩阵转换为相机图片上的二维点,外参包含相机在切换不同视角时的平移和旋转信息。

通常情况下,运动结构系统将这一过程分为三个阶段:

1 特征检测与提取

2 特征匹配和几何验证

3 结构与运动重建

多视图立体几何(MVS)采用SfM的输出来计算图像中每个像素的深度和法向信息。在3D点云中融合多幅图像的深度图和法向图,然后生成场景的密集点云。利用融合点云的深度和法向信息,泊松曲面(Poisson),三角剖分(delaunay)重建等算法可以恢复场景的三维曲面几何。

实施:

COLMAP创建一个新项目必须包含存储数据库的位置以及包含输入图像的文件夹。可以将整个项目设置保存到配置文件中,项目配置文件中保存存储数据库和图像文件夹的绝对路径信息。整个项目的目录结构如下:

第一步:特征检测/提取

特征检测/提取在图像中找到稀疏的特征点,并使用数值描述符(128维向量)描述特征点。主要使用SIFT特征提取方法。

jpge图像的头部保存了EXIF信息 里面包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及GPS全球定位系统数据、缩略图等,COLMAP可以从嵌入式EXIF信息中自动提取焦距信息。

提取到的特征信息如下:

NUM_FEATURES代表一张图像提取到多少个特征点,x,y代表特征点的坐标, scale代表尺度(即相机距离物体远近的比例),ORIENTATION代表特征点的梯度方向, D_1…D_128代表特征描述符的128维向量,所有提取的数据都将存储在数据库文件中。

其中X, Y, SCALE, ORIENTATION为浮点数,D_1…D_128为0…255范围内的值。

例如,一张图片有4个特征:

第二步:特征匹配和几何验证。

特征匹配首先匹配图像对,下面列出图像匹配的几种策略。其次再将匹配后的图像上的特征点进行匹配,利用特征点的128维描述符向量的相似性度量进行特征点匹配。

图像对匹配算法:

穷尽匹配(Exhaustive Matching):如果数据集中的图像数量相对较低(最多数百个),那么这种匹配模式应该足够快,并能获得最佳的重构结果。在这里,每个图像都与其他图像进行匹配,而块大小决定同时从磁盘加载到内存中的图像数量。

序列匹配(Sequential Matching):由一个摄像机。在这种情况下,连续的帧具有视觉重叠,不需要用尽全力地匹配所有的图像对。而是将连续捕获的图像相互匹配。

空间匹配(Spatial Matching):这种匹配模式将每个图像与它的空间近邻进行匹配。COLMAP还会从EXIF中提取GPS信息,并使用它进行空间最近邻居搜索。

传递性匹配(Transitive Matching):这种匹配模式利用已有特征匹配的传递关系,生成更完整的匹配图。如果一个图像A匹配到一个图像B,而B匹配到C,那么这个匹配器会尝试直接将A匹配到C。

建立图像对之后,在参考图像中的一个特征点,如何从目标图像中的所有特征点中找出与之相对应的特征点。如果使用暴力计算法,计算每一对特征点的相似距离,如果特征的描述符向量的维度和特征点的数量较多的话,暴力法是不可取的。需要使用KD树算法建立一个搜索树,基于KD树最邻近查找算法,方便特征点进行快速匹配。

由于sift提取的特征点和描述子在匹配过程中可能会存在误匹配的情况,所以需要将错误的匹配点对剔除。几何校验是筛除一些误匹配的特征点。几何校验是指利用对极几何进行约束

对极几何:空间中的一点与两张图片相机的光心,三者围成一个极平面,极平面与两张图片相交形成两条极线,对极几何约束是指,空间点X在摄像机1的成像平面中的像素点x,与之相匹配的摄像机2的成像平面中的像素点 x' 一定落在极线上。

公式约束为: x'的转置 × F × x =0 ;F为基础矩阵,F可以通过8对匹配的特征点联立方程组求得 分解F矩阵可以求得相机的内参矩阵。 

几何约束方法:随机选取图像对的8对匹配点,使用归一化八点算法求解基础矩阵F,然后统计满足对极几何关系的点对数量,在设定的次数内重复上述步骤,选取满足条件的点对数量最多的匹配为精化匹配结果。

第三步:稀疏重构

首先初始化主要是指选取两张匹配的图像,设定其中一张图像的位姿为单位阵,然后通过它们之间的匹配点对估计出E矩阵,将E矩阵分解获得另一张图像的位姿。在估计出两张图像的位姿后,就可以通过三角化(triangulation)来生成三维点。

然后进行增量式重建:

1 获取下一最佳匹配图像(匹配点对数量最多)

2 利用匹配的特征点估计出E矩阵(本质矩阵),估计图像位姿

3 进行三角化生成三维空间点,三角化是利用两个匹配的图像坐标图像位姿以及相机的内参矩阵,求得匹配点的三维点坐标。

4 对所有已生成的三维点和已估计出的位姿,使用ceres库进行ba(bundle adjustment)优化。通过最小化重投影误差实现剔除误差过大的点

5 最后对所有数据进行ba优化 即全局优化

第四步:稠密重建

在重建场景的稀疏表示和输入图像的相机姿势后,MVS现在可以恢复更密集的场景几何。COLMAP有一个集成的密集重建管道,可以为所有的配准图像生成深度和法向图,将深度和法向图融合到一个将稀疏点云融合成密集点云,最后使用泊松(Poisson)或三角剖分(Delaunay)重建方法从融合的点云中估计出一个密集曲面。

稠密重建分为:

1 是还原图像,去除图像的畸变

2 是计算深度图和法向图

3 将深度和法向图融合成到点云里

4 点云网格划分形成曲面

colmap命令行执行过程

初始数据为图像文件和数据库文件

图像文件包含128张jpg图像

1 特征提取 利用特征提取算法提取每一张图片的特征点并获得特征点的描述符

2 穷尽匹配 匹配每一张图片与其他所有图片的特征点,并进行几何校验。

3 稀疏重建

首先使用两张图片,将第一张图片的位姿记为单位阵,通过匹配的特征点利用本质矩阵求得另一张图像位姿,通过估计基础矩阵得到相机的内参矩阵,利用两个匹配的图像坐标和图像位姿以及相机的内参矩阵,进行三角化生成三维空间点。接着使用ba(bundle adjustment)优化生成的三维点,通过最小化重投影误差实现剔除误差过大的点。然后每增加一张图片,重复进行估计图像位姿、三角化、ba优化、全局ba优化等步骤。直至添加完所有图片

稀疏重建效果

4 稠密重建

(1) 图像去畸变,还原未失真的图片

(2)计算深度和法向图

立体匹配后生成的深度图

立体匹配后生成的法向图

(3)在稀疏点云中融合多幅图像的深度图和法向图,然后生成场景的密集点云。

稠密点云效果如下:

(4)使用三角剖分算法进行曲面重建,重建效果如下:

参考网址:

https://www.ctyun.cn/developer/article/416012493463621

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/163822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

@Value和@Scheduled注解简介

(1)SpringBoot读取配置文件,使用Value注解获取数据,中文乱码问题解决办法 new String(xxx.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8) (2)Scheduled注解 例如,Scheduled(…

前端处理返回数据为数组对象且对象嵌套数组并重名的数据,合并名称并叠加数据

前端处理返回数据为数组对象且对象嵌套数组并重名的数据,合并名称并叠加数据 var newList[]; var table{}; var dataObj{}; var finalList[]; var tableData[{brName:营业部,dateStr:2023-11-23,tacheArr:[{dealCnt:20,tacheName:奔驰}]},{brName:营业部,dateStr:2…

TypeError: Cannot read property ‘sendpost‘ of undefined

箭头函数指向问题,定义let that this 解决

大宽带服务器有什么优势?

大宽带服务器有什么优势? 什么是大带宽服务器?从属性上看,大宽带可以分为G口大带宽、万兆大带宽等,从线路上看,可以分为电信、移动、联通等,从地域属性看,可以分为国内宽带、国际宽带。大宽带是…

如何活跃谷歌开发者账号,增加账号的权重和真实性,从而延长应用在线时长?

众所周知,每个谷歌开发者账号都有一个初始权重,而权重的高低会影响到账号的稳定性和真实性,从而影响应用上架的成功率和应用在线时长。 关于提高谷歌账号权重、活跃度及稳定性,以下的方法和建议可供参考: 1、社区活动…

外设——CAN总线收发器TJA1043

目录 1. 引脚 2. 工作模式 3. 5种模式和7种状态标识的理解和使用 1. 引脚 2. 工作模式 该收发器相较于普通收发器,引脚多了几个,就是功能等多了。TJA1043支持五种操作模式,就是通过控制引脚STB_N和EN来原则。五种模式: 正常模式…

OpenCV滑块验证码图像缺口位置识别

OpenCV图像缺口位置识别 1、背景2、图像缺口位置识别原理3、图像缺口位置识别实现4、滑块验证码HTTP图像需要保存到本地吗1、背景 在使用Selenium完成自动化爬虫时,许多网站为了防止机器人爬取数据会使用验证码(例如滑块验证码)。通过Selenium动作操作,爬虫可以模拟用户输入…

前端工程、静态代码、Html页面 打包成nginx 的 docker镜像

1. 创建一个 mynginx的目录 2. 将前端代码文件夹(比如叫 front )复制到 mynginx 目录下 3. 在mynginx 目录下创建一个名为Dockerfile 的文件(文件名不要改),文件内容如下: # 使用官方的 Nginx 镜像作为基…

神经网络训练技巧

1. 逐渐增加训练数据规模,比如先在小数据集上训练,之后再增大数据集继续训练。

网站权重是什么意思

网站权重是指搜索引擎对网站的评估指标,用以衡量网站的重要性 搜索引擎会根据网站权重来决定网站在搜索结果中的排名和位置,从而决定其在搜索中的可见度 网站权重是多方面因素的综合评估,其中主要包括网站内容质量、外部链接量及质量、网站…

JS逆向之wasm逆向(二)

本文仅供技术交流和技术学习 不做其他用途 接着上一篇继续讲: 上篇地址: JS逆向之wasm逆向(二进制) 网址: aHR0cHM6Ly93d3cuN3E2Y3lqLmNvbTo5MDAxL3JlZ2lzdGVyNDY5Njg/aV9jb2RlPTQ0Mjc5OTU1 这个网站我们后面可以继续讲他的debugger 和滑块…

[点云分割] Clustering of Pointclouds into Supervoxels

介绍 “Clustering of Pointclouds into Supervoxels” 是一种点云数据聚类的方法,用于将点云数据分割成具有相似特征的超体素(supervoxel)。 超体素是一种在点云数据中表示连续区域的方法,类似于像素在图像中表示连续区域。超体…

C 语言 http通信

1,C语言本身不包含直接支持HTTP协议的功能,但你可以使用第三方库来实现HTTP客户端或服务器。 以下是一些常用的C语言HTTP库: libcurl:一个支持多种协议的开源库,包括HTTP、HTTPS、FTP等。它提供了一组简单的API&…

因果发现31种高效经典方案汇总,附配套算法和代码

因果发现(Causal Discovery)是一个复杂的过程,其目标是从大量的数据中确定变量之间的因果关系。这个过程通常涉及到的是如何从纷繁复杂的数据中发现其中隐含的因果关系。有时,研究者可以通过随机实验进行干预来发现因果关系&#…

解决PDF预览时,电子签章、日期等不显示问题

文章目录 问题描述问题排查问题解决 问题描述 在预览PDF时,部分签章或控件没有显示。如下图: 正确应该要这样: 问题排查 根据网上搜索,排查,我先看看,pdf.worker.js 里的这三行代码,是否已经注…

JVM 类加载

① 类加载过程 从上面的图片我们可以看出整个 JVM 执行的流程中,和程序员关系最密切的就是类加载的过程了,所以 接下来我们来看下类加载的执行流程。 对于一个类来说,它的生命周期是这样的: 其中前 5 步是固定的顺序并且也是类加载…

Android : Spinner(列表选项框) + BaseAdapter -简单应用

​​容器与适配器:​​​​​ http://t.csdnimg.cn/ZfAJ7 示例图: 实体类 Demo.java package com.example.mygridviewadapter.entity;public class Demo {private String text;private int img;public Demo(String text, int img) {this.text…

虚拟机解决Linux中Uos和Deepin登录密码忘记的问题 标题Linux Uos Deepin

Uos是切换网络模式解决的(之前有绑定过用户) 因为之前用的是桥接模式登录的时候一直无法联网,改为Nat模式后可以和电脑共用一个网络ip,可以重置密码了,以此解决 ps: 特别说明rw single init/bin/bash 方法和systemd.debug-shell1方法已经失效,不要再做无谓的尝试了Deepin23社区…

Vue + Element UI 实现复制当前行数据功能(复制到新增页面组件值不能更新等问题解决)

1、需求 使用Vue Element UI 实现在列表的操作栏新增一个复制按钮&#xff0c;复制当前行的数据可以打开新增弹窗后亦可以跳转到新增页面&#xff0c;本文实现为跳转到新增页面。 2、实现 1&#xff09;列表页 index.vue <el-table> <!-- 其他列 --> <el-t…

JOSEF 漏电继电器 LLJ-100FG φ45 50-500mA 卡轨安装

系列型号&#xff1a; LLJ-10F(S)漏电继电器LLJ-15F(S)漏电继电器LLJ-16F(S)漏电继电器 LLJ-25F(S)漏电继电器LLJ-30F(S)漏电继电器LLJ-32F(S)漏电继电器 LLJ-60F(S)漏电继电器LLJ-63F(S)漏电继电器LLJ-80F(S)漏电继电器 LLJ-100F(S)漏电继电器LLJ-120F(S)漏电继电器LLJ-125F(S…