美文网首页
LocalMapping

LocalMapping

作者: liampayne_66d0 | 来源:发表于2019-09-30 19:43 被阅读0次

CreateNewMapPoints()共视程度较高的关键帧通过三角化恢复一些MapPoints

  • 在当前关键帧的共视关键帧中找到共视程度最高的nn帧相邻帧vpNeighKFs
  • 遍历相邻关键帧
    • 这个过程很耗时,如果有新的关键帧需要处理就return
    • 根据两个关键帧位姿计算他们之间的基本矩阵
      -SearchForTriangulation通过极线约束限制匹配时的搜索范围,进行特征点匹配
    • 通过三角化生成3D点,生成之后还为该点添加属性:观测到该店的关键帧,描述子,平均观测方向和深度范围

SearchForTriangulation通过极线约束限制匹配时的搜索范围,进行特征点匹配

  • 将属于同一节点的ORB特征进行匹配
    这里和SearchbyBow差不多,如果同属于同意节点则遍历第一帧该节点中的特征点,每个特征点和该节点中第二帧特征点的描述子计算距离进行匹配。
  • 和其他匹配不同的是,这里还利用基础矩阵计算特征点kp2到kp1极线(kp1对应pKF2的一条极线)的距离是否小于阈值
  • 匹配过程还对旋转进行直方图统计,去除直方图中值最大的三个index,剔除除这三个最大index的特征点。因为两帧图像之间的匹配点旋转应该是相同的

三角法恢复特征点

已知两帧图像相机位姿和两帧图像对应匹配点xx',恢复出世界点在三维世界的坐标。
已知点xx'和两个图像的投影矩阵PP',根据相机投影模型,对应3D点X满足:
x=PX\ \ \ \ \ \ \ x'=P'X
三角法使用的是直接线性变化(DLT)对点的世界坐标进行求解。使用DLT需要改成AX=0的形式。利用外积的性质:
x×(PX)=0\ \ \ \ \ \ x'×(P'X)=0
在按照十四讲中方法外积可以改写成
\begin{equation} \begin{bmatrix} 0 & -1 & y\\ 1 & 0 & -x\\ -y & x & 0 \end{bmatrix} \begin{bmatrix} P^{1T}X\\P^{2T}X\\P^{3T}X \end{bmatrix} = 0 \end{equation}
即:\begin{equation} \begin{split} x(P^{3T}X)-(P^{1T}X)=0\\ y(P^{3T}X)-(P^{2T}X)=0\\ x(P^{2T}X)-y(P^{1T}X)=0\\ \end{split} \end{equation}
可见第三个式子可以由上两个式子线性表示,所以只需要取前连个式子即可,从而有形如AX=0的方程,其中:
\begin{equation} A =\begin{bmatrix} xP^{3T}-P^{1T}\\ yP^{3T}-P^{2T}\\ x'P'^{3T}-P'^{1T}\\ y'P'^{3T}-P'^{2T}\\ \end{bmatrix} \end{equation}
对A进行SVD分解,方程的解为A的最小奇异值对应的单位奇异矢量,解得X=(x,y,z,w),则最后令X缩放使得的最后一项为1即可得到我们所求的3D点X的坐标。

相关文章

网友评论

      本文标题:LocalMapping

      本文链接:https://www.haomeiwen.com/subject/jnkhpctx.html