主流SFM处理方式的梳理

article/2025/10/15 18:39:59

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

欢迎补充!


http://chatgpt.dhexx.cn/article/CVwqCcTY.shtml

相关文章

SFM过程(一)

以图像为基础的三维重建过程SFM基本如下图所示&#xff1a; 以SfM-Toy-Library代码为例&#xff0c;如下&#xff1a; ErrorCode SfM::runSfM() {if (mImages.size() < 0) {cerr << "No images to work on." << endl;return ErrorCode::ERROR;}//in…

SfM算法

参考 https://blog.csdn.net/kokerf/article/details/72630863 https://blog.csdn.net/qq_42399848/article/details/89348740 https://blog.csdn.net/lpj822/article/details/82716971 《基于无序图像集的运动恢复结构研究与实现》 Structure from Motion可以认为一个相机在运…

SFM算法流程

SFM算法流程 Figure1:Block diagram of structure from motion 1. 算法简介 SFM算法是一种基于各种收集到的无序图片进行三维重建的离线算法。在进行核心的算法structure-from-motion之前需要一些准备工作&#xff0c;挑选出合适的图片。 首先从图片中提取焦距信息(之后初始化…

Sfm方法过程及原理

1. 算法简介 SFM算法是一种基于各种收集到的无序图片进行三维重建的离线算法。在进行核心的算法structure-from-motion之前需要一些准备工作&#xff0c;挑选出合适的图片。 先从图片中提取焦距信息(之后初始化BA( Bundle adjust)需要)&#xff0c;然后利用SIFT等特征提取算法去…

SFM原理简介

Structure From Motion SFM简介 通过相机的移动来确定目标的空间和几何关系&#xff0c;是三维重建的一种常见方法。 它与Kinect这种3D摄像头最大的不同在于&#xff0c;它只需要普通的RGB摄像头即可&#xff0c;因此成本更低廉&#xff0c;且受环境约束较小&#xff0c; 在室…

SFM(Structure from Motion)一点总结

SFM&#xff08;Structure from Motion&#xff09;一点总结 运动结构恢复(Structure from motion)数十年来一直是计算机视觉领域的热门研究方向之一&#xff0c;实现了众多实际应用&#xff0c;尤其在近景三维重建中&#xff0c;该算法从获取的目标物系列影像出发&#xff0c…

sfm从运动到结构

sfm&#xff0c;即structure from motion。从一堆同一场景的照片中恢复场景的三维结构和照片拍摄时相机的位置&#xff0c;可分为全局sfm和增量式sfm。 全局sfm主要包括以下步骤&#xff1a; 1.提取各张照片上的特征点及其描述&#xff1b; 2.对所有照片相互进行特征点匹配&a…

猿创征文|SfM(Structure from Motion)学习之路

文章目录 0 前言1 理论基础1.1 书籍推荐1.2 SfM概述 2 动手实践2.1 增量式SfM复现总结2.2 部分复现结果2.3 遇到问题与解决 3 后续学习3.1 前沿论文阅读笔记3.2 Colmap使用问题3.3 三维旋转3.4 场景对齐 0 前言 一转眼&#xff0c;研究生生活已经过去两年了。开始接触SfM也是两…

SFM综述

Structure from Motion&#xff08;SfM&#xff09;是一个估计相机参数及三维点位置的问题。SfM方法可以分为增量式&#xff08;incremental/sequential&#xff09;,全局式&#xff08;global&#xff09;&#xff0c;混合式&#xff08;hybrid&#xff09;,层次式&#xff08…

计算机视觉之三维重建-SFM系统

SFM系统 1.PnP问题2. RANSAC拟合3.本质矩阵与单应矩阵4.sift特征提取*2视图欧式结构恢复求解流程*openMVG系统Tracks联通图计算流程 北邮三维重建课笔记 1.PnP问题 PnP问题&#xff1a;就是利用其中两个相机算出三维点坐标&#xff0c;再利用三维点坐标和第三个相机的像平面坐标…

java中浮点数表示方式

java虚拟机中的浮点数分为float和double两种&#xff0c;分别为32位和64位.它参考了IEEE 754的规范对浮点数进行处理。下面以float为例 &#xff0c;分析一下float数的表示方法. float的32位分成三个部分来表示一个浮点数: 浮点数的取值计算公式为: 解析: 1&#xff09; 当…

一文读懂 IEEE754 浮点数的表示方法

FBI WARNING&#xff1a;鄙人首个开源电子书 《Go 编码建议》已经上线啦&#xff0c;欢迎各位大佬斧正指导&#xff0c;协同共建。 文章目录 1.浮点数的存储格式2.移码3.浮点数的规格化3.1 单精度浮点数真值3.2 双精度浮点数真值 4.浮点数的具体表示4.1 十进制到机器码4.2 机器…

浮点数表示(IEEE 754)

引入 N S r j N Sr^j NSrj N&#xff1a;浮点数S&#xff1a;尾数r&#xff1a;基数j&#xff1a;阶码 举个例子&#xff1a; 123.456 1.23456 1 0 2 123.456 1.2345610^{2} 123.4561.23456102 其中123.456是浮点数&#xff0c;1.23456是尾数&#xff0c;10是基数(10进…

c++ 浮点数表示

1.为何称为浮点数 对于一个浮点数来说&#xff0c;其通常可以科学计数法来表示&#xff0c;而对于一个浮点数来说&#xff0c;由于次方可变&#xff0c;故小数点可以左右移动。 eg&#xff1a;-36.5 &#xff0c;及可以表示为&#xff1a;&#xff0c;也可以表示为&#xff0…

Java中浮点数的表示方法

Java中浮点数的表示方法 Java中浮点数的表示方法 1.计算机中的表示方法2.具体分析表示方法 小结 3.移位存储 小结 1.计算机中的表示方法 对于float来说&#xff0c;4个字节&#xff0c;32位&#xff0c;0-22位表示尾数&#xff0c;23-30(8位)表示指数&#xff0c;31位表示符…

浮点数的表示

科学计数法 浮点数的表示 阶码E反映表示范围及小数点的实际位置 位数M的数值部分的位数n反映浮点数的精度 浮点数尾数的规格化 左移三位 0.110&#xff1b;1.0100000 表示范围 浮点数标准 IEEE 754 移码 阶码真值移码-偏移量

dsp处理浮点数_DSP中浮点数的表示方法

DSP中浮点数的表示方法 tongxin | 2009-03-20 15:16:17 阅读&#xff1a;2484 发布文章 先介绍一下IEEE754中浮点数的定义(这里只介绍单精度浮点数)&#xff1a; %A %A 单精度浮点数由4字节(32位)组成&#xff0c;且分成3段&#xff1a;数符s(0表示正数&#xff0c;1表示负数…

C语言浮点数的各种表示方法

2022.8.7更新 学习js的过程中发现了0.10.2更深一层的运算过程&#xff0c;感兴趣的可以看看这个博主写的帖子。 JavaScript 浮点数之迷&#xff1a;0.1 0.2 为什么不等于 0.3&#xff1f; ​​​​​​​ 前提&#xff1a; 由于存在精度限制&#xff0c;浮点数只是⼀个近似值&…

浮点数的表示方法是什么?

是已知的C/C编译器都是按照IEEE&#xff08;国际电子电器工程师协会&#xff09;制定的IEEE浮点数表示法来进行运算的。这种结构是一种科学表示法&#xff0c;用符号&#xff08;或-&#xff09;、指数和尾数来表示&#xff0c;底数被确定为2。所以在IEEE浮点数表示法里&#x…

浮点数表示总结

浮点数 早期的计算机使用定点数来表示实数&#xff0c;由于定点数的小数点位置固定&#xff0c;而计算机字长有限&#xff0c;定点数无法表示很大和很小的实数&#xff0c;因此而在计算机科学中有了对于实数近似值数值的表示法——浮点数。这种表示法类似于十进制中的科学计数…