multi-camera项目学习
1. 安装:
2. 试运行example
3. 传入参数分析:
./Examples/Lafida/multi_col_slam_lafida ./Examples/small_orb_omni_voc_9_6.yml ./Examples/Lafida/Slam_Settings_indoor1.yaml ./Examples/Lafida/ $HOME$/Downloads/IndoorDynamic
第一个参数:small_orb_omni_voc_9_6.yml 用于加载ORB_VOCALBULARY,源码中为:
cv::FileStorage fsVoc(strVocFile.c_str(), cv::FileStorage::READ);
ORBVocabulary Vocabulary;
Vocabulary.load(fsVoc);
mpVocabulary = new ORBVocabulary(Vocabulary);
为什么需要加载这个呢,主要用于特征空间的划分和BoW Vector的计算;ORB-SLAM采用的是bag of word 的方式将图像中的多个局部描述符表示成一个定长的全局特征,而vocabulary tree 是局部描述符量化和索引的一种高校数据结构。它实际上就是通过学习的方法实现对原始特征空i教案的一种划分而已。 ORB-SLAM2中附带的ORBvoc.txt是拿大量通用场景下啊的图像提取的ORB特征,分册聚类出来的,作者生成在不同场景下都可以有很好的效果。2. 计算bow vector, 关键帧和查询帧的相似度是通过bow vector的距离来衡量的;参考: https://www.zhihu.com/question/49153462
第三个参数输入的是一个路径./Examples/Lafida/ , 主要用于加载多相机标定时的相机外参和内参;用到的文件为MultiCamSys_Calibration.yaml, 用于保存三个相机之间的RT参数,其中T参数是经过CAYLEY TRANSFORM的;然后就会用到InteriorOrientationFisheye0.yaml 等文件,用于加载当前相机的内参;一些重要的文件或参数的读取都是在Csystem.cpp文件中, 其中相机外参文件中的参数为1*6, 前三个表示旋转,后三个表示平移,不同的标定方法得到的参数格式也会有所不同,源码中也给出了相应的转换方式。
# camera back
CameraSystem.cam1_1: -0.0238361786473007 #r1
CameraSystem.cam1_2: -2.05998171167958 #r2
CameraSystem.cam1_3: 0.695126790868671 #r3
CameraSystem.cam1_4: -0.140202124607334 #t1
CameraSystem.cam1_5: 0.0219677971160655 #t2
CameraSystem.cam1_6: -0.0226322662838432 #t3
example中的文件如上所示,源码中在load文件时,会将该参数load为一个6*1的矩阵, 然后经过cayley2hom()函数转换为4*4;转换方法如下:
/**
* 6x1 minimal homogeneous transformation vector to homogeneous 4x4 transformation matrix
* @param c 6x1 Cayley parameters and translation
* @return T 4x4 homogeneous transformation matrix
*/
template<typename T>
cv::Matx<T, 4, 4> cayley2hom(const cv::Matx<T, 6, 1>& cayleyRep)
{
cv::Matx<T, 3, 1> cayleyR(cayleyRep(0, 0), cayleyRep(1, 0), cayleyRep(2, 0));
cv::Matx<T, 3, 3> R = cayley2rot(cayleyR);cv::Matx<T, 4, 4> homM(R(0, 0), R(0, 1), R(0, 2), cayleyRep(3, 0),R(1, 0), R(1, 1), R(1, 2), cayleyRep(4, 0),R(2, 0), R(2, 1), R(2, 2), cayleyRep(5, 0),T(0), T(0), T(0), T(1));return homM;
}
通过函数也可以看出来,主要时对旋转矩阵进行了转换,平移矩阵不变,剩余的位置用0和1补齐成为4x4的RT矩阵;
我标定得到的外参文件是3*4的矩阵,3*3的R,以及3*1的T,这里也可以用hom2cayley() 函数再次转换以便于保存参数到.yaml文件中;这里给出一个example:
cv::Matx<double, 4, 4> C2(0.971856, 0.0218653 ,- 0.234557 , 0.101694,-0.0538169, 0.98996 ,- 0.130699, 0.191133,0.229345, 0.139644, 0.963276 , 0.0592288,0,0,0,1);cv::Matx <double, 6, 1> new_C2 = hom2cayley(C2);
cout << "new_C2" << std::endl << new_C2;
3. 运行步骤:
按照要求传入参数,其中slam参数设置采用Slam_Settings_indoor1.yaml中的参数,将extractor.descSize 改为16;现有如下几个问题:1. 运行过程中会报错。显示如下:
2. camera1的特征点提取明显少于camera0
另外,很多人看完之后好奇多目的标定,这里奉上我之前总结的标定方法:
https://blog.csdn.net/qq_25458977/article/details/91044103
主要使用的是MCPTAM这个项目实时在线标定,我记得这个项目编译的时候会有一些小的问题,单摄像头可以很快标定完成,但是多摄像头需要一点耐心,有几个需要注意的就是:
1. 重叠区域一定要有,甚至是越大越好;
2.尽可能在纹理比较丰富的场景中,更方便标定成功。
multi-camera项目学习相关推荐
- Android Camera HAL3 - Multi Camera(1)
本文介绍下 Google Android 在其文档中对于 Multi-Camera 的描述,以及 Android R 中对 Camera HAL3 的一些新增内容,Multi-Camera 从 And ...
- PHP项目学习——控件
主要是在项目学习中总结的一些东西 动态效果 flashbar滚动条,增加动态效果,直接嵌入html中 <!--flash滚动条--><object classid="cls ...
- 如何自学python到做项目-总算明白如何通过项目学习python
在学习完Python的基础知识之后,有很多朋友为自己接下来要干什么感到迷茫.不知道应该通过什么样的项目来锻炼自己编程水平和思维能力.接下来我就给大家说几个适合Python的新手项目和练手项目,Pyth ...
- 延大计算机文化基础课程作业,基于项目学习的大学《计算机文化基础课》教学设计...
摘要: 从大学教育看,计算机文化已经愈来愈多地融入了各专业科研和专业课的教学过程之中.计算机教学已成为素质教育的必要组成部分,良好的信息素养是当代大学生可持续发展的重要基础平台.大学计算机文化基础课程 ...
- TheBeerHouse 网站项目学习笔记(5)---架构设计
前述讨论: TheBeerHouse 网站项目学习笔记(1)----换肤技术 TheBeerHouse 网站项目学习笔记(2)----个性化管理 ...
- 引入dubbo依赖的版本是多少_Dubbo 项目学习(四) 接口抽取以及依赖版本统一
引言 前面的系列项目中,我们会发现有个接口是一样的,我们需要单独抽取出来,统一维护,这样可以更加高效的处理项目.同时,两个项目的maven依赖包也可以统一维护,这样有助于项目在多人协作的同时,保证项目 ...
- 01-Flutter移动电商实战-项目学习记录
01-Flutter移动电商实战-项目学习记录 一直想系统性的学习一下 Flutter,正好看到该课程<Flutter移动电商实战>的百度云资源,共 69 课时,由于怕自己坚持不下去(经常 ...
- 项目学习 - 收藏集 - 掘金
一款开源的视频直播项目 --EvilsLive - Android - 掘金 项目介绍 EvilsLive 是一个视频直播件开发工具包(SDK), 目前只支持 Android, 主要负责视频直播的采集 ...
- python3实战练手项目_Python0基础练手项目有哪些值得推荐?附实战项目+学习图谱...
原标题:Python 0基础练手项目,有哪些值得推荐?附实战项目+学习图谱 刚学Python的时候,因为豆瓣帖子老沉,就写了一个顶帖脚本.就是用这个脚本,给自己的帖子顶了两年,在小组里追到了现在的女朋 ...
- VUE项目学习(三):win10版nginx部署vue项目
VUE项目学习(三):win10版nginx部署vue项目 niginx的安装和启停操作参照博客:https://blog.csdn.net/qq_26666947/article/details/1 ...
最新文章
- 女生参加web前端培训压力大吗
- 古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报: 请编写一个程序,使用上述算法加密或解密用户输入的英文字串...
- mysql和mybatis面试题_2020年,MyBatis常见面试题总结
- 【剑指offer】面试题03:数组中重复的数字(java)
- c语言第五章作业,《C语言程序设计》第五章作业.doc
- 我的第一本算法书(图解算法)——什么是二叉查找树
- 《越狱》的中国隐秘流行
- 全国各地车牌代码整理出数据库表,直接生成表
- 电子游戏理论基础初探
- Echarts经纬度坐标实现地图定位
- 全球与中国无线上网卡和行业市场需求及投资前景分析报告2022-2028年
- DOSBox下载安装
- 【随笔】Linux drop_caches
- Arduino基础入门篇25—红外遥控
- 计算机如何添加gust用户,win7系统如何创建安全的Guest账户
- 人工智能的应用无人驾驶技术
- 安卓ndk 忽略 error: undefined reference to '找不到符号
- 强烈推荐,一步一步学装电脑(有图)
- mysql初始数据库出错_安装MySQL提示initialize database(初始化数据库)错误解决方法...
- python 中^是什么意思,python 中%是什么意思
热门文章
- bzoj 1605: [Usaco2008 Open]Crisis on the Farm 牧场危机(DP)
- 喵哈哈村与哗啦啦村的大战(四)(树形DP)
- 吴恩达神经网络和深度学习-学习笔记-6-训练集、验证集和测试集 + 偏差bias和方差variance
- js排序算法详解-归并排序
- vivado根据语言模板定义一般IO的管脚约束文件xdc
- Nginx+php+mysql+wordpress搭建自己的博客站点
- ps教程分享:一定要记住这20种PS技术!
- 百度搜索URL参数的含义
- 前端试题-CSS试题(1)
- document.addEventListener的使用介绍