热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

主流SFM处理方式的梳理

SFM是什么?SFM即Structure-from-motion运动结构重建,从大批量图像数据出发,通过相关处理,获取目标

SFM是什么?

SFM即Structure-from-motion运动结构重建,从大批量图像数据出发,通过相关处理,获取目标图像集3D几何(结构)和摄像机姿态(运动)信息,主要处理流程可分为如下几步:特征提取;特征匹配;姿态估计;束调整。具体处理流程参见下图:
sfm处理流程图
本文主要聚焦于对不同SFM处理方式的梳理总结,对SFM原理部分,可参考该博主的文章:SFM原理简介
总体来说,现有的主流SFM方式可分为如下四类:
全局式SFM
增量式SFM
分层式SFM
混合式SFM
其中后两种处理方式,是近些年来随着三维重建数据量的不断攀升,而逐渐兴起的针对大规模数据处理而诞生的新的处理方式。


全局式SFM

大多数的全局SFM处理可分为如下两步进行。首先,针对场景中的N个视图计算各视图的全局旋转,即旋转平均;然后在该基础上计算各视图的平移,以及结构,即平移平均。而将这两个步骤分开的好处是,即使对于小基线,也可以相当精确地估计相对双视图旋转,而相对平移则不是这样。这些方法考虑了整个极线图,其节点表示视图,并且其中边链接具有足够一致匹配点的视图。图的所有循环都产生多视图约束,也就是说,循环的连续节点中的局部相对运动应该在循环结束时被同一连接。实施这些约束极大地降低了即将介绍的增量方法中所会出现漂移的风险,同时,由于其只需要对数据进行一次全局的BA,因而其对于时间效率的提升也是十分明显的。
但全局式SFM的缺点也是很明显的,由于其是一次性的对所有数据进行处理,因而,其对于噪声特别敏感,如果要使用该处理方式,就必须对数据进行仔细的“过滤”。以去除错误极线信息的影响。
在这里插入图片描述

参考文献:
A Global Linear Method for Camera Pose Registration
Global Structure-from-Motion by Similarity Averaging
Linear Global Translation Estimation from Feature Tracks
Shapefit and Shapekick for Robust, Scalable Structure from Motion
Optimizing the Viewing Graph for Structure-from-Motion
Robust Camera Location Estimation by Convex Programming
Robust Global Translations with 1DSfM
Very Large-Scale Global SfM by Distributed Motion Averagin


增量式SFM

增量式SFM基于两个或三个视图的最小重构开始,然后逐渐添加新的视图
,每次添加之后均需要对场景数据进行一次束调整。目前最广泛使用的增量式sfm是ColMap。它执行多个束调整(BA)以使局部结构和运动刚性化。因此,这是一个相当缓慢的过程。由于在处理过程中,每添加一张影像就需要对数据做一次束调整,因而其时间规模是非常恐怖的,但也正由于这一点的存在,使得该种处理方式非常的稳健。
然而,已知增量方法由于误差的累积和难以处理相机轨迹的循环闭合而存在很致命的漂移危险。同时,增量式SFM重建的质量很大程度上取决于初始图像对的选择和后续图像添加的顺序。
在这里插入图片描述

参考文献:
Adaptive Structure from Motion with a contrario model estimation
Batched Incremental Structure-from-Motion
Modeling the World from Internet Photo Collections
Photo Tourism- Exploring Photo Collections in 3D
Progressive Large-Scale Structure-from-Motion with Orthogonal MSTs
Structure-from-Motion Revisited
Towards linear-time incremental structure from motion


分层式SFM

随着三维处理数据量呈指数式的爆发,对于动辄几万、几十万张的数据量,传统的全局式SFM已经很难满足人们对于数据处理要求,我们迫切的需要寻求一种可以快速进行大批量数据处理的稀疏重建方法,因而分层式SFM应运而生。
该方法的主要思想很简单,就是对传统增量式SFM的改进,针对传统增量式SFM处理速度同数据量呈线性相关的特点,提出了针对大规模数据集分而治之的处理思想,即首先对原数据集进行划分,获得N个相互关联的子图,然后对个子图进行并行的增量式SFM处理(Local SFM),处理完毕后,对各子图进行合并,获取当前数据的最终处理结果。
该方法的优点是显而易见的,即提升了大规模数据的处理效率,但,另一方面,该方法也存在很多缺点,首当其冲的便是不够稳健,目前大多数的算法都是在子图重建成功的假设上进行后续处理的,没有考虑,一旦处理失败,应该如何处理,同时,必须仔细的考虑图割算法的选择,因为此方法,直接关系着后续局部SFM的重建成功与否;最后子图合并过程中,锚节点的选择也是十分重要的,如果选择错误,很容易出现漂移危险。
参考文献:
Efficient large-scale structure from motion using graph partitioning
Improving the efficiency of hierarchical structure-and-motion.
Structure-and-motion pipeline on a hierarchical cluster tree.
Hierarchical structure-and-motion recovery from uncalibrated images.


混合式SFM

混合式SFM,顾名思义,该处理方式结合了上述处理方式的优点所提出的,该方法处理流程大致如下:
实现进行子图分割,获得N组相互关联的子图,之后对各子图分别采用增量式或者全局式sfm处理,获取其全局旋转信息,然后不进行BA,直接进行后续步骤,使用全局式或者增量式SFM对上一步所获得信息进行处理,获取影像的全局平移信息。
坦率地讲,本人对该方法的研究很浅,因而,对其优缺点的表述也不是十分深刻,因而略过。
参考文献:
HSfM Hybrid Structure-from-Motion.
Parallel Structure from Motion from Local Increment to Global Averaging
Multistage SFM: A Coarse-to-Fine Approach for 3D Reconstructio

欢迎补充!


推荐阅读
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 如何使用Python从工程图图像中提取底部的方法?
    本文介绍了使用Python从工程图图像中提取底部的方法。首先将输入图片转换为灰度图像,并进行高斯模糊和阈值处理。然后通过填充潜在的轮廓以及使用轮廓逼近和矩形核进行过滤,去除非矩形轮廓。最后通过查找轮廓并使用轮廓近似、宽高比和轮廓区域进行过滤,隔离所需的底部轮廓,并使用Numpy切片提取底部模板部分。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • Parity game(poj1733)题解及思路分析
    本文是对题目"Parity game(poj1733)"的解题思路进行分析。题目要求判断每次给出的区间内1的个数是否和之前的询问相冲突,如果冲突则结束。本文首先介绍了离线算法的思路,然后详细解释了带权并查集的基本操作。同时,本文还对异或运算进行了学习,并给出了具体的操作步骤。最后,本文给出了完整的代码实现,并进行了测试。 ... [详细]
  • 求解连通树的最小长度及优化
    本文介绍了求解连通树的最小长度的方法,并通过四边形不等式进行了优化。具体方法为使用状态转移方程求解树的最小长度,并通过四边形不等式进行优化。 ... [详细]
  • 判断编码是否可立即解码的程序及电话号码一致性判断程序
    本文介绍了两个编程题目,一个是判断编码是否可立即解码的程序,另一个是判断电话号码一致性的程序。对于第一个题目,给出一组二进制编码,判断是否存在一个编码是另一个编码的前缀,如果不存在则称为可立即解码的编码。对于第二个题目,给出一些电话号码,判断是否存在一个号码是另一个号码的前缀,如果不存在则说明这些号码是一致的。两个题目的解法类似,都使用了树的数据结构来实现。 ... [详细]
  • 文章目录题目:二叉搜索树中的两个节点被错误地交换。基本思想1:中序遍历题目:二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了源码分析--ConcurrentHashMap与HashTable(JDK1.8)相关的知识,希望对你有一定的参考价值。  Concu ... [详细]
  • Opencv提供了几种分类器,例程里通过字符识别来进行说明的1、支持向量机(SVM):给定训练样本,支持向量机建立一个超平面作为决策平面,使得正例和反例之间的隔离边缘被最大化。函数原型:训练原型cv ... [详细]
author-avatar
Eminem被注册了
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有