CreateNewMapPoints()共视程度较高的关键帧通过三角化恢复一些MapPoints
- 在当前关键帧的共视关键帧中找到共视程度最高的nn帧相邻帧vpNeighKFs
- 遍历相邻关键帧
- 这个过程很耗时,如果有新的关键帧需要处理就return
- 根据两个关键帧位姿计算他们之间的基本矩阵
-SearchForTriangulation通过极线约束限制匹配时的搜索范围,进行特征点匹配 - 通过三角化生成3D点,生成之后还为该点添加属性:观测到该店的关键帧,描述子,平均观测方向和深度范围
SearchForTriangulation通过极线约束限制匹配时的搜索范围,进行特征点匹配
- 将属于同一节点的ORB特征进行匹配
这里和SearchbyBow差不多,如果同属于同意节点则遍历第一帧该节点中的特征点,每个特征点和该节点中第二帧特征点的描述子计算距离进行匹配。 - 和其他匹配不同的是,这里还利用基础矩阵计算特征点kp2到kp1极线(kp1对应pKF2的一条极线)的距离是否小于阈值
- 匹配过程还对旋转进行直方图统计,去除直方图中值最大的三个index,剔除除这三个最大index的特征点。因为两帧图像之间的匹配点旋转应该是相同的
三角法恢复特征点
已知两帧图像相机位姿和两帧图像对应匹配点和,恢复出世界点在三维世界的坐标。
已知点和和两个图像的投影矩阵和,根据相机投影模型,对应3D点满足:
三角法使用的是直接线性变化(DLT)对点的世界坐标进行求解。使用DLT需要改成的形式。利用外积的性质:
在按照十四讲中方法外积可以改写成
即:
可见第三个式子可以由上两个式子线性表示,所以只需要取前连个式子即可,从而有形如的方程,其中:
对A进行SVD分解,方程的解为A的最小奇异值对应的单位奇异矢量,解得X=(x,y,z,w),则最后令X缩放使得的最后一项为1即可得到我们所求的3D点X的坐标。
网友评论