作者: Liam

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

干货第一时间送达

构造函数

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))
  • 恢复初始尺度(归一化前的)
  • 保留最高得分的基础矩阵及对应的匹配内点

计算单应矩阵

这样就可以用一组匹配点构造两个约束(其实是三个,但是三个线性相关,所以只取前两个),所以自由度为8的单应矩阵需要四组匹配点就可以算出。 操作:

  • 利用八组匹配点构造A矩阵
  • 利用SVD分解求解AX=0型的方程
  • 最小特征值对应的特征向量就是方程的解(可参考多视图几何第二版198-200页)

计算基础矩阵

cv::Mat Initializer::ComputeF21(const vectorcv::Point2f &vP1,const vectorcv::Point2f &vP2) 参数:

本文仅做学术分享,如有侵权,请联系删文。

下载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视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

觉得有用,麻烦给个赞和在看~  

ORB-SLAM3 Initializer.cpp函数解读的更多相关文章

  1. Linux驱动函数解读

    一.kmalloc().kzalloc()和vmalloc() 这三个函数都可以分配连续的虚拟内存 除此之外,这三个函数的区别有: 1. kmalloc()和kzalloc()函数分配的物理内存也是连 ...

  2. OpenCV函数解读之groupRectangles

    不管新版本的CascadeClassifier,还是老版本的HAAR检测函数cvHaarDetectObjects,都使用了groupRectangles函数进行窗口的组合,其函数原型有以下几个: C ...

  3. 分类器是如何做检测的?——CascadeClassifier中的detectMultiScale函数解读

    原地址:http://blog.csdn.net/delltdk/article/details/9186875 在进入detectMultiScal函数之前,首先需要对CascadeClassifi ...

  4. C库函数标准编程之fscanf()函数解读及其实验

    函数功能 fscanf()函数用于从参数stream的文件流中读取format格式的内容,然后存放到...所指定的变量中去.字符串以空格或换行符结束(实验1中会对它进一步说明) 函数格式 字符格式说明 ...

  5. cpp函数回调

    typedef void (PM::*E)(int c); typedef void (*EE)(); //typedef void *EE() = typedef void* EE(); 所以要加( ...

  6. java 回调函数解读

    模块间调用 在一个应用系统中,无论使用何种语言开发,必然存在模块之间的调用,调用的方式分为几种: (1)同步调用 同步调用是最基本并且最简单的一种调用方式,类A的方法a()调用类B的方法b(),一直等 ...

  7. HashMap扩容函数解读

    void resize(int newCapacity) { Entry[] oldTable = table; int oldCapacity = oldTable.length; if (oldC ...

  8. Python extend函数解读

    num = [1,2] print('将1迭代2次') num.extend([1]*2) print(num) print('将2迭代3次') num.extend([2] * 3) print(n ...

  9. torch.nn.MSELoss()函数解读

    转载自:https://www.cnblogs.com/tingtin/p/13902325.html

随机推荐

  1. synchronized 锁的升级

    synchronized 的基本认识 在多线程并发编程中 synchronized 一直是元老级角色,很 多人都会称呼它为重量级锁.但是,随着 Java SE 1.6 对 synchronized 进 ...

  2. Python-SyntaxError: invalid syntax

    Error:  SyntaxError: invalid syntax Where? 运行Python代码时候,提示错误 Way? Python def class if elif for while ...

  3. [ERROR] Aborting

    where? mysql 5.7 启动时候,报错 [ERROR] Aborting why? /etc/my.cnf 中有错误的配置参数 way? 检查参数是否出错,通过一行一行注释排错

  4. PageObject课程培训记录

    前言 昨晚的培训课程讲了PO设计模式,对于PO模式我们需要去了解关于为什么要使用PO,而不使用PO是什么情况?什么是PO模式?PO怎么去使用? 第一,为什么要使用PO,而不使用PO是什么情况? 我们先 ...

  5. 【题解】[CEOI2004]锯木厂选址

    Link \(\text{Solution:}\) 注意到题目中的编号是倒着的,于是我们的距离要预处理的是后缀和. 考虑如何\(n^2\)搞: 设\(dp[i]\)表示选择\(i\)为第二个中转点的最 ...

  6. windev的内部窗口传参方式及其与类的相似性

    最近的应用,需要向一个内部窗口(internal window)传参,因为官方文档的说明较为宽泛,虽然结果只有两小段代码,但也费了很大的劲.把所有关于procedure的文档看一遍,又是重新学习了一遍 ...

  7. .NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记

    目录 什么是软件架构 软件架构的基本思路 单体向分布式演进.云原生.技术中台 1.1 什么是软件架构 1.1.1 什么是架构? Software architecture = {Elements, F ...

  8. C# 生成chart图表的三种方式

    .net中,微软给我们提供了画图类(system.drawing.imaging),在该类中画图的基本功能都有.比如:直线.折线.矩形.多边形.椭圆形.扇形.曲线等等,因此一般的图形都可以直接通过代码 ...

  9. 透视HTTPS建造固若金汤的城堡

    为什么有 HTTPS?因为 HTTP 不安全! 现在的互联网已经不再是 "田园时代","黑暗森林" 已经到来.上网的记录会被轻易截获,网站是否真实也无法验证,黑 ...

  10. springmvc执行原理

    大家是否遇到过被面试官问了这样一句话:"来聊聊springmvc执行原理".是的,springmvc的执行流程是面试的高频点,今天我就来浅谈它! 一.下面通过一个简单的spring ...