经典SFM步骤——Lowe2005

网上有很多博文介绍了SFM的过程,但是每个人说的都是自己的理解,想自己真正搞明白还是要自己弄懂每一步。必须要自己把过程写出来才是真的懂了。


1.使用SIFT提取特征点,使用k-d tree最近邻算法匹配图像之间的点对

注意,由于每幅图像会匹配到不同的其他图像,最后匹配的图像总数是平方级的。
在这里插入图片描述
这两个图片并不是两个不同物体,而是拍同一个物体的不同角度!!!


由于误差的存在,每个关键点会匹配多个关键点。所以还需要一个去除重复特征点匹配对的算法去解决这种一对多的情况。

2.引入对极几何,使用极线约束来剔除错误匹配点对。

首先介绍下用到的基本概念:
(1)对极几何
对极几何关系的含义是:在一个物体的两幅图像中,匹配点对(不同图像中来自同一个空间点在两幅图像中的投影点对 x,x’ 成为匹配点对)的相对位置受两个图像平面空间几何关系的约束,这种约束关系在计算机视觉中就成为对极几何关系,它可以用基础矩阵F准确地表达。

(2)极线约束
对一副图像上的任意一点x,在与其对应的另外一副图像中必然存在着一条对应的极线;而在第二幅图像上,与x匹配的点x’必然落在极线上——此约束称为极线约束

(3)基础矩阵F
基本矩阵体现了两视图几何(对极几何,epipolar geometry)的内在射影几何(projective geometry)关系,基本矩阵只依赖于摄像机的内参K和外参R,t。

基础矩阵的计算:This enables a closed form solution via SVD(八点法). ——Lowe2005.

对极几何基本模型如图:
在这里插入图片描述
在图像一(左图)中的x点与图像二(右图)中的x’点是匹配点对,而极线约束的意思就是:如果两个点XL,XR匹配(对应空间中同一点X),那么在图像二中与点XL匹配的点XR必然在图像二中的极线eR-XR上——从而把点XL约束在eR-XR线段上(而不是整个图像二)。而此约束,就是我们心心念念的极线约束

总之,就是把一幅图像中的点x对应的点x’约束在另一幅图像的一条直线l’上。

极线约束公式表示:
在这里插入图片描述
我们费这么大劲儿得到这个极线约束之后怎么用呢?
我们利用极线约束把那些虽然匹配成点对,但是不满足极线约束的点x’(即不在极线l’上的点)给剔除掉!只留下在极线上的匹配点对。


3.使用RANSAC(随机采样一致性 )八点法方法来稳定的估算F

基于匹配点对估算两视图的基础矩阵,唯一的已知条件就是匹配的点对坐标。在实践中,点对的匹配肯定是存在误差的,主要有两种类型的误差:

(1)不精确的测量点位置引起的系统误差,通常服从高斯分布
(2)错误匹配引起的误差,这些不匹配的点被称为外点,通常不服从高斯分布

对于基础矩阵的估算,不匹配的点能够造成很大的误差,即使是只有一对错误的匹配都能使估算值极大的偏离真实值。因此,需要找到一种方法,从包含错误点(外点)的匹配点对集合中,筛选出正确的匹配点(内点)。(We use RANSAC to robustly estimate F and hence find a set of inliers that have consistent epipolar geometry.——Lowe2005.)

终于可以祭出这个图了
在这里插入图片描述
Lowe2005_图1. 使用SIFT和RANSAC查找一致的匹配集。从所有输入图像中提取SIFT特征,并且每个特征与k = 4个最近邻居匹配。在使用RANSAC查找与基本矩阵一致的最终内点集合之前,首先通过对不正确匹配的距离(第(2.1)节)进行阈值处理来拒绝异常值。对于这对1024×768输入图像,图像1中有365个SIFT特征,图像2中有379个。在初始特征匹配中,特征空间异常值拒绝后仍有133个匹配,使用后最终解决方案中有103个匹配RANSAC。

最后,如果两个图片之间的特征点匹配数不少于20个即为匹配成功。


4.使用单应性模型选择合适的初始化图像对

首先选择合适的初始化图像对,这十分重要,一旦错误的初始化,将会陷入局部最优而使得之后的BA陷入死循环,无法正确求解得到全局最优。
具体有两点要求:
第一,要有足够多的匹配点;
第二,要有足够远的相机中心。

特别的,在这里用到两个图像变换之间的单应性模型来找初始化图像对。采用RANSC算法四点法计算单应矩阵。满足单应矩阵的匹配点称为内点,不满足单应矩阵的称为外点, 根据单应矩阵公式可知当T越小时,内点占比越高,也就是低视差现象越明显,详情可见:http://blog.csdn.net/heyijia0327/article/details/53782094。

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


5.使用bundle adjustment来求解相机和结构参数。

初始化图像对得到后,就可以开始进行第一次bundle adjustment了。在这里用的是稀疏光束平差法sparse bundle adjustment(SBA)。Bundle Adjustment是一个迭代的过程,在一次迭代过后,将所有三维点反向投影到各自相片的像素坐标并分别与初始坐标比对,如果大于某个阈值,则应将其从图像队列中去掉,如果队列已经小于2个了,则整个队列也去掉,一直优化到没有点可去为止。

最后,不断添加新的摄像机和3D点进行BA。这个过程直到剩下的摄像机观察到的点不超过20为止,说明剩下的摄像机没有足够的点可以添加,BA结束。得到相机估计参数和场景几何信息,即稀疏的3D点云。


6.总结:

截止到现在,经历了两周半的时间,算是把SFM中最重要的概念看懂了。最开始是看Lowe经典论文,但是有的地方实在是看不懂;也看了很多相关的引用论文,还是看不懂;又看了CSDN上的好多博文,无奈我的理解力实在是差了点,还是看不懂;最后没有办法,只能硬啃《计算机视觉中的多视图几何》,把里面的基础知识过了一遍。再回头看CSDN,懂了;回头再去看CSDN,懂了;回头再去看论文,懂了。

而里面的bundle adjustment我最近是没有时间再研究了。但是对最后如何形成点云图还是不明白。无奈时间真的不够了,细节无法再去了解了。以后有时间再看吧。


SFM相关博文:
1.https://blog.csdn.net/wanggcong/article/details/43449867
2.https://blog.csdn.net/AIchipmunk/article/details/48132109
3.https://blog.csdn.net/AIchipmunk/article/details/48157369
4.https://blog.csdn.net/qq_20791919/article/details/74936438
5.https://blog.csdn.net/qingcaichongchong/article/details/62424661
6.https://blog.csdn.net/qq_33826977/article/details/79834735
7.https://blog.csdn.net/wanggcong/article/details/43449867

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
VisualSFM是一款用于三维重建的开源软件,以下是其主要步骤: 1. 导入照片:首先,我们需要将拍摄的照片导入到VisualSFM中。可以将照片直接拖放到软件界面中,或使用菜单中的“添加图像”选项。 2. 特征提取:VisualSFM会自动检测并提取照片中的特征点和特征描述符。这些特征点用于后续的图像匹配和三维重建。 3. 图像匹配:软件通过比较照片中的特征点,找到它们之间的对应关系。这些匹配结果可以用于推测不同视角下的相机位置和姿态。 4. 初始化三维重建:VisualSFM将利用图像匹配结果初始化三维重建。它会估计相机的初始位置和场景的初始结构。 5. 稀疏重建:在这一阶段,VisualSFM会使用一个三维重建算法来估计相机位置和场景结构的稀疏表示。它会生成一个包含3D点云和相机姿态的初始模型。 6. 密集重建:在稀疏重建的基础上,VisualSFM使用一个补全算法来填充3D点云中的缺失部分。这个过程会进一步改善场景的重建精度。 7. 网格生成:VisualSFM可以将重建结果转化为三角网格模型。这个步骤可以用于生成更真实的场景表面,并进行后续的渲染和分析。 总结起来,VisualSFM步骤包括导入照片、特征提取、图像匹配、初始化三维重建、稀疏重建、密集重建和网格生成。通过这些步骤,我们可以使用VisualSFM来进行三维重建,从而获得场景的详细结构信息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值