本文最后更新于:2024年10月15日 下午

SFM,即Structure from Motion,中文常称为“运动恢复结构”,是一种计算机视觉技术,本文记录简要流程。

方法流程

  1. 特征提取
  2. 特征匹配、建立 track
  3. 找初始化像对
  4. 初始化像对的相对定向
  5. Bundle Adjustment

流程简介

特征提取

一般采用SIFT算子,因其具有尺度和旋转不变性

匹配和建立 track

匹配

图像对两两匹配,一般采用欧式距离.有两种方法:

  1. 粗暴匹配:对所有特征点都穷举计算距离
  2. 邻近搜索:建立KD树,缩小搜索范围,能提高效率,但也有可能不是最优,所以邻域取值是关键,越大越准确,越大计算量越大

当距离小于一定阈值的时候就认为匹配成功,但是误匹配也比较多,需要采取多种手段剔除:

  1. 如果最近距离与次近距离的比值大于某个阈值,应该剔除

  2. 对匹配点采用采样一致性算法RANSC八点法计算基础矩阵,剔除不满足基础矩阵的匹配对

track 列表

当匹配关系建立后,需要生成track列表,指同名点的相片集合,比如第一幅图的13号点和第二幅的14号点及第五幅的115号点是同名点,则(1,13)、(2,14)、(5,115)是属于一个track,据此可以生成一个track集合,同时生成track的时候也需要剔除无用匹配:

  1. 如果一个 track 包含同一幅图多次,则应该剔除,这是因为同一幅图的多个特征点都匹配了同一个点,则匹配关系肯定是错误的

  2. 如果track太少,应该剔除,一般取2,是指只有两幅图有同一个点,三维重建的信息过少,容易产生误差

找初始化像对

目的是找到相机基线最大的像对,采用RANSC算法四点法计算单应矩阵,满足单应矩阵的匹配点称为内点,不满足单应矩阵的称为外点, 根据单应矩阵公式可知当T越小时,内点占比越高,也就是低视差现象越明显。

因此找到一个内点占比最小的像对就是初始化像对,当然它前提必须满足可重建,这个可以通过匹配点个数保证

初始化像对的相对定向

根据RANSC八点法计算本征矩阵,可通过对本征矩阵SVD分解得到第二个图像的R、T,在这一步需要进行畸变校正,然后根据R、T和矫正后的像点坐标三角计算出三维点,这里用到的方法是直接线性变换DLT,可以理解为测绘中的前方交会

Bundle Adjustment

光束法平差Bundle Adjustment,是一个非线性优化的过程,目的是使重建误差降低到最小,通过调整POSE和三维点使反向投影差最小,如果相机没有标定,还应该将焦距也参与平差。

Bundle Adjustment是一个迭代的过程,在一次迭代过后,将所有三维点反向投影到各自相片的像素坐标并分别与初始坐标比对,如果大于某个阈值,则应将其从track中去掉,如果track中已经小于2个了,则整个track也去掉,一直优化到没有点可去为止

加入更多图像,以第三副图为例,根据第四步生成的三维点和第三副图与前两图的track关系,可以反算第三副图的R、T,然后继续三角化计算出更多的三维点,采用的同样是DLT,这样反复重复第5步,最后就会把所有像片的POSE(R、T)和三维点,这就是稀疏重建SFM的成果了

资源

目前,sfm开源库主要有:

不过,还有个小型库非常适合学习,用opencv实现的,地址是:

参考资料



文章链接:
https://www.zywvvd.com/notes/3d/sfm/sfm/


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

Structure from Motion
https://www.zywvvd.com/notes/3d/sfm/sfm/
作者
Yiwei Zhang
发布于
2024年10月15日
许可协议