这里我们采用欧式恢复

 

特征匹配:

d1/d2小于阈值的作用:

首先要注意d1<d2(一个最近,代表距离最小,一个次近,代表距离次小),因此d1/d2是一个0到1的数,越接近1表示这两个距离越接近,这就相当于一个点和两个点匹配了,那么最终我也不知道匹配哪个点了,因此将这种一对多的点舍掉

错误匹配点的处理:

图中用直线连起来的那两个圈中的点是一对匹配点,显然这是不正确的。

我们使用RANSAC方法来拟合F矩阵(利用有错误点(噪声)的数据集来拟合F矩阵的办法),迭代次数可以选20次左右

任取两张图像

  1. 找出第一张图像和第二张图像中8对点,使用归一化的八点法求出F矩阵
  2. 然后用第二张图像中所有剩下的点乘以这个矩阵F,以其中第二张图像中一个点为例,这个点乘以矩阵F后会对应到第一张图像中的一个像素坐标,如果这个坐标和第一个张图像中某个特征点的距离小于我们设定的阈值,那么我们就认为这个点通过这个矩阵F找到了一个对应点,此时这个点就给F矩阵打一分,类似的我们将其他所有点也这样做,就得到了这个F的最终分数。这样就完成了一次迭代。
  3. 我们再找到8对点,再求出F,再给这个F打分.......如此反复迭代我们得到了一个分数最高的F矩阵

基于增量法的SFM系统

首先说明的是:

  • 所有点云都是相对于第一个摄像机坐标系的,也就是以第一个摄像机的坐标系为世界坐标系(这里的第一个摄像机坐标系的原点是拍摄第一张图片的摄像机它的光心)
  • SFM不要求所有图像都是来自于一个摄像机的(slam要求),这些图片不强调先后顺序

预处理

这里为什么估计H呢:因为我们实现不知道所重建的物体是否是一个平面,最后取F还是取H就看求F的RANSAC算法得到的最多票数和求H的RANSAC算法得到的最多票数哪个大,就用谁,F大就表示我们恢复的物体不是一个平面,H大就表示我们恢复的物体是一个平面。然后最终根据F矩阵(欧式恢复)或则单应矩阵得到RT。

————————————————————————————————————

备注:

利用RANSAC算法求任意两张图片间H:

任取两张图像

  1. 找出第一张图像和第二张图像中4对点,求出H矩阵
  2. 然后用第二张图像中所有剩下的点乘以这个矩阵H,以其中第二张图像中一个点为例,这个点乘以矩阵H后会对应到第一张图像中的一个像素坐标,如果这个坐标和第一个张图像中某个特征点的距离小于我们设定的阈值,那么我们就认为这个点通过这个矩阵H找到了一个对应点,此时这个点就给H矩阵打一分,类似的我们将其他所有点也这样做,就得到了这个H的最终分数。这样就完成了一次迭代。
  3. 我们再找到4对点,再求出H,再给这个H打分.......如此反复迭代我们得到了一个分数最高的H矩阵.

——————————————————————————————————————

增量法

1.轨迹:多张图像中同一个点的连线

  • 如果一个点被三张图像看到track就等于3。
  • 这个track可以使用一种数据结构来记录,个人认为可以使用链表。构建方法如下(个人看法):
  1. 选取两张图像进行使用SIFT求特征点
  2. 然后使用RANSAC方法求出F或H,给这个F或H投票的点对我们可以看成匹配点对,比如一个p和p'相匹配,同时这也是同一个三维点在两张图像上的映射
  3. 用p所在图像和其他图像重复1,2过程,我们可以p在各个图像的匹配点(当然有些图像可能没有p的匹配点,因为p点所对应的三维点不总是能被看到)p1,p2,p3.....
  4. 用p’所在图像和其他图像重复1,2过程,我们可以p’在各个图像的匹配点p’1,p’2,p’3.....
  5. 那么这个三维点的链表就建好了:每个结点的数据域记录着p,p',p1,p2,p3,p’1,p’2,p’3.....所在的图像编号以及它们的像素坐标
  6. 只有这个链表的长度大于2,我们才要这个链表,这个三维点才在track中

2.连通图

两张图片可以看成是2个顶点,如果两个图像的F矩阵或则H矩阵的得分(别忘了加8或则4)大于100,那么就认为这两张图之间有一条边相连

3.选择两张图像作为初始图像

原则是所有点对应点三角化时射线夹角中位数不大于60度不小于3度

这里的夹角指的是一个物点和两个像点组成的射线之间的夹角,求解方法是:

  1. 以其中一张图片的拍摄相机的相机坐标系为世界坐标系,
  2. 然后根据这个相机的内参求解出物点在这个世界坐标系(也就是这个相机的相机坐标系)下的三维坐标这样就得到了第一个矢量,即为矢量1。
  3. 然后根据平移向量求出拍摄第二张图像所用相机的光心在第一个相机坐标系下的坐标(这里要注意的是平移向量的方向,比如O2坐标系加上这个平移向量原点和O1坐标系重合,那么这个平移向量的方向是O1O2),这样又得到了一个矢量,也就是平移向量
  4. 矢量O2P即为矢量2可根据矢量1减平移向量求得
  5. 矢量1和矢量2的夹角即为所求

不大于60度和不小于3度的目的是:防止基线过短容易受到噪声的影响,防止基线过长以出现遮挡。

6.t表示:两张图像的匹配点对中满足track的匹配点点对,比如一对匹配点对所对应的三维点只能被2张图像看得到我们就不认为它是满足track的匹配点点对(我们假设一个点要被3张图像看得到);e表示两张图像中所有的匹配点点对。第6点也就是说我们只三角化那些满足track的点对。

8-1):上面的步骤重够好的三维点在哪张图像的映射点最多就选哪张:比如这个重建好的三维点的链表记录着编号a这张图像,另外一个也记录着编号a这张图像....这个编号a的图像在所有重建好的三维点的链表中出现最多,我就对编号a这张图片进行操作,把她即为第三张图像

8-3):首先判断第三张图像和一二哪张图像所有点对应点三角化时射线夹角中位数满足不大于60度不小于3度,我就选择第三张图片和谁三角化重构三维点,那么什么叫新的track,也就是有一些点它可能没被没和第三章图像三角化的那张图像观察到。

8-4):比如第三张图像和第一张图像三角化,那么我就删掉第三张图像和第一张图像在连通图中对应点的连接线

8-5):同时能被一二三张图像所观测到的三维点再利用M1M2M3矩阵重投影到三张图像上,求这些映射点的坐标和三角化这个三维点

重复8

posted on 2023-07-27 23:44  小凉拖  阅读(160)  评论(0)    收藏  举报