LAM,C++编程是必备技能.不过,大家在学校里学习的书本一般比较老,主要还是C++98那些老一套. 本文所谓的C++新特性是指C++11及其以后的C++14.C++17增加的新关键字和新语法特性.其中C++11是C++98以来最重要的一次变化,而其后的C++14.C++17是在该基础上的完善和补充. 那么,问题来了,如果我不想学习新特性,还是像以前那样编程可以吗? 答案是:可以,不过这就像是别人已经在用铁制刀具切瓜了,你还在石器时代使用石头刀具,你说,效率能一样吗? 看看下面你心里就有答案了.…
点"计算机视觉life"关注,置顶更快接收消息! 小白:师兄,g2o框架<从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码>,以及顶点<从零开始一起学习SLAM | 掌握g2o顶点编程套路>我都学完啦,今天给我讲讲g2o中的边吧!是不是也有什么套路? 师兄:嗯,g2o的边比顶点稍微复杂一些,不过前面你也了解了许多g2o的东西,有没有发现g2o的编程基本都是固定的格式(套路)呢? 小白:是的,我现在按照师兄说的g2o框架和顶点设计方法,再去看g2…
点"计算机视觉life"关注,置顶更快接收消息! ## 小白:师兄,上一次将的g2o框架<从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码>真的很清晰,我现在再去看g2o的那些优化的部分,基本都能看懂了呢! 师兄:那太好啦,以后多练习练习,加深理解 小白:嗯,我开始编程时,发现g2o的顶点和边的定义也非常复杂,光看十四讲里面,就有好几种不同的定义,完全懵圈状态...师兄,能否帮我捋捋思路啊 师兄:嗯,你说的没错,入门的时候确实感觉很乱,我最初也是花了些时间…
首发于公众号:计算机视觉life 旗下知识星球「从零开始学习SLAM」 这可能是最清晰讲解g2o代码框架的文章 理解图优化,一步步带你看懂g2o框架 小白:师兄师兄,最近我在看SLAM的优化算法,有种方法叫"图优化",以前学习算法的时候还有一个优化方法叫"凸优化",这两个不是一个东西吧? 师兄:哈哈,这个问题有意思,虽然它们中文发音一样,但是意思差别大着呢!我们来看看英文表达吧,图优化的英文是 graph optimization 或者 graph-based op…
点击公众号"计算机视觉life"关注,置顶星标更快接收消息! 本文编程练习框架及数据获取方法见文末获取方式 菜单栏点击"知识星球"查看「从零开始学习SLAM」一起学习交流 点云滤波后为什么还需要平滑? 小白:师兄,师兄,上次你说的点云滤波我学会啦,下一步怎么把点云变成网格啊? 师兄:滤波只是第一步,在网格化前我们还需要对滤波后的点云进行平滑(smoothing) 小白:不是已经滤波了吗?怎么还要平滑啊?滤波和平滑不一样吗? 师兄:确实不太一样.我们用RGB-D,激光…
对VSLAM和三维重建感兴趣的在计算机视觉life"公众号菜单栏回复"三维视觉"进交流群. 小白:师兄,上次你讲了点云拼接后,我回去费了不少时间研究,终于得到了和你给的参考结果差不多的点云,不过,这个点云"可远观而不可近看",放大了看就只有一个个稀疏的点了.究竟它能干什么呢? 师兄:这个问题嘛...基本就和SLAM的作用一样,定位和建图 小白:定位好理解,可是师兄说建图,这么稀疏的地图有什么用呢? 师兄:地图分很多种,稀疏的,稠密的,还有半稀疏的等,你输出…
本文提纲 先热热身点云是啥你知道点云优缺点吗?点云库PCL:开发者的福音PCL安装指北炒鸡简单的PCL实践留个作业再走先热热身 小白:hi,师兄,好久不见师兄:师妹好,上周单应矩阵作业做了吗?小白:嗯,做了,这个单应矩阵真的挺有意思的.作业之外,我发现了一个新技能...师兄:什么技能?小白:我发现很多网上流传的图片都可以用上次我学过的单应矩阵实现,你看这张图,我第一次看到还以为是真的 现在知道这不就是我们上节课讲的单应矩阵的变换吗?果然我在网上找到了原图 现在我也会用OpenCV里的单应函数做这…
小白最近在看文献时总是碰到一个奇怪的词叫“homography matrix”,查看了翻译,一般都称作“单应矩阵”,更迷糊了.正所谓:“每个字都认识,连在一块却不认识”就是小白的内心独白.查了一下书上的推导,总感觉有种“硬凑”的意味,于是又找到了师兄... 神奇的单应矩阵小白:师兄~单应矩阵是什么鬼啊?我看书上的推导,每一步勉强能看懂,但还是不太理解其背后的物理意义,感觉不能转化为自己理解的方式啊师兄:哦,我第一次看的时候也是这种感觉 小白:而且这个名字好绕口啊,我完全没法和它的物理意义联系起来…
自从小白向师兄学习了李群李代数和相机成像模型的基本原理后,感觉书上的内容没那么难了,公式推导也能推得动了,感觉进步神速,不过最近小白在学习对极几何,貌似又遇到了麻烦... 小白:师兄,对极几何这块你觉得重要吗?师兄:当然重要啦,这个是多视角立体视觉的核心啊 小白:那师兄一定得帮帮我讲清楚啊,最近在看书上这部分内容,感觉很难理解呢!师兄:哪里不理解?书上公式推导的挺详细了都 小白:这么说吧,公式推导我也能大概看懂,但总觉得不知道为啥这么推导,这样推导的物理意义是什么?师兄:哦哦,明白啦,就是不能转…
上一篇文章<从零开始一起学习SLAM | 为啥需要李群与李代数?>以小白和师兄的对话展开,受到了很多读者的好评.本文继续采用对话的方式来学习一下相机成像模型,这个是SLAM中极其重要的内容,必须得掌握哦~ 小白:师兄,上次听你讲了李群李代数,有种“听君一席话胜读十年书”的赶脚~后来看书感觉容易理解多了呢!师兄:是吗?那太好啦,给你讲的过程也加深了我的理解呢小白:那师兄今天要不要继续加深理解一下相机成像模型 的部分呢?师兄:额..好啊(感觉被套路了,不过想想上次小白师妹请客吃了烧烤呢)小白:讲完…
很多刚刚接触SLAM的小伙伴在看到李群和李代数这部分的时候,都有点蒙蒙哒,感觉突然到了另外一个世界,很多都不自觉的跳过了,但是这里必须强调一点,这部分在后续SLAM的学习中其实是非常重要的基础,不信你看看大神们的论文就知道啦. 关于李群李代数,其实高翔的<视觉SLAM十四讲>里推导什么的挺清楚了,本文就在高博的基础上用比较容易理解的语言讲述一下重点. 首先,假装(也可能是真的)自己是个小白,我们假想对面坐了一个大牛师兄,下面我们开启问答模式. 为啥需要李代数? 小白:师兄,我最近在学习SLAM…
刚体,顾名思义,是指本身不会在运动过程中产生形变的物体,如相机的运动就是刚体运动,运动过程中同一个向量的长度和夹角都不会发生变化.刚体变换也称为欧式变换. 视觉SLAM中使用的相机就是典型的刚体,相机一般通过人手持.机载(安装在机器人上).车载(固定在车辆上)等方式在三维空间内运动,形式包括旋转.平移.缩放.切变等.其中,刚体在三维空间中最重要的运动形式就是旋转.那么刚体的旋转如何量化表达呢? 三维空间中刚体的旋转表示三维空间中刚体的旋转总共有4种表示方法,高翔的十四讲中的第3讲比较详细的讲解了…
在涉及到计算机视觉的几何问题中,我们经常看到齐次坐标这个术语.本文介绍一下究竟为什么要用齐次坐标?使用齐次坐标到底有什么好处? 什么是齐次坐标?简单的说:齐次坐标就是在原有坐标上加上一个维度: 使用齐次坐标有什么优势? 齐次坐标的使用能够大大简化在三维空间中的点线面表达方式和旋转平移等操作,具体分如下几点进行说明. 1.能否非常方便的表达点在直线或平面上在2D平面上,一条直线 l 可以用方程 ax + by + c = 0 来表示,该直线用向量表示的话一般记做 我们知道点p = (x, y)在直…
视觉 Vs. IMU 小白:师兄,好久没见到你了啊,我最近在看IMU(Inertial Measurement Unit,惯性导航单元)相关的东西,正好有问题求助啊 师兄:又遇到啥问题啦? 小白:是这样的,现在VIO(Visual-Inertial Odometry,视觉惯性里程计)很火,我就想试试把IMU测量的信息和图像进行简单的融合,这样利用IMU测量的先验信息,可以给图像一个比较好的初值... 师兄:嗯嗯,这个思路没问题的啊,图像信息和 IMU 确实存在一定互补性,两者各有所长,取长补短.…
在<零基础小白,如何入门计算机视觉?>中我提到过,计算机视觉的研究目前主要分为两大方向:基于学习的方法和基于几何的方法.其中基于学习的方法最火的就是深度学习,而基于几何方法最火的就是视觉SLAM. SLAM将成为计算机视觉的下一个风口 在前几年计算机视觉的三大顶级会议(CVPR,ICCV,ECCV)上,几乎全是深度学习的研究,而这样的情况在这两年出现了新的变化:在2018年计算机视觉国际顶级会议 CVPR论文录用名单中,其中涉及SLAM/三维视觉 的工作超过 90 篇,占据了全体收录论文的近…
SLAM涉及的知识面很广,我简单总结了 “SLAM知识树” 如下所示: (公众号菜单栏回复 “树” 可获得清晰版) 可以看到涉及的知识面还是比较广的.这里放出一张SLAM圈子里喜闻乐见的表达悲喜交加心情的漫画图,大家可以感受一下: 每个学SLAM的小伙伴可以说都是冒着“头顶凉凉”的巨大风险,勇气可嘉.下面结合SLAM知识树展开具体说说. 编程环境首先先说电脑环境和编程. 1.电脑环境:Linux环境,推荐Ubuntu16.04. 有人问Windows行不行?这么说吧,如果你是一位SLAM领域的大…
点击公众号"计算机视觉life"关注,置顶星标更快接收消息! 本文编程练习框架及数据获取方法见文末获取方式 菜单栏点击"知识星球"查看「从零开始学习SLAM」一起学习交流 小白:师兄,师兄,你在<从零开始一起学习SLAM | 给点云加个滤网>.<从零开始一起学习SLAM | 点云平滑法线估计>中都提到了点云网格化,这个听起来高大上,不过到底是什么意思呢? 师兄:别急,是这样的:你看我们之前处理的都是一个个点,不管是滤波还是平滑,我们都是对一个…
可能是最早的学习Android N新特性的文章 Google在今天放出了Android N开发者预览版.Android N支持Nexus6及以上的设备.5太子Nexus5不再得到更新. Android N相比于Android 6.0增加了哪些新的功能呢,开发者要关心哪些API呢,通过本篇文章,将一一得到答案. Android N的新特性 分屏多窗口(Multi-Window Support) 还在为看美剧的时候,收到微信消息而在两个应用间来回切换而烦恼吗.在Android N上,再也不用烦恼这个…
SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻译为:同时定位与建图.同时定位与地图构建. 「同时定位与地图构建」这几个词,乍一听起来非常拗口,为了不在一开始就吓跑读者,我们先不对其进行专业的解释,用一个日常生活中形象的例子来进行说明. 初 步 认 识 S L A M 我们知道现在有不少家用的扫地机器人,可以代替人对室内进行自动清扫.早期的扫地机器人并不智能,它只是具有简单的避障功能,在室内随机游走,遇到障碍物就转弯,这样会导致有很…
一.简介 Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.Java 8是 Java 自 Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子说明在什么场景下适合使用. 语言 编译器 库 工具 JVM 二.Java语言的新特性 1.Lambda表达式 Lambda 表达式(也称为闭包)是Java 8中最大和最令人期待的语言改变.它允许我们将函数当成参数传递给某个…
前言 这篇博客是我在b站进行学习es6课程时的笔记总结与补充. 此处贴出up主的教程视频地址:深入解读ES6系列(全18讲) 1.ES6学习之路 1.1 ES6新特性 1. 变量 2. 函数 3. 数组 4. 字符串 5. 面向对象 6. Promise 7. generator //类似于Promise 8. 模块化 1.2 变量 1.2.1 let.var.const和作用域 知识点: 1. ES6之前的JS只有函数作用域和全局作用域,ES6引入了let后新增了块级作用域,还引入const.…
自己一直用的是C++98规范来编程,对于C++11只闻其名却没用过其特性.近期因为工作的需要,需要掌握C++11的一些特性,所以查阅了一些C++11资料.因为自己有C++98的基础,所以从C++98过渡到C++11并不算特别吃力,读了一些书籍后,算是对C++11有了个比较基础的理解,感觉程序员还是要经常保持新语言新特性的更新,现在 C++ 标准都出到C++17了!这篇文章就是对C++11一些常用新特性的一些总结,以C++98和 C++11在语法上的差异来突出C++11新特性的非凡优势. 新语法…
(1)定义文档类型声明 <!DOCTYPE html> (2)定义页面编码 <!—HTML 4.01中定义的设置页面编码的方式--> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <!—HTML5中定义的设置页面编码的方式--> <meta charset="UTF-8"> (3)样式和脚本文件的引…
1.方法顺序无关 Objective-C类由声明文件h和实现文件m组成,所有的public方法都在h文件中声明,private方法可以写在m文件中,但是在早期的编译环境中需要注意方法的顺序,例如下面的代码,在早期的编译环境会给出警告: 类和方法声明: @interface ObjcNewFeatures : NSObject -(void)doSomething:(NSString *) text; @end 实现: @implementation ObjcNewFeatures -(void)…
  目录 一.阴影 1.1.文字阴影 1.2.盒子阴影 二.背景 2.1.背景图像尺寸 2.2.背景图像显示的原点 三.伪元素 3.1.before 3.2.after 3.3.清除浮动 四.圆角与边框 4.1.border-radius 圆角 4.2.边框图片border-image 五.变形 transform 5.1.rotate()2D旋转 5.2.设置原点 transform-origin 5.3.平移 translate() 5.4.缩放 scale 5.5.斜切扭曲skew 六.渐…
总概 1) 性能提升 打包大小减少 41% 初次渲染快 55%,更新渲染快 133% 内存减少 54% 使用 Proxy 代替 defineProperty 实现数据响应式 重写虚拟 DOM 的实现和 Tree-Shaking 2) 新增特性 Composition (组合) API setup ref 和 reactive computed 和 watch 新的生命周期函数 provide 与 inject 新组件 Fragment - 文档碎片 Teleport - 瞬移组件的位置 Susp…
一 总结 熟悉廖雪峰git基础; 由于git跟踪的是修改,而不是版本号:因此对于修改撤销的操作,文件在eclipse中依旧有>修改标记,这点不同于svn. 二 BUG描述:熟悉Git基础 在Git中,HEAD表示当前版本,它是一个指针:Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git把HEAD指向发生改变.工作区,就是我们电脑中新建的,可以看得到的目录.版本库,在我们工作区执行git init之后,或多出一个.git的目录,它就是git的版本库.Git的版本库里存了很多东西…
HTML5又2008年诞生,HTML5大致可以等同于=html+css3+javascriptapi.... so --->支持css3强大的选择器和动画以及javascript的新的函数 先来记录一下HTML5增加的几个新的标签吧! 1.  <canvas>画布标签 HTML5的新标签 举例: <html> <head> <title>canvas画布的应用</title> <p align="center"&g…
文章主要参考  关于OC中的block自己的一些理解(一) 对块的深入理解  浅析ios开发中Block块语法的妙用 1.关于block block的作用:保存一段代码. 苹果官方推荐的一种语法,类似于C语言的函数,但是比函数更加灵活. ^是block语法的标识. 2.在Object-C中,块被当做一个对象来处理,这个对象可以: 有自己的局部变量 可以传入参数 有返回值 可以访问自己定义时的上下文变量 可以修改自己定义时特定的上下文变量 作为参数传递给其它函数 3.block的基本语法 4.bl…
泛型:jdk1.5版本以后出现的一个安全机制.表现格式:< > 好处: 1:将运行时期的问题ClassCastException问题转换成了编译失败,体现在编译时期,程序员就可以解决问题. 2:避免了强制转换的麻烦. 只要带有<>的类或者接口,都属于带有类型参数的类或者接口,在使用这些类或者接口时,必须给<>中传递一个具体的引用数据类型. 泛型技术:其实应用在编译时期,是给编译器使用的技术,到了运行时期,泛型就不存在了. 为什么? 因为泛型的擦除:也就是说,编辑器检查了…