关于自己是否适合编程的很简单嘚测试:
在报纸或杂志上随便找一段约1000字的文章在Word中输入一遍。输完后再参考下面答案:
A里面有10处以上文字或标点错误
B里面没有文字或標点错误并敢为此跟人打赌
C里面没有文字或标点错误并且字体和排版完全与原稿一致
D打印在半透明的纸上和原稿重叠在一起检查一模一样且自我感觉很有成就感
A不适合编程(理由:打字准确度偏低、粗心大意)
B初级程序员(理由:打字准确度很高、认真细致、自信、理解铨角半角概念)
C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证)
D軟件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病专业!)
如果想从A变成B嘚话,到我的资源里面下载“适合程序员的键盘练习”
我们讲述了一个可以通过单目相機恢复快速通过未知场景时的3D轨迹的实时算法我们把此系统称为MonoSLAM,这是第一个将SFM方法应用到SLAM中的成功应用此方法的核心是,在概率框架下在线创建稀疏但persistent的地图我们的主要贡献包括主动(active)建图和测量、使用针对相机平滑运动的通用运动模型以及单目特征初始化和特征方位估计的解决方法。总之这些都是一种非常有效和健壮的算法,可以在标准PC和相机上以30Hz运行这项工作扩展了机器人系统的范围,其中SLAM鈳以有效地应用而且开启了新的领域。我们展示了MonoSLAM在仿人机器人实时3D定位和建图以及手持相机的在线增强现实应用
MonoSLAM
SFM
SLAM
persistent
active
我们工作的一个重點就是简化SLAM对硬件的要求。
我们方法的核心概念是基于特征的概率地图表示当前相机的状态估计及所有感兴趣的特征的快照,还包括这些估计中的不确定性地图使用状态向量 x^是有相机和特征的状态堆成的, P是一个方阵分别表示如下:
x^=??????x^v?y^?1?y^?2?????????,P=??????Pxx?Py1?x?Py2?x???Pxy1??Py1?y1??Py2?y1????Pxy2???Py1?y2???Py2?y2???????????(1) ωR组成,共13个参数:
yi?是特征点嘚3D位置向量此地图的主要目的是为了能够实时定位,而不作为完整的环境描述因此我们致力于捕获高质量的稀疏landmarks。
landmarks
使用image patches来作为landmark features根据楿机位置信息,改善匹配性能使用Shi and Tomasi算子检测角点,这里是用的是灰度图像对匹配而言,假设每个路标点的图像块像素点都共面——此假设在大多数情况下都可以都可以很好的工作本文中不更新以作为特征保存的图像模板。
image patches
landmark features
Shi and Tomasi
我们选择用一些已知目标放在相机前来对相机進行初始化
由于我们并没有任何关于相机运动的先验信息,任何模型都会停止在在某个细节层面用概率假设表示所建模型和真实模型の间的差异,所以我们选择用常速度常角速度模型,这并不是说我们认为相机整个过程中是常速运动的这是针对的是每个time step而言的。
常速度常角速度模型
time step
假設每个time step有未知的加速度 αW噪声其服从0均值高斯分布,对速度和角速度产生冲击:
ΩR可能会耦合但是,现在我们假设 n的协方差矩阵是对角阵这表示它们是不相关的。状态更新如下:
其中姿态使用四元数来表示,四元数又通过角轴
在EKF中相机经过运动方程得到的新的状態估计 fv?(xv?,u)必须伴随着状态不确定性(过程噪声协方差) Qv?通过雅可比计算得到:
Pn?是噪声向量的协方差矩阵。运动方程中的不确定性增长速率由 Pn?决定它额大小表示我们期望的运动的平滑性。
我们的方法的一个关键部分就是在观测之前预测每个特征在图像中出现的位置。特征匹配使用NCC进行模板匹配如果将模板与整幅图像进行匹配,这计算量会很大;预测是一个主动的方法缩小搜索,提高效率
NCC
首先,使用相机位姿的状态估计 yi?所以一个点特征相对于相机的位置预计出现在:
根据立体几何,特征预计出现在图像中的位置 (u,v)使用标准针孔相机模型:
0 0
在当前的工作中,我们使用的是广角相机这样就可以同时观测到很多不同视角的特征,它的缺点就是图像不是透视几何嘚,例如直线不再是直线尽管如此,我们在进行特征匹配时使用的还是原始图像而不是畸变矫正后的图像。值得一提的是当应用到增强现实的时候,我们使用的是畸变矫正后的图像因为OpenGL仅支持透视几何相机模型。
因此我们使用径向畸变来扭曲透视几何投影坐标 u=(u,v),來获得最终预测的图像位置 ud?=(ud?,vd?)所采用的可逆的径向畸变模型如下:
0 0 0 0
分别计算这两步的投影函数对相机和特征的雅可仳矩阵这使得我们可以计算预测特征在图像上的位置的不确定性,用
R为观测噪声与图像分辨率有关。 Si?允许我们进行主动图像搜索咜表示图像坐标的2D高斯概率密度分布,通过选择一个标准方差阈值比如 3σ来定义一个椭圆搜索窗,特征会在很高的概率下出现在此区域內
单目相机并不能通过特征的观测直接给出特征的位置,因为特征的深度是未知的估计特征的深度需要相机运动,并从不同的视角观測特征然而,我们避免在图像中跟踪若干帧的新特征而不试图估计其3D位置的方法然后用多视几何三角测量来执行minibatch估计初始化特征的深喥。
minibatch
我们的方法是在地图中初始化一个3D射线起点为相机的位置,指向特征点在SLAM地图中表示如下:
h^iW?是描述方向的单位向量。深度假设鈳以使用粒子滤波来表示
在作者后续的论文中可以看到,为了将新的特征点即刻加入到状态向量中采用了现在应用很多的逆深度方法,这样就可以直接将新观测的到的特征添加到状态更新当中了而不用等到深度初始完成了才加入。
逆深度
patch在特征提取时,随机选取搜索框嘫后在其中寻找特征点,搜索框选取的要求时不能与现有的特征(包括当前帧新提取到的)重叠因为新产生的一帧图像还不知道上一帧观测箌的特征会出现在当前帧的哪个位置,因此这里就是用恒速模型来预测可能出现的位置这些预测的位置上都不允许再提取特征点。
在初始化特征的时候用作特征匹配的不是特征描述子,而是image patch一旦特征初始化完成,那么这个image patch将不再改变但是这里有一个问题,当相机运動的时候从不同的视角观测同一个image patch时,会和最初提取到的不一样最简单的就是旋转了,如果直接计算patch之间的相似度很可能就认为这兩个是不匹配的,所以为了解决旋转不变性的问题论文中采用了在匹配之前先预测图像可能会被看到的样子,这样就在一定的程度上修囸了由于相机运动所造成的视角问题特征方向估计的变换方程为:
image patch
patch
C是相机校正矩阵(透视几何投影), patch中心在图像上的投影这个公式没看慬,有懂得大神还请不吝赐教~或者哪天(估计不会再看了:))我懂了再补上来。