2019年3月6日 上午8:58
【立体视觉 之 SFM】 - 程序园
SfM简介
- SfM的全称为Structure from Motion,即::通过相机和目标的相对移动来确定目标的空间和几何关系::,是三维重建的一种常见方法。
- 它只需要用普通的RGB摄像头,对目标在不同的角度下拍摄一组图片,无需事先标定相机,因此成本更低廉,且受环境约束较小,在室内和室外均能使用。但是,SfM背后需要复杂的理论和算法做支持,在精度和速度上都还有待提高,所以目前成熟的商业应用并不多。 目前很多用无人机对大型建筑建模就是用的SfM方法。
- ::SFM是得到稀疏点云的方法::
SFM流程:
第一步:特征提取
一般采用SIFT算子,因其具有尺度和旋转不变性
第二步:匹配和建立track,图像对两两匹配
- 随机一致性算法RANSAC八点法计算基础矩阵
- 对匹配点采用随机一致性算法RANSAC八点法计算基础矩阵,剔除不满足基础矩阵的匹配对
- 当匹配关系建立后,需要生成track列表,指同名点的相片集合
- 比如第一幅图的13号点和第二幅的14号点及第五幅的11号点是同名点,则(1,13)、(2,14)、(5,11)是属于一个track,据此可以生成一个track集合,
- 同时生成track的时候也需要剔除无用匹配:
- 如果一个track包含同一幅图多次,则应该剔除,这是因为同一幅图的多个特征点都匹配了同一个点,则匹配关系肯定是错误的
- 如果track太少,应该剔除,一般取2,是指只有两幅图有同一个点,三维重建的信息过少,容易产生误差
第三步:找初始化像对
- RANSAC算法四点法计算单应矩阵
- 找初始化像对,目的是找到相机基线最大的像对,采用RANSAC算法四点法计算单应矩阵,满足单应矩阵的匹配点称为内点,不满足单应矩阵的称为外点, 根据单应矩阵公式可知当T越小时,内点占比越高,也就是低视差现象越明显,详情可见:http://www.voidcn.com/article/p-eszrpdmy-ko.html
- 因此找到一个内点占比最小的像对就是初始化像对,当然它前提必须满足可重建,这个可以通过匹配点个数保证
第四步:初始化像对的相对定向
- RANSAC八点法计算本征矩阵
- 初始化像对的相对定向,根据RANSAC八点法计算本征矩阵,可通过对本征矩阵SVD分解得到第二个图像的R、T,在这一步需要进行畸变校正,然后根据R、T和矫正后的像点坐标三角计算出三维点,这里用到的方法是直接线性变换DLT,可以理解为测绘中的前方交会
第五步:加入更多图像,稀疏重建SFM
- 加入更多图像,以第三幅图为例,根据第四步生成的三维点和第三幅图与前两图的track关系,可以反算第三幅图的R、T,然后继续三角化计算出更多的三维点,采用的同样是DLT,这样反复重复第5步,最后就会把所有像片的POSE(R、T)和三维点,这就是稀疏重建SFM的成果了
第六步:Bundle Adjustment
- 光束法平差Bundle Adjustment
- 从第四步开始需要进行光束法平差Bundle Adjustment,::是一个非线性优化的过程,目的是使重建误差降低到最小,通过调整POSE和三维点使反向投影差最小,如果相机没有标定,还应该将焦距也参与平差::。
- Bundle Adjustment是一个迭代的过程,在一次迭代过后,将所有三维点反向投影到各自相片的像素坐标并分别与初始坐标比对,如果大于某个阈值,则应将其从track中去掉,如果track中已经小于2个了,则整个track也去掉,一直优化到没有点可去为止