导航:首页 > 源码编译 > ransac算法代码

ransac算法代码

发布时间:2023-01-23 00:40:57

‘壹’ 全局视觉定位系统研究的意义

全局视觉定位

1. 引言
自主机器人是机器人研究的重点方向,定位和导航是自主机器人研究的核心问题。机器人在执行任务过程中需要确定自身当前位置,根据目标位置和当前位置之间的关系计算如何到达目的地完成任务,其中前者要解决的是自定位问题,后者是导航问题,本文主要研究前者。基于视觉的定位技术还能帮助盲人、视弱以至普通人确定自身位置。 环境模型是定位的基础。基于模型的定位方法包括基于环境三维模型和基于拓扑地图的定位方法。环境三维模型的建模过程非常复杂,特别是在室外的场景中建模可能遇到极大的困难。拓扑定位用图的形式来表示环境模型,其中图中的节点表示环境中的地点,连接节点的边表示地点之间的联系,拓扑定位目的是确定机器人当前的位置与地图中的哪个节点最近,也就是机器人处于哪个地点。

在无人驾驶中,感知、定位、规划决策、控制是四个基本的系统模块。由于当前算法还无法实现绝对的智能,因此依然需要大量的先验知识来提高模块性能、鲁棒性,以实现安全的自动驾驶。其中,高精地图是对道路及周边环境先验知识的集成。而建立在地图之上的准确定位,是判断行车状况的重要依据,为后续的感知、规划决策提供有力支撑。
用于定位的主要数据源目前主要有 GPS、激光雷达、视觉、毫米波雷达。对于视觉而言,虽然目前还没有一套产业内公认的足够可靠的定位方案,但是在这方面探索从未停止过,主要原因如下:
安全性是无人驾驶系统最重要的指标,因此大部分功能的实现,都是多源数据、不同算法结果的耦合。没有哪种传感器方案是完美的,比如 GPS RTK 作为广泛使用的方案,容易受卫星状况、天气状况、 数据链传输状况影响,在隧道内、室内和高楼密集区无法使用。再者,激光雷达虽然具有运算量小,提供深度信息,不受光照影响等优点,但信息稀疏,造价目前还十分昂贵,还不具备大批量车辆装配能力。相比较而言,摄像头提供的视觉信息,虽然会受到光照、天气影响,但是成本低,内容丰富,是目前辅助驾驶方案主要数据源,在地图定位方面也具有很大潜力。

由于主流基于视觉定位算法的核心思想一脉相承,所以本文仅从一系列重要算法框架组件角度,介绍了目前实践中最常用的、基于特征点的全局定位算法,即在地图坐标系下进行定位。本文省略了其中涉及到的优化、几何约束公式推导,旨在给同学们一个定位算法的宏观介绍,具体细节可以参考相关文献和书籍。

2. 基于特征点的全局定位算法视觉全局定位,指的是根据当前图像,求出相机在地图坐标系中的 6 个自由度 (Degree of freedom, DoF) 位姿 (Pose) , 即 (x, y, z) 坐标,以及环绕三个坐标轴的角度偏转 (yaw, pitch, roll) 。目前主要可以分类为基于 3D 结构的方法、基于 2D 图像的方法、基于序列图像的方法、基于深度学习的方法。其中,基于深度学习的方法属于端到端 (End-to-end) 的方法,而其它多阶段 (Multi-stage) 非端到端方法虽然流程有所差别,但算法思路大都如 Fig. 1 所示:
Figure 1: 根据查询图像,计算 2D-3D 转换矩阵,求解相机位姿
基于已建的地图,匹配历史中最相似的地图子集(图像/点云/特征点),根据匹配到的地图子集所提供的历史位姿真值、特征点坐标真值,计算点对间的变换矩阵,求解当前相机位姿。

所以,其核心包含图像描述、建图查询、特征匹配,位姿计算四个方面。这里仅仅是技术层面的宏观分类,实际算法框架不一定按照此顺序执行,而学者在研究中主要针对这些技术进行改进。整体而言,基于特征点的图像描述基本成熟,发展较少。而位姿计算由于是基于几何约束的优化问题,所以方法也较为固定。相对地,建图查询和特征匹配中改进技术较多。根据数据源不同,建图查询、匹配可以是2D-2D,2D-3D,3D-3D。2D 图像由相机得到,3D 点云可以由提供深度的双目相机、RGB-D 相机产生。

2.1 特征点提取
2D 图像本身是一个由亮度、色彩组成的矩阵,对视角、光照、色调变化等很敏感,直接使用十分困难。所以,一般会使用具有代表性的点进行相关计算。人们希望这样的点具有旋转、平移、尺度、光照不变性等优点。这些点称为图像的特征 (Feature) 点,包含关键点(Key-points) 和描述子 (Descriptor) 两部分。关键点表达了特征点的位置,而描述子则是对于特征点视觉特性的描述,大多为向量形式。一般而言,描述子主要是以某种模式,统计关键点周围的灰度/色彩梯度变化。一种鲁棒的描述子,在不同图像 的不同情况下,同一特征点的描述子的距离 (Distance) 应当较小。

描述子一般是人为手工设计的 (Hand-crafted features) 。经典的描述如 HOG(Histogram of oriented gradients)[1],SIFT(Scale-invariant feature transform)[2],SURF(Speeded up robust features)[3],AKAZE(Accelerated KAZE)[4] 等。

为了实时性的要求,一些计算速度更快的二值模式描述子被设计出来,如 LBP(Local binary patterns)[5],BRIEF(Binary robust independent elementary features),ORB(Oriented FAST and rotated BRIEF)[6],BRISK(Binary robust invariant scalable key-point)[7],FREAK(Fast retina key-point)[8] 等。

在深度学习流行之前,这些手工特征一直引领着整个计算视觉产业,直到今天,这些特征在那些缺少标注数据、约束较多的场景下,依然被广泛应用。下面简单介绍两类常用的描述子。

2.1.1 SIFTSIFT 描述子可以算是 CV 界最具影响力的技术之一。从关键点检测层面,主要使用高斯差分 (Difference of Gaussian, DoG) 方法检测多尺度空间上的极值点,作为关键点。而 Babaud 等人 [9] 证明了高斯平滑是唯一的能用多尺度空间平滑滤波核,为相关方法提供了充足的理论支持。
那么为什么这样的方法可以找到特征关键点呢?
由于高斯核可以通过模糊的方式把图像缩放到不同尺度空间,而梯度变化较小的平滑区域在不同尺度空间的值差距较小。相反,边缘、点、角、纹理等区域则差距较大。这样通过对相邻尺度的图像做差分,最终可以算得多尺度空间的极值点。但是,不同的图像细节本身就处于不同的尺度中。比如一副人物画像中,人脸可能经过较小的模糊就会被平滑为一片,而画框的角则可能需要更大尺度的平滑才会体现出局部“极值”。
因此,如 Fig. 2 所示,首先利用图像金字塔将图像先分组 (Octave) ,每组中再使用不同尺度的高斯核,形成一系列的层。这种方式比单纯地使用更多尺度的高斯核效果更好,可以检测到更多的特征点。需要注意的是,虽然 SIFT 使用了 DoG 进行关键点检测,但是其它检测方法也是可行的,并不影响 SIFT 描述子的建立。
Figure 2: 高斯差分方法

SIFT 特征点的描述子,可以理解为一种简单统计版的 HOG。如 Fig. 3所示,以检测到的关键点为中心,选取周围 16 × 16 的区域,将区域再组织为 4 个 4 × 4 的块(Patch)。对每一个块,使用 8-bins 的直方图对梯度进行统计,梯度方向决定落入哪个 bin,而梯度的模决定值的大小。为了保证尺度一致性,梯度大小需要进行归一化。为了保证旋转不变性,会根据 16 × 16 的区域内的所有梯度计算出一个主方向, 所有梯度按照主方向进行旋转。最终形成 4 × 4 × 8 的 128 维向量。
Figure 3: 基于梯度分块统计的 SIFT 描述子
2.1.2 二值描述子虽然在 SIFT 提出后,又产生了一些改进算法如 SURF、AKAZE 等,但是即使放在 2019 年的今天, 依然难以保证一些场景对算法实时性的要求。例如,手持设备一般算力有限。而无人驾驶中,CPU、GPU资源需要被多个计算密集型模块同时调度。因此,效率是考察算法实用性的重要指标。

为了提高效率,一些二值描述子被学者们提出。一般地,这些方法都是在特征关键点周围进行点采 样。然后比较一对点的灰度大小,结果以 0/1 表示,形成 N 维的二进制描述向量,构成特征点的二值模式。而不同二值描述子最大的差别,主要在于特征采样模式不同、点对选取方法不同。
Figure 4: LBP 描述子采样模式

如 Fig. 4所示,LBP 描述子采用对关键点周围,进行环形采样,并与中心关键点的灰度进行比较的方案。圆环上展示了灰度比较结果,黑色的点是 0,白色的点是 1。LBP 是二值描述子最简单的形式,而 ORB 改进了 BRIEF 特征,是目前比较常用的二值描述子。如 Fig. 5所示,在点对选取上,与单纯使用中心点不同,ORB 采用了随机的方式,更全面地描述局部细节。但点对的相关性会比较大,从而降低描述子的判别性(Discriminative)。ORB 直接采用了贪婪法、穷举法解决这一问题,寻找相关性低的随机点对。
Figure 5: ORB 描述子点对选取模式

以上二值描述子的采样方式和点对选取方式符合人们一般直觉,而 BRISK、FREAK 等描述子则提供了更加规则化、自带尺度信息的二值模式构建方法。例如,FREAK 描述子模仿了人眼的视觉采样模式。如 Fig. 6所示,每个采样点的值是红色圆圈范围内的灰度均值,蓝线则表示点对选取方案。
Figure 6: FREAK 描述子采样、点对选取摸式

二值描述子的高效率,主要体现在三个方面。

(1)二值描述子使用二进制向量作为特征描述,只需要 比较点对大小而不需要计算具体梯度。(2)两个描述子之间比较可以使用计算更快,更容易优化的汉明距离 (Hamming distance)。(3)由于每个二进制向量都对应一个十进制数,所以其本身也代了表一种模 式,而不需要像 SIFT 一样使用直方图进行表示。

二值描述子一般判别性不如 SIFT 家族描述子,但在特定场景下,配合并行化编程,可以在保证相似判别能力的同时,效率高出几十甚至百倍。
2.2 数据库建立与查询数据库可以理解为于地图 + 索引的集成。地图可以是由单纯的 2D 图像组成,也可以是由 3D 点云地图组成,也可以是 2D 图像和 3D 点云的结合。3D 点云地图生成主要使用三维重建的方法 SfM(Structure from motion),从时间序列的 2D 图像中推算 3D 信息。如果有双目、RGB-D 相机提供深度,可以获得 更准确的 3D 点信息。其中也包含了一些诸如关键帧(Key-frame)的选取策略,具体方法超出了本文的讨论范围,有兴趣的同学可以自行查阅相关资料。数据库的作用在于:

对于一张输入的观测图像,通过数据库,查询建图历史(图像/点云/特征点),得到当前图像最可能观测到的地图子集(图像/点云/特征点),将地图与观测信息进行匹配,计算变换矩阵,得到观测相机的位姿。

索引则是加速这一过程的关键。数据库本身往往是巨大的。以美团的小袋机器人在北京朝阳大悦城二层试运营为例,安装有 3 个深度相机,即使经过筛选,也使用了将近 8 万张 900 × 600 的图片。考虑到定位所需要的实时性,查询时不可能每次都和 8 万张图片一一对比,所以要使用索引技术加速整个算法。这方面技术与 SLAM 中的回环测试,视觉中的图像检索、位置识别等高度重合,以下仅介绍一般方法。

一张图像内有若干特征点,需要先对特征点进行编码,如 VLAD(Vector of locally aggregated descriptors) 编码,用局部描述子形成图像的全局描述。再使用索引,如 kd-tree,进行图像级查询。当然,编码和索引也可以同时进行,如层次化词袋模型(Bag-of-words,BoW)+ 正向索引 + 逆向索引的方法。
2.2.1 VLAD 编码VLAD(Vector of locally aggregated descriptors)[10],如 Fig. 7所示,是一种通过聚合局部描述子形成码本 (Codebook) ,通过累加计算描述子与码词 (Word) 的距离,进行全局编码的简单方法。一个 d 维描述子 x 通过 k 个码词的码本进行编码,可以形成一个 d*k 维的描述向量,向量中的值是描述子与第

k个码词在第 d 维的差。之后进行 L2 归一化,形成最后的 VLAD 向量。
Figure 7: VLAD 通过描述子与码词的距离进行编码
这里要特别提介绍一下 DenseVLAD[11] 和 NetVLAD[12] 。Torii 等人证明,DenseSIFT 在查询、匹配上都优于标准 SIFT。DenseVLAD 在四个尺度,以 2 个像素间隔的网格状采样模式,提取 SIFT 点。在全局随机采样 25M 个描述子,用 k-means 算法生成 128 个码词的码本。VLAD 向量在归一化后使用 PCA(Principal component analysis) 降维,形成最后 4096 维的 DenseVLAD 向量。如 Fig. 8所示,使用DenseSIFT 匹配后的内点(绿)数量更多。
Figure 8: DenseSIFT 和标准 SIFT 特征点,匹配后内点(绿)对比

而 NetVLAD,将 VLAD 中加入了监督信息,加强 VLAD 编码的判别性。如 Fig. 9所示,假设红、绿两个描述子来源于不应匹配到一起的两张图片。由于它们都离 VLAD 中心(×)半径较大且距离相似,经过 L2 归一化,它们编码后值也会很相似。而加入了红、绿描述子所对应图片不匹配的监督信息后,NetVLAD 生成的中心点(★)则可以更好地区分两个描述子,增加他们编码后的距离(半径)差。
Figure 9: NetVLAD 聚类中心(×)与 VLAD 聚类中心(★)对比。
2.2.2 BoW 编码 + 索引基于词袋模型 BoW[13, 14] 的特征编码及其设计思想在计算机视觉发展中具有举足轻重的地位,这里不再展开介绍。本文以 2D 查询图像匹配 2D 图像数据库为例,介绍一种常见的 BoW 编码、索引一体化的模型。如 Fig. 10所示,词典 (Vocabulary) 生成采用层次化方法,对于数据集中的所有描述子,按树状结构进行空间划分,每一层都是由 k-means 聚类计算。最终叶子节点就相当于码词(Fig. 10中有 9个码词)。
Figure 10: 带正向索引、逆向索引的层次化 BoW 模型
树的构造过程,实际上就是将原始图像编码的过程。但是编码本身并不能加快搜索过程,与 VLAD 相似,还是需要与数据库中的图像逐一比较。因此,这里设计了一种逆向索引(Inverse index) ,不需要比较编码后的向量。其原理如 Fig. 11所示,对于一张查询图像 (Query image) ,将提取的描述子输入到 BoW 中,最终会落入码词叶子结点 (Visual word) k 中。而每个码词对应一个索引,记录码词 k
对于数据库中第 i
张图的权重
(Fig.10)。这里权重使用 TF-IDF(Term frequency–inverse document frequency) 计算。即如果一个词 k
在某个图像 i
中出现频率高,在其它图像出现频率低,则这个词对于图像判别性较好,权重值
较高。最终通过投票 (Voting) 机制,选出匹配图像。同样需要注意的是,逆向索引不一定建立在树形结构的 BoW 上,它仅仅是提供一种快速查询的方法。
Figure 11: 通过逆向索引 + 投票机制,直接查询图像
而正向索引 (Direct Index) 的作用主要是记录构造 BoW 时,数据库图片的特征点都落入了哪些结点中,这样当查询到图像后,不需要计算特征点,可以直接通过索引提取特征点。

2.2.3 3D 点云查询2D 图像查询中,是先从语意层面查询图像,因此可以通过图像对特征点的空间范围进行约束。3D 点云查询没有这样的约束,所以具诸多难点。如需要考虑空间连续性,查询到的点是否都在可观测范围内等。这里仅介绍 Sattler 在 TPAMI 2016 上发表的方法 [15],经过多年的打磨,这套方法框架相对简洁、完善。由于其中的词典编码搜索步骤与上节内容有所重叠,这里仅介绍 Active Search 和 Visbility Filtering 两种机制。

Active Search 主要是为了使得匹配到的 3D 点尽可能空间中临近、有几何意义。如 Fig. 12所示,红 色的点通过一系列编码、精化过程(红线),匹配到了点云中一个点。根据所提出优先排序(Prioritization) 框架,从点云中找到一个概率最大的 3D 点,并反向(蓝线)匹配查询图像中的一个对应的 2D 点。
Figure 12: Active Search
Figure 13: Visbility Filtering
Visbility Filtering 主要是为了让匹配到的点尽可能可以被相机观测到(定位是无监督的,并不能知道所匹配到的点是否正确)。这里采用的方法是在使用 SfM 建立 3D 点云地图时,同时建立一个双向可见图 (Bipartite visibility graph) 。如 Fig. 13(左)所示,当一个点可以同时被两个相机观测时,则建立拓扑关系。Fig. 13(中)里,蓝色的点为匹配到的点,它们从观测视角上存在冲突。通过在已有拓扑上进 行图聚类,将相机两两分组,如 Fig. 13(右)。这样就可以生成新的图拓扑关系。之后通过判断每个子图(Sub-graph)间的重合情况,过滤掉那些那大概率不可见的点。

需要说明的是,虽然双目相机和 RGB-D 相机可以获取深度,查询 2D 图像也可以获得限定范围内的 3D 特征点坐标,但是由于目前技术限制,在室内材质复杂,室外大尺度场景下,深度并不可靠。所以 2D图像点和 3D 点云地图的匹配依然是一种重要的方法。

2.3 特征点匹配特征点匹配过程可以是在数据库查询中自适应完成的,这多见于基于 3D 结构的查询。匹配也可以是在查询后单独进行,多见于基于 2D 图像查询。特征匹配的目的是,为后续的变换矩阵计算提供匹配的点对集,实现位姿的解算。

2.3.1 经典 RANSAC随机抽样一致算法 (Random sample consensus,RANSAC)[16] 是一种经典的数据过滤、参数拟合算法。它假设数据(内点,Inliers)分布符合一定的数学模型,通过迭代计算,去除外点 (Outliers) 、噪声点, 同时获取概率上最佳的模型参数。在全局定位中,内点指正确的匹配,外点指错误的匹配,参数模型指匹配点对的空间变换矩阵。如 Fig. 14所示,经过 RANSAC 算法优化后,匹配更加合理。RANSAC 所期望找到的匹配子集需要满足两个指标:内点重投影误差尽可能小;内点数量尽可能多。所以基本流程如下:

· ①采样初始子集。

· ②计算变换矩阵。

· ③ 根据变换矩阵计算匹配点的重投影误差。

· ④ 去除误差较大的点

· ⑤ 循环①-④,保留最满足指标的匹配方案。
Figure 14: (上)原始特征匹配;(下)经过 RANSAC 算法优化后的匹配

其中,初始候选匹配是根据描述子之间的距离产生的,但重投影误差则只和关键点的空间位置有关, 与描述子本身无关。具体投影矩阵方法请参考“2.4 位姿计算”。需要指出的是,RANSAC 算法受到原始匹 配误差和参数选择的影响,只能保证算法有足够高的概率合理,不一定得到最优的结果。算法参数主要包括阈值和迭代次数。RANSAC 得到可信模型的概率与迭代次数成正比,所得到的匹配数量和阈值成反比。因此实际使用时,可能需要反复尝试不同的参数设置才能得到较优的结果。

学者们对经典 RANSAC 算法进行了很多改进,如 Fig. 15所示,提出了全局 RANSAC(Universal- RANSAC)[17] 的结构图,形成了具有普适性的 RANSAC 架构,涵盖了几乎所有的 RANSAC 的改进方 面,如预滤波、最小子集采样、由最小子集生成可靠模型、参数校验、模型精化。
Figure 15: Universal-RANSAC 通用算法框架

2.3.3 可微分 RANSAC由于手工描述子在定位领域依然表现出较高的性能,所以一些学者开始探索使用深度学习代替算法框架中的某些部分,而不是直接使用端到端的位姿估计模型完全代替传统方法。可微分 RANSAC(Differentiable RANSAC,DSAC)[18] 旨在用概率假说选择代替确定性假说选择,使得 RANSAC 过程可以被求导,流程如 Fig. 16所示,其中“Scoring”步骤依然采用重投影误差作为指标,所不同的是,误差是基于整张图像而不是特征点,而原先筛选特征点匹配的过程被换为了直接以概率筛选相机位姿假设 h 的过程。虽然目 前方法局限性比较大,但 DSAC 为如何在当前无监督为主的定位算法框架中加入先验知识,提供了一种可行的思路。
Figure 16: 差分 RANSAC 算法框架

P3P 法可以看作是 PnP 法的特殊解法,如 Fig. 17所示,利用三角形相似性质增加更多约束,只需要 3 对点就可以求解。其它解法还有直接线性变换法 (Direct linear transformation,DLT),EPnP(Efficient PnP) 法,和 UPnP(Uncalibrated PnP)等。相对于以上线性优化方法,非线性优化方法如Bundle Adjustment(BA) 也有着广泛的应用。BA 方法在视觉 SLAM 中是一种“万金油”的存在,可以同时优化多个变量,这样可以一定程度缓解局部误差带来的系统不鲁棒,感兴趣的同学可以翻阅相关资料更深入地进行了解。
Figure 17: 2D-3D 变换矩阵计算中的 P3P 方法

3. 总结与展望

本文从图像描述、建图查询、特征匹配,位姿计算四个方面介绍了基于特征点的位姿估计算法。虽然传统视觉全局定位方法目前依然是实际应用中的首选,但是,传统方法是建立在特征点被正确定义、正确提取、正确匹配、正确观测的前提下进行的,这一前提对于视觉本身而言就是巨大的挑战。其次,由于传统方法是 multi-stage 框架,而非 end-to-end,所以中间每个环节,环节之间的交互,都需要众多参数调整,每个环节的技术都可以作为一个单独的研究方向。实际应用时,也需要加入对应具体场景的大量tricks,工程上比较复杂。

而人们对 end-to-end 方法的期望催生出了如 PoseNet,VLocNet,HourglassNet 等网络,在 benchmark上取得了不错的成绩。笔者认为目前 end-to-end 的方法还存在很多问题,主要有 loss function 缺少几何 约束,建图时位姿的 6 自由度空间并不连续,与输入空间难以形成良好映射,而且缺少相应的位姿回归、 精化机制等。不能否认,作为非线性空间最有力的建模工具,深度学习在未来会更多地出现在定位领域中。

回归到视觉定位本身,由于视觉最重要的优势就是成本低、语意丰富、使用场景限制少。因此,以视觉为主,其它低成本传感器为辅的定位融合方案在未来也将会是一个重要的课题。

参考资料

[1] Dalal, N., and B. Triggs. ”Histograms of oriented gradients for human detection.” CVPR, 2005.

[2] Lowe, David G. ”Distinctive Image Features from Scale-Invariant Keypoints.” IJCV, 2004.

[3] Bay, Herbert, T. Tuytelaars, and L. V. Gool. ”SURF: Speeded Up Robust Features.” ECCV, 2006.[4] P.F.Alcantarilla,J.Nuevo,andA.Bartoli.Fast explicit diffusion for accelerated features in nonlinear scale spaces. BMVC, 2013.

[5] Ojala, Timo. ”Gray Scale and Rotation Invariant Texture Classification with Local Binary Patterns.” ECCV, 2000.

[6] Rublee, Ethan , et al. ”ORB: An efficient alternative to SIFT or SURF.” ICCV, 2011.

[7] Leutenegger, Stefan , M. Chli , and R. Y. Siegwart . ”BRISK: Binary Robust invariant scalable keypoints.” ICCV, 2011

[8] Alahi, Alexandre , R. Ortiz , and P. Vandergheynst . ”FREAK: Fast retina keypoint.” CVPR, 2012.

[9] Witkin, A P, M. Baudin, and R. O. Duda. ”Uniqueness of the Gaussian Kernel for Scale-Space Filtering.” TPAMI, 1986.

[10] Jegou, Herve , et al. ”Aggregating local descriptors into a compact image representation.” CVPR, 2010.

[11] Torii, Akihiko , et al. ”24/7 place recognition by view synthesis.” CVPR, 2015.

[12] Arandjelovic, Relja, et al. ”NetVLAD: CNN architecture for weakly supervised place recognition.” TPAMI, 2017.

[13] Li, Fei Fei . ”A Bayesian Hierarchical Model for Learning Natural Scene Categories. CVPR, 2005.
[14] Galvez-Lopez, D. , and J. D. Tardos . ”Bags of Binary Words for Fast Place Recognition in Image Sequences.” TRO, 2012.

[15] Sattler, Torsten , B. Leibe , and L. Kobbelt . ”Efficient & Effective Prioritized Matching for Large- Scale Image-Based Localization.” TPAMI, 2016.

[16] Fischler, Martin A., and R. C. Bolles. ”Random sample consensus: a paradigm for model fitting with applications to image analysis and automated cartography.” Communications of the ACM, 1981.

[17] Raguram, Rahul , et al. ”USAC: A Universal Framework for Random Sample Consensus.” TPAMI, 2013.

[18] Brachmann, Eric, et al. ”DSAC —Differentiable RANSAC for Camera Localization.” CVPR, 2017.

‘贰’ 求助,RANSAC图像匹配去除误点代码报错问题

基本矩阵F对所有对应点x,x'都满足x‘(T)Fx=0 对应点可以先根据sift等算子检测出兴趣点,根据其灰度邻域的相似假设对应,再用RANSAC方法进行鲁棒估计,再进行非线性估计,最后引导匹配,进一步确定兴趣点的对应。不可能一下准确的找出来的。即使最后也不是完全准确的。

‘叁’ 计算机专业学算法的都学些什么算法,有什么书可以看的学的话需要些什么基础的

计算机算法非常多的
A*搜寻算法
俗称A星算法。这是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。常用于游戏中的NPC的移动计算,或线上游戏的BOT的移动计算上。该算法像Dijkstra算法一样,可以找到一条最短路径;也像BFS一样,进行启发式的搜索。
Beam Search
束搜索(beam search)方法是解决优化问题的一种启发式方法,它是在分枝定界方法基础上发展起来的,它使用启发式方法估计k个最好的路径,仅从这k个路径出发向下搜索,即每一层只有满意的结点会被保留,其它的结点则被永久抛弃,从而比分枝定界法能大大节省运行时间。束搜索于20 世纪70年代中期首先被应用于人工智能领域,1976 年Lowerre在其称为HARPY的语音识别系统中第一次使用了束搜索方法。他的目标是并行地搜索几个潜在的最优决策路径以减少回溯,并快速地获得一个解。
二分取中查找算法
一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。这种搜索算法每一次比较都使搜索范围缩小一半。
Branch and bound
分支定界(branch and bound)算法是一种在问题的解空间树上搜索问题的解的方法。但与回溯算法不同,分支定界算法采用广度优先或最小耗费优先的方法搜索解空间树,并且,在分支定界算法中,每一个活结点只有一次机会成为扩展结点。
数据压缩
数据压缩是通过减少计算机中所存储数据或者通信传播中数据的冗余度,达到增大数据密度,最终使数据的存储空间减少的技术。数据压缩在文件存储和分布式系统领域有着十分广泛的应用。数据压缩也代表着尺寸媒介容量的增大和网络带宽的扩展。
Diffie–Hellman密钥协商
Diffie–Hellman key exchange,简称“D–H”,是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。
Dijkstra’s 算法
迪科斯彻算法(Dijkstra)是由荷兰计算机科学家艾兹格·迪科斯彻(Edsger Wybe Dijkstra)发明的。算法解决的是有向图中单个源点到其他顶点的最短路径问题。举例来说,如果图中的顶点表示城市,而边上的权重表示着城市间开车行经的距离,迪科斯彻算法可以用来找到两个城市之间的最短路径。
动态规划
动态规划是一种在数学和计算机科学中使用的,用于求解包含重叠子问题的最优化问题的方法。其基本思想是,将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。动态规划的思想是多种算法的基础,被广泛应用于计算机科学和工程领域。比较着名的应用实例有:求解最短路径问题,背包问题,项目管理,网络流优化等。这里也有一篇文章说得比较详细。
欧几里得算法
在数学中,辗转相除法,又称欧几里得算法,是求最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。
最大期望(EM)算法
在统计计算中,最大期望(EM)算法是在概率(probabilistic)模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐藏变量(Latent Variable)。最大期望经常用在机器学习和计算机视觉的数据聚类(Data Clustering)领域。最大期望算法经过两个步骤交替进行计算,第一步是计算期望(E),利用对隐藏变量的现有估计值,计算其最大似然估计值;第二步是最大化(M),最大化在 E 步上求得的最大似然值来计算参数的值。M 步上找到的参数估计值被用于下一个 E 步计算中,这个过程不断交替进行。
快速傅里叶变换(FFT)
快速傅里叶变换(Fast Fourier Transform,FFT),是离散傅里叶变换的快速算法,也可用于计算离散傅里叶变换的逆变换。快速傅里叶变换有广泛的应用,如数字信号处理、计算大整数乘法、求解偏微分方程等等。
哈希函数
HashFunction是一种从任何一种数据中创建小的数字“指纹”的方法。该函数将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常用来代表一个短的随机字母和数字组成的字符串。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。
堆排序
Heapsort是指利用堆积树(堆)这种数据结构所设计的一种排序算法。堆积树是一个近似完全二叉树的结构,并同时满足堆积属性:即子结点的键值或索引总是小于(或者大于)它的父结点。
归并排序
Merge sort是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
RANSAC 算法
RANSAC 是”RANdom SAmpleConsensus”的缩写。该算法是用于从一组观测数据中估计数学模型参数的迭代方法,由Fischler and Bolles在1981提出,它是一种非确定性算法,因为它只能以一定的概率得到合理的结果,随着迭代次数的增加,这种概率是增加的。该算法的基本假设是观测数据集中存在”inliers”(那些对模型参数估计起到支持作用的点)和”outliers”(不符合模型的点),并且这组观测数据受到噪声影响。RANSAC 假设给定一组”inliers”数据就能够得到最优的符合这组点的模型。
RSA加密算法
这是一个公钥加密算法,也是世界上第一个适合用来做签名的算法。今天的RSA已经专利失效,其被广泛地用于电子商务加密,大家都相信,只要密钥足够长,这个算法就会是安全的。
并查集Union-find
并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。
Viterbi algorithm
寻找最可能的隐藏状态序列(Finding most probable sequence of hidden states)。

‘肆’ 是的 计算机算法

计算机算法是以一步接一步的方式来详细描述计算机如何将输入转化为所要求的输出的过程,或者说,算法是对计算机上执行的计算过程的具体描述。
编辑本段算法性质一个算法必须具备以下性质: (1)算法首先必须是正确的,即对于任意的一组输入,包括合理的输入与不合理的输入,总能得到预期的输出。如果一个算法只是对合理的输入才能得到预期的输出,而在异常情况下却无法预料输出的结果,那么它就不是正确的。 (2)算法必须是由一系列具体步骤组成的,并且每一步都能够被计算机所理解和执行,而不是抽象和模糊的概念。 (3)每个步骤都有确定的执行顺序,即上一步在哪里,下一步是什么,都必须明确,无二义性。 (4)无论算法有多么复杂,都必须在有限步之后结束并终止运行,即算法的步骤必须是有限的。在任何情况下,算法都不能陷入无限循环中。 一个问题的解决方案可以有多种表达方式,但只有满足以上4个条件的解才能称之为算法。编辑本段重要算法A*搜寻算法
俗称A星算法。这是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。常用于游戏中的NPC的移动计算,或线上游戏的BOT的移动计算上。该算法像Dijkstra算法一样,可以找到一条最短路径;也像BFS一样,进行启发式的搜索。
Beam Search
束搜索(beam search)方法是解决优化问题的一种启发式方法,它是在分枝定界方法基础上发展起来的,它使用启发式方法估计k个最好的路径,仅从这k个路径出发向下搜索,即每一层只有满意的结点会被保留,其它的结点则被永久抛弃,从而比分枝定界法能大大节省运行时间。束搜索于20 世纪70年代中期首先被应用于人工智能领域,1976 年Lowerre在其称为HARPY的语音识别系统中第一次使用了束搜索方法,他的目标是并行地搜索几个潜在的最优决策路径以减少回溯,并快速地获得一个解。
二分取中查找算法
一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。这种搜索算法每一次比较都使搜索范围缩小一半。
Branch and bound
分支定界(branch and bound)算法是一种在问题的解空间树上搜索问题的解的方法。但与回溯算法不同,分支定界算法采用广度优先或最小耗费优先的方法搜索解空间树,并且,在分支定界算法中,每一个活结点只有一次机会成为扩展结点。
数据压缩
数据压缩是通过减少计算机中所存储数据或者通信传播中数据的冗余度,达到增大数据密度,最终使数据的存储空间减少的技术。数据压缩在文件存储和分布式系统领域有着十分广泛的应用。数据压缩也代表着尺寸媒介容量的增大和网络带宽的扩展。
Diffie–Hellman密钥协商
Diffie–Hellman key exchange,简称“D–H”,是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。
Dijkstra’s 算法
迪科斯彻算法(Dijkstra)是由荷兰计算机科学家艾兹格·迪科斯彻(Edsger Wybe Dijkstra)发明的。算法解决的是有向图中单个源点到其他顶点的最短路径问题。举例来说,如果图中的顶点表示城市,而边上的权重表示着城市间开车行经的距离,迪科斯彻算法可以用来找到两个城市之间的最短路径。
动态规划
动态规划是一种在数学和计算机科学中使用的,用于求解包含重叠子问题的最优化问题的方法。其基本思想是,将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。动态规划的思想是多种算法的基础,被广泛应用于计算机科学和工程领域。比较着名的应用实例有:求解最短路径问题,背包问题,项目管理,网络流优化等。这里也有一篇文章说得比较详细。
欧几里得算法
在数学中,辗转相除法,又称欧几里得算法,是求最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。
最大期望(EM)算法
在统计计算中,最大期望(EM)算法是在概率(probabilistic)模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐藏变量(Latent Variable)。最大期望经常用在机器学习和计算机视觉的数据聚类(Data Clustering)领域。最大期望算法经过两个步骤交替进行计算,第一步是计算期望(E),利用对隐藏变量的现有估计值,计算其最大似然估计值;第二步是最大化(M),最大化在 E 步上求得的最大似然值来计算参数的值。M 步上找到的参数估计值被用于下一个 E 步计算中,这个过程不断交替进行。
快速傅里叶变换(FFT)
快速傅里叶变换(Fast Fourier Transform,FFT),是离散傅里叶变换的快速算法,也可用于计算离散傅里叶变换的逆变换。快速傅里叶变换有广泛的应用,如数字信号处理、计算大整数乘法、求解偏微分方程等等。
哈希函数
HashFunction是一种从任何一种数据中创建小的数字“指纹”的方法。该函数将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常用来代表一个短的随机字母和数字组成的字符串。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。
堆排序
Heapsort是指利用堆积树(堆)这种数据结构所设计的一种排序算法。堆积树是一个近似完全二叉树的结构,并同时满足堆积属性:即子结点的键值或索引总是小于(或者大于)它的父结点。
归并排序
Merge sort是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
RANSAC 算法
RANSAC 是”RANdom SAmpleConsensus”的缩写。该算法是用于从一组观测数据中估计数学模型参数的迭代方法,由Fischler and Bolles在1981提出,它是一种非确定性算法,因为它只能以一定的概率得到合理的结果,随着迭代次数的增加,这种概率是增加的。该算法的基本假设是观测数据集中存在”inliers”(那些对模型参数估计起到支持作用的点)和”outliers”(不符合模型的点),并且这组观测数据受到噪声影响。RANSAC 假设给定一组”inliers”数据就能够得到最优的符合这组点的模型。
RSA加密算法
这是一个公钥加密算法,也是世界上第一个适合用来做签名的算法。今天的RSA已经专利失效,其被广泛地用于电子商务加密,大家都相信,只要密钥足够长,这个算法就会是安全的。
并查集Union-find
并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。
Viterbi algorithm
寻找最可能的隐藏状态序列(Finding most probable sequence of hidden states)。编辑本段算法特点1.有穷性。一个算法应包含有限的操作步骤,而不能是无限的。事实上“有穷性”往往指“在合理的范围之内”。如果让计算机执行一个历时1000年才结束的算法,这虽然是有穷的,但超过了合理的限度,人们不把他是为有效算法。 2. 确定性。算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。算法中的每一个步骤应当不致被解释成不同的含义,而应是十分明确的。也就是说,算法的含义应当是唯一的,而不应当产生“歧义性”。 3. 有零个或多个输入、所谓输入是指在执行算法是需要从外界取得必要的信息。 4. 有一个或多个输出。算法的目的是为了求解,没有输出的算法是没有意义的。 5.有效性。 算法中的每一个 步骤都应当能有效的执行。并得到确定的结果。编辑本段算法与程序虽然算法与计算机程序密切相关,但二者也存在区别:计算机程序是算法的一个实例,是将算法通过某种计算机语言表达出来的具体形式;同一个算法可以用任何一种计算机语言来表达。 算法列表 图论 路径问题 0/1边权最短路径 BFS 非负边权最短路径(Dijkstra) 可以用Dijkstra解决问题的特征 负边权最短路径 Bellman-Ford Bellman-Ford的Yen-氏优化 差分约束系统 Floyd 广义路径问题 传递闭包 极小极大距离 / 极大极小距离 Euler Path / Tour 圈套圈算法 混合图的 Euler Path / Tour Hamilton Path / Tour 特殊图的Hamilton Path / Tour 构造 生成树问题 最小生成树 第k小生成树 最优比率生成树 0/1分数规划 度限制生成树 连通性问题 强大的DFS算法 无向图连通性 割点 割边 二连通分支 有向图连通性 强连通分支 2-SAT 最小点基 有向无环图 拓扑排序 有向无环图与动态规划的关系 二分图匹配问题 一般图问题与二分图问题的转换思路 最大匹配 有向图的最小路径覆盖 0 / 1矩阵的最小覆盖 完备匹配 最优匹配 稳定婚姻 网络流问题 网络流模型的简单特征和与线性规划的关系 最大流最小割定理 最大流问题 有上下界的最大流问题 循环流 最小费用最大流 / 最大费用最大流 弦图的性质和判定 组合数学 解决组合数学问题时常用的思想 逼近 递推 / 动态规划 概率问题 Polya定理 计算几何 / 解析几何 计算几何的核心:叉积 / 面积 解析几何的主力:复数 基本形 点 直线,线段 多边形 凸多边形 / 凸包 凸包算法的引进,卷包裹法 Graham扫描法 水平序的引进,共线凸包的补丁 完美凸包算法 相关判定 两直线相交 两线段相交 点在任意多边形内的判定 点在凸多边形内的判定 经典问题 最小外接圆 近似O(n)的最小外接圆算法 点集直径 旋转卡壳,对踵点 多边形的三角剖分 数学 / 数论 最大公约数 Euclid算法 扩展的Euclid算法 同余方程 / 二元一次不定方程 同余方程组 线性方程组 高斯消元法 解mod 2域上的线性方程组 整系数方程组的精确解法 矩阵 行列式的计算 利用矩阵乘法快速计算递推关系 分数 分数树 连分数逼近 数论计算 求N的约数个数 求phi(N) 求约数和 快速数论变换 …… 素数问题 概率判素算法 概率因子分解 数据结构 组织结构 二叉堆 左偏树 二项树 胜者树 跳跃表 样式图标 斜堆 reap 统计结构 树状数组 虚二叉树 线段树 矩形面积并 圆形面积并 关系结构 Hash表 并查集 路径压缩思想的应用 STL中的数据结构 vector deque set / map 动态规划 / 记忆化搜索 动态规划和记忆化搜索在思考方式上的区别 最长子序列系列问题 最长不下降子序列 最长公共子序列 一类NP问题的动态规划解法 树型动态规划 背包问题 动态规划的优化 四边形不等式 函数的凸凹性 状态设计 规划方向 线性规划 常用思想 二分 最小表示法 串 KMP Trie结构 后缀树/后缀数组 LCA/RMQ 有限状态自动机理论 排序 选择/冒泡 快速排序 堆排序 归并排序 基数排序 拓扑排序 排序网络
扩展阅读:
1
《计算机算法设计与分析导论》朱清新等编着人民邮电出版社
开放分类:
计算机,算法

阅读全文

与ransac算法代码相关的资料

热点内容
华为怎么设置app时间锁 浏览:660
后宫app视频怎么下载 浏览:525
如何把图片转换从PDF格式 浏览:259
重写和重载的区别java 浏览:233
expressvpnandroid 浏览:84
储存卡被加密怎么解除 浏览:169
地球怎么压缩直径 浏览:780
金铲铲之战服务器爆满怎么进 浏览:160
同仁堂pdf 浏览:935
如何编译原理课程教材 浏览:730
单片机控制显示器 浏览:776
顶好花app下载怎么找不到 浏览:989
手机命令大全 浏览:808
怎么下邮政银行app 浏览:250
不背单词app单词怎么学习 浏览:481
程序员日常操作搞笑 浏览:382
android检查是否安装 浏览:375
苹果手机编辑pdf文件 浏览:460
android系统名字 浏览:971
安卓手机如何进去有求必应屋 浏览:434