学习笔记_SFM
SFM
SFM是什么?和MVS的对比?
运动恢复结构(SfM)问题是从二维(2D)图像的集合中恢复静止场景的三维(3D)结构的问题
-
SFM相当于获得由二维点获得三维点输出稀疏点云还有每张图片对应的相机参数
-
MVS相当于给三维点贴图输出稠密点云
3D点阵可以通过MeshLab来重建稀疏的Mesh。也可以通过PMVS(Patch-based Multi-view Stereo)来重建Dense的Mesh
SFM的阶段
SfM 涉及三个主要阶段:
- 提取图像中的特征(例如,兴趣点、线条等)并在图像之间匹配这些特征
- SIFT,SURF来提取并匹配,也可以用最新的AKAZE(SIFT的改进版,2010)来匹配。
- 误匹配会造成较大的Error,所以要对匹配进行筛选,目前流行的方法是RANSAC(Random Sample Consensus)。2D的误匹配点可以应用3D的Geometric特征来进行排除。
- 相机运动估计–外参(使用提取的特征)
- 使用估计的外参特征恢复 3D 结构(通过最小化所谓的重投影误差)
该技术旨在优化称为total reprojection error的成本函数
SfM分类
-
增量式(incremental/sequential):
- 优–对错误的匹配点有较强鲁棒性,总体精度更高
- 劣运行时间长,drift: error随着camera registration(相机校准)逐步积累
-
全局式(global):
- 优–避免了drift的问题(更反映了图像的全局性), 速度快(只需解决两个global synchronization(global SfM算法中的全局同步操作)+一次BA
(光束平差法)) - 劣–对错误的匹配点鲁棒性较差,且错误难以修正 (error会沿着pipeline累积)
- 优–避免了drift的问题(更反映了图像的全局性), 速度快(只需解决两个global synchronization(global SfM算法中的全局同步操作)+一次BA
-
混合式(hybrid):
- 全局估计摄像机旋转矩阵,增量估计摄像机中心
-
层次式(hierarchical):
- 执行顺序上采用了层次式的聚类策略(clustering)。其先生成一棵聚类二叉树(binary cluster tree),然后算法自底向上进行处理:算法的每次迭代合并具有最小距离的两个clusters,每个cluster可以是一张图片,也可以是一个合并之后的cluster。
-
基于语义的(Semantic)
2006 年 SfM 的 sequential pipeline增量式
- 测每个图像中的关键点。使用SIFT 描述符来比较跨图像的这些关键点
- 应用随机采样和一致性(RANSAC),以稳健地估计图像对之间的基本矩阵(用于相机相对运动)并丢弃异常匹配
- 从找到内部匹配数量最多的一对图像开始,然后一次贪婪地添加一个图像,反复求解束调整
CVPR 2016Structure-from-Motion Revisited提出colmap
- https://ieeexplore.ieee.org/document/7780814
- (论文“Structure-from-Motion Revisited” 对ISFM改进的理解)[https://blog.csdn.net/Z5122/article/details/103287832?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-103287832-blog-124490400.235^v38^pc_relevant_sort&spm=1001.2101.3001.4242.2&utm_relevant_index=4]
- 在实验部分对比的两个incremetal SfM框架:Bundler、VisualSFM;两个global SfM 框架:DISCO、Theia提出了一个当时“近乎理想”的incremental SfM并开源了代码[COLMAP]
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 This is a 部落格 of outbreak_sen!


