ORB 中的三角化原理 以及 如何生成新的地图点

orb初始化阶段,从E H矩阵分解得到的 R t 如何选择?

checkRt 函数,计算在该Rt 情况下,三角化成功的点的数量。

 

三角化:

slam14讲中思路是:未知数只是该点在两个相机中的深度,两个未知数。只要满足对极几何,就可以求解。

多视图几何,以及orb中的思路:实际的像素坐标 , 和 重投影得到的像素坐标,肯定是同向的。叉乘为0。待求解未知数为 Pw ,是4维的,因为尺度等价性。

而且,在构建方程的时候,因为像素坐标是齐次,所以一个点可以提供2个方程,因为第三个可以由前面两个方程得到。

然后得到的结果是  Ax=0  4乘4的。利用SVD分解求解即可。

 

https://www.cnblogs.com/yepeichu/p/10792899.html

https://blog.csdn.net/weixin_43795395/article/details/93769148

关于三角化,这篇文章讲的太好了  https://www.zhihu.com/search?type=content&q=slam%20%E4%B8%89%E8%A7%92%E5%8C%96

 

 

生成新的地图点

在localBA中根据KF生成新的地图点,首先要保证匹配的点是对的。所以,要先进行匹配。虽然当前有匹配对,但是不一定正确,要通过bow来寻找。同时,要加上对极几何约束判断。

什么是对极几何判断?

先通过两个KF的已知姿态,计算相对姿态,构造出 F 基础矩阵。(不用再像初始化那样再求解一遍)

对极几何原理是:p2t F21 p1 = 0   根据点到直线的距离,我们认为,F21*p1 是   p1 投影到 camera2中的级线 l 。

判断是否符合对极几何约束,直接判断 p2 到 这个极限 l 的距离是否小于阈值就可以了。

https://www.cnblogs.com/clarenceliang/p/6704970.html

如何根据一对匹配成功的特征点恢复地图点?

只讨论单目的情况:

1. 检查视差是否足够大,否则不进行三角化;三角化的方法同上

2. 仅仅是三角化完成就OK了吗?不是的,还要检查三角化结果的正确性。

  1)是否在两个相机的前方。(将地图点变换到对应的camera系,观察z是否为正)

  2)z 值特别大也不OK。代表该点是特别远点

  3)然后检查该地图点到两个相机的重投影误差不能太大,要满足阈值

  4)然后检查尺度一致性。就是实际的两个光心到该点的距离之比,与 两个相机中特征点所在金字塔距离之比。 这两个尺度不能差别太大。

  如果以上条件都满足,恭喜,三角化成功。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值