IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 树与图以及优化 -> 正文阅读

[数据结构与算法]树与图以及优化

欢迎访问我的博客首页


1. 关键帧


??阅读 ORB_SLAM 的源码最好从 KeyFrame.cc 开始。因为 KeyFrame.cc 中定义了一些很重要的数据结构,比如共视图、生成树。同时,KeyFrame.cc 中的函数几乎不会调用其它文件中的函数,而里程计、回环检测、回环闭合、优化等经常调用 KeyFrame.cc 中的函数,所以 KeyFrame.cc 即简单又重要。

1.1 相机坐标系原点在世界坐标系中的坐标


??已知相机坐标到世界坐标的变换是 R w c R_{wc} Rwc? t w c t_{wc} twc?,求相机坐标系原点 O c O_c Oc? 在世界坐标系中的坐标 O c w O_c^w Ocw?:假设相机坐标系原点 O c O_c Oc? 在相机坐标系中的坐标是 O c c O_c^c Occ?,由 R w c O c c + t w c = O c w R_{wc} O_c^c + t_{wc} = O_c^w Rwc?Occ?+twc?=Ocw?

O c w = t w c . (1.1) O_c^w = t_{wc}. \tag{1.1} Ocw?=twc?.(1.1)

??已知世界坐标到相机坐标的变换是 R c w R_{cw} Rcw? t c w t_{cw} tcw?,求相机坐标系原点 O c O_c Oc? 在世界坐标系中的坐标 O c w O_c^w Ocw?:假设相机坐标系原点 O c O_c Oc? 在世界坐标系中的坐标是 O c w O_c^w Ocw?,由 R c w O c w + t c w = O c c R_{cw} O_c^w + t_{cw} = O_c^c Rcw?Ocw?+tcw?=Occ?

O c w = ? R w c t c w . (1.2) O_c^w = - R_{wc} t_{cw}. \tag{1.2} Ocw?=?Rwc?tcw?.(1.2)

??上面两个公式的推导中,很明显 O c c = 0 O_c^c = \bf 0 Occ?=0。由公式 (1.1) 和公式 (1.2) 还可以知道 t w c = ? R w c t c w t_{wc} = - R_{wc} t_{cw} twc?=?Rwc?tcw?

1.2 共视图


??有共同地图点的两个关键帧相连,组成共视图。共视图的创建过程:

void KeyFrame::UpdateConnections();
void KeyFrame::AddConnection(KeyFrame *pKF, const int &weight);
void KeyFrame::UpdateBestCovisibles();

树与图

图 1 ORB_SLAM 中的树与图

??有共同地图点的两个关键帧只称为有连接关系,共同地图点数大于等于 15 的两个关键词才有共视关系:

set<KeyFrame *> KeyFrame::GetConnectedKeyFrames() {
    // 与当前关键帧至少有一个共同地图点。
    unique_lock<mutex> lock(mMutexConnections);
    set<KeyFrame *> s;
    for (map<KeyFrame *, int>::iterator mit = mConnectedKeyFrameWeights.begin(); mit != mConnectedKeyFrameWeights.end(); mit++)
        s.insert(mit->first);
    return s;
}

vector<KeyFrame *> KeyFrame::GetVectorCovisibleKeyFrames() {
    // 与当前关键帧至少有 15 个共同地图点。
    unique_lock<mutex> lock(mMutexConnections);
    return mvpOrderedConnectedKeyFrames;
}

1.3 生成树


??一个连通无向图 G 的生成树 T 是 G 的一个极小连通子图,T 含有 G 中的全部 n 个顶点,但只有足以构成一棵树的 n - 1 条边。

??与该关键帧的共同地图点数量最多的关键帧,被选为该关键帧的父结点。生成树的权重就是共同地图点的数量。生成树的创建过程:

void KeyFrame::UpdateConnections() {
    // ...
    // 如果当前关键帧没有爹(mbFirstConnection == true),为它找个爹。
    if (mbFirstConnection && mnId != 0) {
        mpParent = mvpOrderedConnectedKeyFrames.front();
        mpParent->AddChild(this);
        mbFirstConnection = false;
    }
}

1.4 本质图


  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-06-26 17:03:41  更:2022-06-26 17:04:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:29:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码