10

ORB-SLAM3 Initializer.cpp函数解读

 3 years ago
source link: https://mp.weixin.qq.com/s/3NTwqk1VZ6KH9I7k0YcDrQ
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

ORB-SLAM3 Initializer.cpp函数解读

Original Liam 计算机视觉工坊 10/10
收录于话题
#SLAM

点击上方“计算机视觉工坊”,选择“星标”

干货第一时间送达

Image

构造函数

Initializer::Initializer(const Frame &ReferenceFrame, float sigma, int iterations)参数: 参考帧(第一帧), 误差, 迭代次数 操作:读取参考帧的相机模型, 内参, 去畸变的特征点等传入参数

初始化:并行的计算前后两帧的本质矩阵和基础矩阵,选出来评分高的恢复旋转和平移

bool Initializer::Initialize(const Frame &CurrentFrame, const vector &vMatches12, cv::Mat &R21, cv::Mat &t21, vectorcv::Point3f &vP3D, vector&vbTriangulated) 参数: 当前帧(第二帧), 前后帧的匹配关系(), 参考帧到当前帧的旋转, 参考帧到当前帧的平移(==当前帧指向参考帧==), 三角化后的点, 特征是否被三角化过返回值:bool->初始化是否成功的标志 操作:
  • vMatches12中的匹配关系以<==第一帧特征索引,第二帧特征索引==>存储在mvMatches12中, 同时mvbMatched1[i]设置为true表示第一帧中该索引的特征点匹配成功
  • 从匹配中不重复的随机选择mMaxIterations组点,每组8个
  • 开两个线程同时计算单应和基本矩阵
  • 选择得分高的矩阵来恢复两帧位姿

寻找最优单应矩阵

void Initializer::FindHomography(vector&vbMatchesInliers, float &score, cv::Mat &H21) 参数: 匹配的Inliers, 最后的得分, 单应矩阵 操作:
  • 利用选择的mMaxIterations组匹配点用八点法计算单应矩阵(ComputeH21(vPn1i,vPn2i))
  • 恢复初始尺度(归一化前的)
  • 保留最高得分的单应矩阵及对应的匹配内点

需要最优基础矩阵

void Initializer::FindFundamental(vector&vbMatchesInliers, float &score, cv::Mat &F21) 参数: 匹配的Inliers, 最后的得分, 基础矩阵 操作:
  • 利用选择的mMaxIterations组匹配点用八点法计算基础矩阵(ComputeF21(vPn1i,vPn2i))
  • 恢复初始尺度(归一化前的)
  • 保留最高得分的基础矩阵及对应的匹配内点

计算单应矩阵

640?wx_fmt=png
640?wx_fmt=png
这样就可以用一组匹配点构造两个约束(其实是三个,但是三个线性相关,所以只取前两个),所以自由度为8的单应矩阵需要四组匹配点就可以算出。 操作:
  • 利用八组匹配点构造A矩阵
  • 利用SVD分解求解AX=0型的方程
  • 最小特征值对应的特征向量就是方程的解(可参考多视图几何第二版198-200页)

计算基础矩阵

cv::Mat Initializer::ComputeF21(const vectorcv::Point2f &vP1,const vectorcv::Point2f &vP2) 参数: 
640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png
本文仅做学术分享,如有侵权,请联系删文。下载1在「计算机视觉工坊」公众号后台回复:深度学习,即可下载深度学习算法、3D深度学习、深度学习框架、目标检测、GAN等相关内容近30本pdf书籍。下载2在「计算机视觉工坊」公众号后台回复:计算机视觉,即可下载计算机视觉相关17本pdf书籍,包含计算机视觉算法、Python视觉实战、Opencv3.0学习等。下载3在「计算机视觉工坊」公众号后台回复:SLAM,即可下载独家SLAM相关视频课程,包含视觉SLAM、激光SLAM精品课程。

重磅!计算机视觉工坊-学习交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

640?wx_fmt=jpeg▲长按加微信群或投稿

640?wx_fmt=jpeg

▲长按关注公众号

觉得有用,麻烦给个赞和在看~640?wx_fmt=gif


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK