多视图三维重建-SFM简介

背景

掌握传统的多视图三维重建基本流程

总体流程

多视图三维重建的Pipieline如下图,总共分为四个步骤:

  1. 拍摄场景多视角的图像
  2. 建立这些图像之间的联系(Data Association)
  3. SFM稀疏重建
  4. MVS稠密重建
    在这里插入图片描述

Data Association

建立图像之间的联系主要包含以下4个步骤:1)特征提取;2)特征匹配;3)基于几何的特征对验证;4)特征建树
1)图像的特征提取。
1.1)全局特征描述子
· Color histogram颜色直方图
在这里插入图片描述
· GIST feature
首先, 在4个尺度和8个方向上设置Gabor滤波器,并对图像做滤波,得到32个滤波后图像。
其次, 对滤波后图像分成44个区域,计算每个区域内像素均值。
最后, 得到4
844=512个区域均值组成的特征向量,即为Gist512特征。
1.2)局部特征描述子
· SIFT & SURF & DSP-SIFT
在这里插入图片描述
· BRIEF
一种二进制描述、不具备旋转不变性,不具备尺度不变性
在这里插入图片描述
· OBR
ORB特征在速度方面相较于SIFT、SURF已经有明显的提升
同时,保持了特征子具有旋转与尺度不变性
2)特征匹配
特征匹配具有两条路线:
2.1)Matching
① 每个图像分别提取全部的特征
② 图像和图像之间搜索最佳匹配特征(最佳匹配也可能是误匹配)
③ 进一步SSD、SAD、NCC等块匹配方式来验证
2.2)Tracking
① 图像1中提取特征A
② 在图像2中,临近的图像位置处,寻找完全相同的特征A
③ 在图像3中再次寻找完全相同的特征A(在连续视频帧中、或两两拍摄场景的位置相差不多时有效)
3)基于几何的特征对验证
基于对极约束:图像中的一个点p1,在另一个图像中的匹配点p2,必然在极线L2上
在这里插入图片描述
由对极几何的约束关系,将特征对中不满足几何约束的误匹配点剔除,如下图中红色线描述的特征对
在这里插入图片描述
关于对极约束的描述,若是一般的场景下,匹配点对P1-P2之间满足如下用基础矩阵描述的关系:
在这里插入图片描述
当物体是一个接近平面的对象时,可利用平面单应性矩阵H(单应性变换 Homography Estimation)来表达两个视图中点的关系
在这里插入图片描述
在这里插入图片描述
根据已有的特征点对, 由于是存在误匹配点对的,因此,通常基于RANSAC来选择若干点对P1-P2求解稳定的F或H,然后利用F或H建立的对极约束,剔除不满足几何约束的特征点对。如下表所示,根据场景类型是通用的、平面类的、全景类的,使用合理的模型进行特征对验证。
在这里插入图片描述
F矩阵是一个3*3的矩阵,秩为2,且没有尺度信息,因此自由度为7,典型的解法是使用归一化8点法来获取求解最佳近似F矩阵。值得注意的是:系数矩阵的正则化和反正则化,其次,SVD得到的解不是最终解,需要进一步最佳估计满足F矩阵特质的解
在这里插入图片描述
基础矩阵F和本质矩阵E之间关系如下
在这里插入图片描述
在内参矩阵初始化后是已知的状态,那么根据F可以估计得到E矩阵,再由E矩阵和旋转矩阵R和平移量t满足的如下关系,来分解得到R,t
在这里插入图片描述
[ t x ] [t_x] [tx]是平移量的反对称矩阵,对于E进行SVD分解,在四对解中,带入实际的点,判断点和相机坐标系正、反方向的关系,获取正解
在这里插入图片描述
对于单应性矩阵H分解得到R,t的过程可以参考之前的博文H分解得到RT
4)特征建树
所有图像的特征描述建立搜索树,以便新的下一帧图像进行特征匹配时,快速的找到对应的特征及所在的图像ID

SFM稀疏重建

SFM(Structure From Motion)
· Structure —— 指场景的几何结构
· Motion —— 指相机从多个角度来获取场景图像的过程
· 输入:多角度同一场景的图像
· 输出:场景内物体的三维坐标、相机的位姿参数

在Data Association中,我们能够获取两两视图之间的R,t相对关系,接下来我们需要获取场景内关键点的三维坐标,以及各个视图的绝对位姿信息。主要有如下三个策略
在这里插入图片描述
在这里插入图片描述

  • 增量式SFM
    Incremental Reconstruction的主要步骤包含:Initialization, Image Registration, Triangulation, Bundle Adjustment, Outlier Filtering, Reconstruction.
    在这里插入图片描述
    1)Initialization.
    1.1) Choose two non-panoramic views ( 𝑡 ≠ 0). 指从所有的多视角中,挑选两个非全景拍摄的视图作为起始位置。
    1.2) Triangulate inlier correspondences. 已知两两视图之间的R,t关系,在初始化内参已知的情况下、特征点对也已经匹配完成,就可以进行两两视图之间的特征点三维重建。

在这里插入图片描述
1.3)Bundle adjustment. 上述过程是在初始化内参情况下完成的,为了进一步获取精确的内、外参数和三维点坐标,需要利用已知的特征点二维坐标,对两两视图系统进行优化。
2)Absolute camera registration.
2.1)Find 2D-3D correspondences. 两两视图完成上述初始化工作后,当第三幅视图进入计算时,首先根据特征匹配,找到图像1和图像3,图像2和图像3的特征匹配点对。
在这里插入图片描述
2.2)Solve Perspective-n-Point problem. 根据Initialization过程中重建得到的三维点,以及图像3中的匹配点,就能建立3D-2D的对应关系,由此利用PnP来求解图像3的绝对位姿。参考之前的博文,PnP的一些总结
在这里插入图片描述

2.3)Triangulate new points. 图像1-图像3,图像2-图像3两两组合,重建新的三维点
在这里插入图片描述
3)Bundle Adjustment. 将三个视图的图像、三维点、相机内外参数再次进行系统优化。
4)Outlier filtering. 剔除重投影误差过大的点;剔除重建点三维坐标无穷大的点
在这里插入图片描述
增量式SFM就是在每一次新的视图进入计算时,都要重复的匹配、重建和捆绑调整,因此,准确性和鲁棒性比较高

  • 全局式SFM
    全局SFM是完成所有的两两视图重建后,再统一进行BA捆绑优化,效率高,但稳定性低
    在这里插入图片描述

  • 分组式SFM
    分组式SFM根据先验将图像进行分组,每一个组内进行增量式SFM或全局式SFM,然后融合所有组的三维信息
    在这里插入图片描述
    将三种策略的SFM的对比如下
    在这里插入图片描述

Challenges

在这里插入图片描述

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

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

相关文章

向开发板上移植ip工具:将ip工具移植到开发板系统中

一. 简介 前面一篇文章对 ip工具源码进行了交叉编译,生成了ip工具。文章如下: 向开发板上移植ip工具:交叉编译 ip工具-CSDN博客 本文对生成的 ip工具进行移植,即移植到开发板系统中,并确定是否可用。 二. 向开发板…

Nagios工具

一 nagios 相关概念 Nagios 是一款开源的免费网络监视工具,能有效监控 Windows、Linux 和 Unix 的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第 一时间通知网站运维人员,在状态恢复后…

顶顶通呼叫中心中间件-声音编码自适应配置方法(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-声音编码自适应配置方法讲解(mod_cti基于FreeSWITCH) 声音编码自适应介绍 声音编码自适应,通常在语音通信和音频处理领域中指的是一种能够根据信号特性和传输环境自动调整编码参数的技术。其目的是在不同的网络状况和音质要求下,…

5-规范设计(下):commit信息风格迥异、难以阅读,如何规范?

我们在做代码开发时,经常需要提交代码,提交代码时需要填写 Commit Message(提交说明),否则就不允许提交。 所以在 Go 项目开发时,一个好的 Commit Message 至关重要: 可以使自己或者其他开发人…

基于SSM的百货中心供应链管理系统设计与实现(论文+源码)_kaic

摘 要 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。本次开发一套百货中心供应链管理系统有管理…

u盘插在电脑上显示要格式化磁盘怎么办

咨询:“U盘插入电脑,提示需要先格式化 才可使用。对于此种情况,在不需要格式化的情况下,是否可以恢复U盘内容?谢谢” 当我们尝试将U盘插入电脑时,有时会遇到一个令人困惑的提示:电脑要求我们格式…

Game Audio Programming

音频编程时游戏开发中最容易忽略,学习资源又是很少的环节。接下来,你将和我探索人耳的工作机制。 what is sound? 我们可以解释电视机是如何通过眼睛传递视觉信息的,但却往往无法对听觉信息做出类似的解释。 对声音的科学研究被称为声学&…

vlan间单臂路由

【项目实践4】 --vlan间单臂路由 一、实验背景 实验的目的是在一个有限的网络环境中实现VLAN间的通信。网络环境包括两个交换机和一个路由器,交换机之间通过Trunk链路相连,路由器则连接到这两个交换机的Trunk端口上。 二、案例分析 在网络工程中&#…

跃然纸上的灵感再现,手绘风格的开源绘图白板工具:Excalidraw

Excalidraw:即绘即思,直观呈现未来流程图!- 精选真开源,释放新价值。 概览 在撰写文章或构建演示案例的过程中,为了增强视觉表现力和信息传达深度,适时融入图表或图形显得至关重要。Excalidraw作为一款基于…

【生活】相机/图像各参数

文章目录 专业模式图片编辑-滤镜实体滤镜软件模拟滤镜 图片编辑-增强曝光亮度对比度饱和度自然饱和度色温色调高光阴影HSL色调分离褪色颗粒锐化晕影清晰度暗角 参考 专业模式 第一个参数WB是白平衡,调节色彩的。 第二个是对焦F,近距离拍摄物体&#xf…

酷体体育科技加入飞桨技术伙伴计划,共同打造“AI随身教练”体育分析新模式...

近日,陕西酷体体育科技有限公司正式加入飞桨技术伙伴计划,双方将共同努力在AI体育技术分析领域,创新打造“AI体育”新模式,助力体育训练、康复、人才选拔数智化转型。通过大模型技术赋能体育,持续挖掘AI技术在体育领域…

unbuntu mysql8.0新建用户及开启远程连接

MySQL更新到8.0以上版本后,在创建连接远程的用户的时候和之前5.x的版本有了很大的不同,不能使用原来同时创建用户和授权的命令。 以下是记录的MySQL8.0创建用户并授权的命令: 查看用户表: user mysql; select host,user,authen…

GT收发器第四篇_QPLL和CPLL工作原理

文章目录 前言一、CPLL工作原理二、QPLL工作原理 前言 每个channel的时钟结构如图: Transceiver内部时钟来源可以是QPLL也可以是自己的CPLL。其内部TX 和 RX 时钟分频器可以单独从 QPLL 或 CPLL 中选择时钟,允许 TX和 RX 数据通道使用不同的参考时钟输入…

Unity-通过AB包使用SpriteAtlas图集(基于unity2018)

项目遇到了一个性能问题,需要优化UI。其中就涉及UI的合批问题,其中自然而然就会关联到图集的概念。旧版图集,Legacy Atlas,还没有太研究。今天主要看一下SpriteAtlas怎么使用的。 因为我们项目资源工程和Runtime是分离的&#xf…

python实战之进阶篇(一)

定义类 1. 构造方法 2. 实例方法 3. 类方法 类似于Java中的静态方法, 使用方式: 类名.类方法 4. 私有变量 5. 私有方法 6. 使用属性set和get

【二叉树】Leetcode 104. 二叉树的最大深度【简单】

二叉树的最大深度 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例1 输入:root [3,9,20,null,null,15,7] 输出:3 解题思路 二叉树的最大深度可以通过递归方式来求解…

RockChip Android8.1 Settings

一:Settings一级菜单 1、AndroidManifest.xml 每个APP对应都有一个AndroidManifest.xml,从该文件入手分析最为合适。 packages/apps/Settings/AndroidManifest.xml 根据<category android:name="android.intent.category.LAUNCHER" />可找到当前当前APP a…

Java 扫描某包下所有类的注解并获得注解值

背景 &#xff1a; 需求 需要获取某个包下的所有的注解 并不是全部项目的 所以 只用针对某个包 进行扫描 获取注解 数据就行 百度了一圈 spring boot 没有自带的 获取注解集合的方法 在看 php 中 hyperf 框架 看到了 这个方法 就是因为 我需求是 php 和java 合体 微服务开发 …

Java复习第十三天学习笔记(HTML),附有道云笔记链接

【有道云笔记】十三 3.29 HTML https://note.youdao.com/s/Ru3zoNqM 一、基本标签 HTML:超文本标记语言 定义页面结构 CSS&#xff1a;层叠样式表 页面显示的样式、排版 BootStrap JS: JavaScript 界面交互(动态交互、逻辑) JQuery <!DOCTYPE html> <html> &l…

C++Template<>模版的介绍及深度解析

一、泛型编程 1.什么是泛型编程 泛型编程&#xff1a;是一种程序设计方法&#xff0c;编写于类型无关的通用代码&#xff0c;实现代码复用。而模版就是泛型编程的基础和核心。 二、template<>模版 1.template模版介绍 模版&#xff0c;顾名思义就是一个模具&#xff0…