❶ 全局视觉定位系统研究的意义
全局视觉定位
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
RANSAC 主要是用于处理 外点数 (outline) 比较多情况下来搜索一条直线或进行模型参数拟合。从 RANSAC 全名字面意思是随机采样一致性。是一种非常简单且有效估计模型参数的方法。不仅限于直线模型的参数,在 SLAM 通过对比前后量帧图像上特征点间关系可以计算出摄像机的外参数,从而计算运动轨迹并生成稀疏点云。
对于RANSAC算法来说一个基本的假设就是数据是由 内点 和 外点 组成的。
同时 RANSAC 假设:在给定一组含有少部分 内点 的数据,存在一个程序可以估计出符合 内点 的模型。
通常会有如下几个步骤
如图
到此算完成一次迭代,重复上面的迭代记录小每次迭代选择点后绘制所得到的投票数,投票数最大所对应的直线模型就是我们要找到的直线
从上面求解过程,可以发现迭代次数 N 和内点率 t 或者理解为外点率 e 都可以这些参数确定是比较困难的,可以感觉经验进行来设置这些参数,
通常我们还会设定一个阈值,这个阈值是关于投票数的阈值,也就是最少投票数值,计算出直线中投票数最大的直线的投票数量还需要大于这个最少投票数才可以。其实 RANSAC 输出一个一条投票数最多且大于事先设定好阈值的直线模型参数,也可以是多条投票数大于最小投票(阈值)的多条直线。
通常我们对这些点的外点率是一无所知的,那么在这种情况下应该如何处理呢?
首先将迭代次数 N 设置无穷大,因为现在对外点率一无所知,所以也就没办法设置 N。所以真实迭代次数 sample_count 通常都会比 N 小
接下来就是将 sample_count 增加 1 然后重复上面步骤,在下一次迭代中 N 就不再是无穷大而是用 N1 来 如果在下一次迭代中计算 d 内点数量要比上一次高就保留本次 d 以及计算得到 N1 而舍弃上一次的计算得到 N1 。
图像配准就是找到一幅图像像素到另一幅图像像素间的空间映射关系。这些图像可以是不同时间(多时间配准),不同传感器在不同地方拍摄(多模式配准)。这些图像之间的空间关系可以是刚性 (平移和旋转),仿射(例如剪切),单应性(或复杂的大变形模型)。
这是一个三维重建必用的算法,如果在三维重建不用 RANSAC 就说明你做的还不算好。帮助我们排序一些噪音点还是outline 的点。我们以拟合直线为例讲解 RANSAC 我们随机地挑选两个点作为模型,然后看有多少点 inline,我们在随意找两个点来作为模型,我们通过评估(投票形式)来找出最优模型,但是这本模型并不是最优模型而是我们要,随意选择最少 x 个样本,x 个数取决于你要拟合模型,如果是直线就是 2 个点,平面需要3 点。然后计算有多少点和模型拟合。直到找到一个模型其中 inline 样本点是最多的。然后在拟合一次就可以得到我们想要点。
❸ 基于特征匹配和迭代优化的航拍图像拼接
本文研究了无人机(UAV)遥感图像拼接过程中重叠区域的不匹配问题。为了解决这个问题,首先通过将双重匹配与随机抽样共识(RANSAC)方法相结合来过滤特征点。其次,为了保证每幅图像与全景照片的投影关系的一致性,我们提出了一种局部拼接的方法。为了避免随着图像数量的增加透视变化累积而导致图像倾斜的错误,我们建立了图像旋转坐标系,并将图像之间的关系限制为平移和旋转。用坐标原点的相对位置来表示平移距离,通过迭代求解最优旋转角度。最后,图像的重叠部分通过线性加权融合。通过实验结果验证,本文提出的方法在大量图像的情况下能够保证更快的处理速度和更高的处理精度,从而达到理想的拼接效果。
近年来,随着计算机视觉的不断进步,图像拼接技术在海洋和矿产勘探、遥感勘探、医学成像、效果生成、虚拟现实等方面得到了广泛的应用。许多航拍遥感图像可以通过配备摄像头的无人机在地面拍摄得到。通常,由于无人机飞行高度、相机焦距等因素,单幅图像存在信息量少、全局分辨率低等问题。因此,要获得广角高分辨率的照片,就需要研究全景图像拼接技术。Brown 在 2003 年引入了着名的 AutoSitich 算法,很快就被用于商业产品,如 Photoshop。但是,该算法假定图像的重叠区域没有深度变化。2013 年,萨拉戈萨 J 等人。将图像拆分为密集的网格,并为每个网格使用单个更改,称为网格变形。该方法在一定程度上解决了图像变形、尺寸缩放、重定向等问题。
图像拼接技术一般分为图像几何校正、图像预处理、图像对齐、图像融合四个步骤。由于相机镜头的畸变,需要对无人机的图像进行校正,使得到的图像满足个别地图的投影关系。图像预处理是几乎所有图像处理技术的重要组成部分,包括去噪、灰度变化等。这个过程可以降低匹配难度,提高匹配精度。然而,对于无人机遥感图像的拼接,图像匹配和图像融合是成功的关键。
图像匹配技术是图像拼接的基础。1975年米尔格拉姆提出了计算机拼接技术。于是,在重叠区域寻找最优接缝线就成为一个重要的研究方向。同年,Kuslin 提出了一种相位相关方法,通过傅里叶变化将图像转换到频域,并利用功率谱计算平移。1987 年,Reddy 提出了一种扩展的相位相关方法,该方法可以计算图像的平移和旋转关系并解决图像缩放问题。图像拼接的另一个分支是基于图像特征。1988年Harris提出经典的Harris点检测算法,它使用特定的旋转不变性哈里斯点进行特征匹配。2004 年,Lowe 提出了一种完美的尺度不变特征变换算法(SIFT),对平移、旋转、尺度缩放、不均匀光照等图像领域应用最广泛的技术具有良好的适应性。C Aguerrebere 根据输入图像的 SNR 条件给出的问题难度级别显示不同的行为区域。Wu通过建立模型,将深度学习和进化算法应用于遥感图像的拼接,实现概率意义上的全局优化。
图像融合技术是遥感图像拼接技术中的另一项核心技术,分为像素级融合、特征级融合、决策级融合。像素级融合仍然是现阶段最常用的图像融合方法之一。
对于无人机的遥感图像,存在图像数量多、光照条件多变等问题。每次拼接过程中的小错误都难以避免。随着图像数量的增加,误差不断累积,图像拼接后期会出现图像失真和重影。S Bang 创建高质量全景图,过滤掉视频的模糊帧,选择关键帧,并校正相机镜头失真。Zhang 提出了基于 STIF 的 GA-SIFT 并给出了一种自适应阈值方法来解决计算量大和拼接时间长的问题。李明基于动态规划解决无人机侧视问题寻找最佳接缝线。然而,当图像数量逐渐增加时,现有的拼接算法存在误差累积。
也有一些基于网格变形的图像拼接算法,但计算量太大。在本文中,图像被匹配两次以过滤特征点以提高准确度。拼接问题对应于通过坐标系转换的旋转角度解,应用高斯-牛顿迭代计算最优旋转角度。此外,我们练习局部匹配方法以减少错误并使用加权融合来实现过度平滑。
SIFT特征点不仅在空间尺度和旋转上保持不变,而且在光照和视角变化的条件下,还具有优异的抗干扰能力和良好的稳定性。为了实现空间尺度的不变性,SIFT特征点可以根据物体远看小而模糊,反之大而清晰的特点,建立高斯金字塔模型。差分金字塔 (DoG) 是通过计算金字塔中相邻两层图像之间的差异来获得的。使用函数拟合在 DOG 空间中测试极值。通过对确定场中基于SIFT特征点的梯度信息进行统计,选择加权幅度最大的梯度方向作为主梯度方向。通过将特征点与其主梯度方向相关联,可以解决图像特征点的旋转不变性问题。最后,利用特征点周围像素的信息建立一个128维的向量作为特征点的描述符。
提取特征点后,需要对两幅图像的特征点进行匹配。通过特征点成对匹配,可以计算出两个特征点对应的描述符之间的欧氏距离,选择欧氏距离最小的点作为匹配点对。为了减少不匹配的发生率, 被用作正确匹配的阈值。具有大于 的描述符欧几里得距离的匹配点对被消除。
RANSAC 是特征点匹配中最常用的方法之一。它首先从匹配结果中随机选择四对特征点并计算单应矩阵。其次,根据上一步得到的单应矩阵,计算第一幅图像在第二幅图像中的重投影坐标,并计算该坐标与第二幅图像中匹配点对坐标的距离。通过设置距离阈值记录所有匹配点对中正确匹配特征点对的个数。重复上面的过程,最终留下与最多点对数的正确匹配。
高斯-牛顿迭代是求解非线性最小二乘优化问题的算法之一,可以描述为:
我们选择一个初始值,然后不断更新当前优化变量以减小目标函数值。高斯-牛顿迭代的主要思想是对函数 进行一阶泰勒展开,计算 及其雅可比矩阵 对应的函数值。使用 和 计算 的增量,直到 足够小。
加权平均法是图像融合中简单有效的方法之一。第一幅图像和第二幅图像重叠区域的像素值由两幅图像像素的加权求和得到,表示为:
其中:越接近 img1, 的值越大。 的值从1逐渐变为0,重叠区域从第一幅图像逐渐过渡到第二幅图像,从而实现画面的平滑过渡。照片的加权平均融合因其直观的简单性和快速的运行速度而被广泛使用和图像拼接。
对于两幅图像的拼接,由于无人机的遥感相机通常安装在一个稳定的平台上,通过选择合适的坐标系,将图像对齐问题转化为单幅图像旋转问题,如图1所示。
此外,大多数具有相关高光频的常用相机通常在连续帧之间具有较大的重叠区域。因此,在图像拼接过程中,第 幅图像在全局位置上的投影关系,不仅受第 幅图像的影响,还与 图像相关。为了保证图像变形的一致性,首先将 张图像拼接在一起,然后将结果整合到整幅图像中。大量的实验测试证明,当i设置为3时效果最佳。整个过程如图图2。
图像中的特征点有很多种,本文使用最常见的SIFT特征点。我们提取并匹配两张输入图像的特征点,结果如下所示。
特征点的匹配精度直接影响旋转角度的计算,因此使用前必须对特征点对进行过滤。鉴于过滤特征点的方法很多,本文先将左图与右图进行匹配,再将右图与左图进行匹配。两次相同结果配对的匹配点将被保留。在此基础上,使用RANSAC方法对结果进行优化,成功匹配了上图中的121个特征点。
从无人机拍摄的两张照片之间通常存在旋转和平移。为了独立优化旋转角度,我们首先建立如图 5所示的坐标系。
以图像匹配成功的特征点坐标值的平均值作为该坐标的原点,坐标轴与像素坐标系的两个坐标轴平行。根据公式(3),特征点从图像坐标系转换为图像旋转坐标系:
其中 为滤波后的特征对的总数, 为特征点在原始图像坐标系中的坐标值,并且 是新的值。
在计算图像的旋转角度之前,我们首先需要分析图像的缩放比例。由飞行高度引起的尺寸变化将在轴上具有相同的缩放比例。因此,根据所有特征点与图像旋转坐标系原点的欧氏距离比,可以计算出两幅图像之间的缩放比例,对图像进行缩放和改变。
图像缩放后,计算图像旋转的角度。高斯牛顿迭代的方式计算旋转角度的最优解。首先设置目标函数:
通过迭代选择最优的 使得:
使用误差函数 的泰勒展开进行迭代。
其中
根据
我们可以发现增量值 每次迭代。最终,当我们计算出的 满足条件时,停止迭代过程。可以使用最佳旋转角度和旋转中心来求解图像的变换矩阵。
由于拍摄图像时光线不均匀,连续两张图像之间可能存在一些颜色差异。此外,图像旋转不可避免地存在小误差,因此我们练习线性加权融合以消除两幅图像之间的拼接线和色度变化。图像的重叠是按距离加权的,这样拼接结果自然是从img1到img2过度了。
我们利用OpenCV的功能从遥感图像中提取SIFT特征点并进行匹配。从Stitch拼接功能、基于透视变化的图像拼接结果以及本文的拼接速度的对比可以看出,本文采用的方法具有一定的优越性。
从表1数据可以看出,在拼接少量图像时,三种算法的拼接结果相似,没有出现明显的拼接误差。但是,Stitcher 算法比其他两种拼接方法花费的时间要多得多。
图 11很明显,随着图像数量的增加,基于透视变换的图像拼接算法出现了严重的失配。然而,本文采用的方法取得了比较满意的结果,因为在无人机拍摄的图像中,地面上的所有特征都可以近似地视为在同一平面上。根据透视变换,无人机的远近抖动会引入图像拼接导致错误。图像数量的不断增加会导致错误的积累,从而导致严重的失配。另外,这使得程序中断,从而无法完成所有60幅图像的拼接。假设同一平面上图片的仿射变化会更符合无人机遥感图像的实际情况。最后,可以通过线性加权融合来解决误差问题,以提高拼接效果。考虑到stitch算法耗时过长,本文不会对两者进行比较。
在上面的图 12 中,使用 100 张图像来测试本文中的方法。图像的仿射变换是通过计算围绕图像特征点中心的旋转角度来进行的。变换后的图像采用线性加权融合后,可以得到大量图像数据处理后的结果。拼接自然,符合人类视觉体验。
我们在网络上跑了一组数据,结果如下。
鉴于以上实验结果,该方法具有一定的抗干扰能力,可以高速运行。与高度集成的Stitcher和基于透视变换的图像拼接结果相比,我们可以发现,基于透视变化的图像拼接结果随着图像数量的增加而逐渐变差。然而,尽管拼接效果很好,但 Stitcher 需要更长的处理时间。
在本文中,我们研究了无人机遥感图像的拼接技术,主要贡献可以总结如下:
通过实验结果可以看出,本文提出的方法比现有方法具有更好的实时性,对于相机平面与成像平面平行的情况具有更好的拼接效果。
❹ 程序员必须掌握哪些算法
A搜索算法——图形搜索算法,从给定起点到给定终点计算出路径。其中使用了一种启发式的估算,为每个节点估算通过该节点的最佳路径,并以之为各个地点排定次序。算法以得到的次序访问这些节点。因此,A*搜索算法是最佳优先搜索的范例。
集束搜索(又名定向搜索,BeamSearch)——最佳优先搜索算法的优化。使用启发式函数评估它检查的每个节点的能力。不过,集束搜索只能在每个深度中发现最前面的m个最符合条件的节点,m是固定数字——集束的宽度。
二分查找(BinarySearch)——在线性数组中找特定值的算法,每个步骤去掉一半不符合要求的数据。
分支界定算法(BranchandBound)——在多种最优化问题中寻找特定最优化解决方案的算法,特别是针对离散、组合的最优化。
Buchberger算法——一种数学算法,可将其视为针对单变量最大公约数求解的欧几里得算法和线性系统中高斯消元法的泛化。
数据压缩——采取特定编码方案,使用更少的字节数(或是其他信息承载单元)对信息编码的过程,又叫来源编码。
Diffie-Hellman密钥交换算法——一种加密协议,允许双方在事先不了解对方的情况下,在不安全的通信信道中,共同建立共享密钥。该密钥以后可与一个对称密码一起,加密后续通讯。
Dijkstra算法——针对没有负值权重边的有向图,计算其中的单一起点最短算法。
离散微分算法(Discretedifferentiation)
动态规划算法(DynamicProgramming)——展示互相覆盖的子问题和最优子架构算法
欧几里得算法(Euclideanalgorithm)——计算两个整数的最大公约数。最古老的算法之一,出现在公元前300前欧几里得的《几何原本》。
期望-最大算法(Expectation-maximizationalgorithm,又名EM-Training)——在统计计算中,期望-最大算法在概率模型中寻找可能性最大的参数估算值,其中模型依赖于未发现的潜在变量。EM在两个步骤中交替计算,第一步是计算期望,利用对隐藏变量的现有估计值,计算其最大可能估计值;第二步是最大化,最大化在第一步上求得的最大可能值来计算参数的值。
快速傅里叶变换(FastFouriertransform,FFT)——计算离散的傅里叶变换(DFT)及其反转。该算法应用范围很广,从数字信号处理到解决偏微分方程,到快速计算大整数乘积。
梯度下降(Gradientdescent)——一种数学上的最优化算法。
哈希算法(Hashing)
堆排序(Heaps)
Karatsuba乘法——需要完成上千位整数的乘法的系统中使用,比如计算机代数系统和大数程序库,如果使用长乘法,速度太慢。该算法发现于1962年。
LLL算法(Lenstra-Lenstra-Lovaszlatticerection)——以格规约(lattice)基数为输入,输出短正交向量基数。LLL算法在以下公共密钥加密方法中有大量使用:背包加密系统(knapsack)、有特定设置的RSA加密等等。
最大流量算法(Maximumflow)——该算法试图从一个流量网络中找到最大的流。它优势被定义为找到这样一个流的值。最大流问题可以看作更复杂的网络流问题的特定情况。最大流与网络中的界面有关,这就是最大流-最小截定理(Max-flowmin-cuttheorem)。Ford-Fulkerson能找到一个流网络中的最大流。
合并排序(MergeSort)
牛顿法(Newton'smethod)——求非线性方程(组)零点的一种重要的迭代法。
Q-learning学习算法——这是一种通过学习动作值函数(action-valuefunction)完成的强化学习算法,函数采取在给定状态的给定动作,并计算出期望的效用价值,在此后遵循固定的策略。Q-leanring的优势是,在不需要环境模型的情况下,可以对比可采纳行动的期望效用。
两次筛法(QuadraticSieve)——现代整数因子分解算法,在实践中,是目前已知第二快的此类算法(仅次于数域筛法NumberFieldSieve)。对于110位以下的十位整数,它仍是最快的,而且都认为它比数域筛法更简单。
RANSAC——是“RANdomSAmpleConsensus”的缩写。该算法根据一系列观察得到的数据,数据中包含异常值,估算一个数学模型的参数值。其基本假设是:数据包含非异化值,也就是能够通过某些模型参数解释的值,异化值就是那些不符合模型的数据点。
RSA——公钥加密算法。首个适用于以签名作为加密的算法。RSA在电商行业中仍大规模使用,大家也相信它有足够安全长度的公钥。
Schönhage-Strassen算法——在数学中,Schönhage-Strassen算法是用来完成大整数的乘法的快速渐近算法。其算法复杂度为:O(Nlog(N)log(log(N))),该算法使用了傅里叶变换。
单纯型算法(SimplexAlgorithm)——在数学的优化理论中,单纯型算法是常用的技术,用来找到线性规划问题的数值解。线性规划问题包括在一组实变量上的一系列线性不等式组,以及一个等待最大化(或最小化)的固定线性函数。
奇异值分解(Singularvaluedecomposition,简称SVD)——在线性代数中,SVD是重要的实数或复数矩阵的分解方法,在信号处理和统计中有多种应用,比如计算矩阵的伪逆矩阵(以求解最小二乘法问题)、解决超定线性系统(overdeterminedlinearsystems)、矩阵逼近、数值天气预报等等。
求解线性方程组()——线性方程组是数学中最古老的问题,它们有很多应用,比如在数字信号处理、线性规划中的估算和预测、数值分析中的非线性问题逼近等等。求解线性方程组,可以使用高斯—约当消去法(Gauss-Jordanelimination),或是柯列斯基分解(Choleskydecomposition)。
Strukturtensor算法——应用于模式识别领域,为所有像素找出一种计算方法,看看该像素是否处于同质区域(homogenousregion),看看它是否属于边缘,还是是一个顶点。
合并查找算法(Union-find)——给定一组元素,该算法常常用来把这些元素分为多个分离的、彼此不重合的组。不相交集(disjoint-set)的数据结构可以跟踪这样的切分方法。合并查找算法可以在此种数据结构上完成两个有用的操作:
查找:判断某特定元素属于哪个组。
合并:联合或合并两个组为一个组。
维特比算法(Viterbialgorithm)——寻找隐藏状态最有可能序列的动态规划算法,这种序列被称为维特比路径,其结果是一系列可以观察到的事件,特别是在隐藏的Markov模型中。
❺ 大数据最常用的算法有哪些
奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)的Christoph Koutschan博士在自己的页面上发布了一篇文章,提到他做了一个调查,参与者大多数是计算机科学家,他请这些科学家投票选出最重要的算法,以下是这次调查的结果,按照英文名称字母顺序排序。
大数据等最核心的关键技术:32个算法
1、A* 搜索算法——图形搜索算法,从给定起点到给定终点计算出路径。其中使用了一种启发式的估算,为每个节点估算通过该节点的最佳路径,并以之为各个地点排定次序。算法以得到的次序访问这些节点。因此,A*搜索算法是最佳优先搜索的范例。
2、集束搜索(又名定向搜索,Beam Search)——最佳优先搜索算法的优化。使用启发式函数评估它检查的每个节点的能力。不过,集束搜索只能在每个深度中发现最前面的m个最符合条件的节点,m是固定数字——集束的宽度。
3、二分查找(Binary Search)——在线性数组中找特定值的算法,每个步骤去掉一半不符合要求的数据。
4、分支界定算法(Branch and Bound)——在多种最优化问题中寻找特定最优化解决方案的算法,特别是针对离散、组合的最优化。
5、Buchberger算法——一种数学算法,可将其视为针对单变量最大公约数求解的欧几里得算法和线性系统中高斯消元法的泛化。
6、数据压缩——采取特定编码方案,使用更少的字节数(或是其他信息承载单元)对信息编码的过程,又叫来源编码。
7、Diffie-Hellman密钥交换算法——一种加密协议,允许双方在事先不了解对方的情况下,在不安全的通信信道中,共同建立共享密钥。该密钥以后可与一个对称密码一起,加密后续通讯。
8、Dijkstra算法——针对没有负值权重边的有向图,计算其中的单一起点最短算法。
9、离散微分算法(Discrete differentiation)。
10、动态规划算法(Dynamic Programming)——展示互相覆盖的子问题和最优子架构算法
11、欧几里得算法(Euclidean algorithm)——计算两个整数的最大公约数。最古老的算法之一,出现在公元前300前欧几里得的《几何原本》。
12、期望-最大算法(Expectation-maximization algorithm,又名EM-Training)——在统计计算中,期望-最大算法在概率模型中寻找可能性最大的参数估算值,其中模型依赖于未发现的潜在变量。EM在两个步骤中交替计算,第一步是计算期望,利用对隐藏变量的现有估计值,计算其最大可能估计值;第二步是最大化,最大化在第一步上求得的最大可能值来计算参数的值。
13、快速傅里叶变换(Fast Fourier transform,FFT)——计算离散的傅里叶变换(DFT)及其反转。该算法应用范围很广,从数字信号处理到解决偏微分方程,到快速计算大整数乘积。
14、梯度下降(Gradient descent)——一种数学上的最优化算法。
15、哈希算法(Hashing)。
16、堆排序(Heaps)。
17、Karatsuba乘法——需要完成上千位整数的乘法的系统中使用,比如计算机代数系统和大数程序库,如果使用长乘法,速度太慢。该算法发现于1962年。
18、LLL算法(Lenstra-Lenstra-Lovasz lattice rection)——以格规约(lattice)基数为输入,输出短正交向量基数。LLL算法在以下公共密钥加密方法中有大量使用:背包加密系统(knapsack)、有特定设置的RSA加密等等。
19、最大流量算法(Maximum flow)——该算法试图从一个流量网络中找到最大的流。它优势被定义为找到这样一个流的值。最大流问题可以看作更复杂的网络流问题的特定情况。最大流与网络中的界面有关,这就是最大流-最小截定理(Max-flow min-cut theorem)。Ford-Fulkerson 能找到一个流网络中的最大流。
20、合并排序(Merge Sort)。
21、牛顿法(Newton’s method)——求非线性方程(组)零点的一种重要的迭代法。
22、Q-learning学习算法——这是一种通过学习动作值函数(action-value function)完成的强化学习算法,函数采取在给定状态的给定动作,并计算出期望的效用价值,在此后遵循固定的策略。Q-leanring的优势是,在不需要环境模型的情况下,可以对比可采纳行动的期望效用。
23、两次筛法(Quadratic Sieve)——现代整数因子分解算法,在实践中,是目前已知第二快的此类算法(仅次于数域筛法Number Field Sieve)。对于110位以下的十位整数,它仍是最快的,而且都认为它比数域筛法更简单。
24、RANSAC——是“RANdom SAmple Consensus”的缩写。该算法根据一系列观察得到的数据,数据中包含异常值,估算一个数学模型的参数值。其基本假设是:数据包含非异化值,也就是能够通过某些模型参数解释的值,异化值就是那些不符合模型的数据点。
25、RSA——公钥加密算法。首个适用于以签名作为加密的算法。RSA在电商行业中仍大规模使用,大家也相信它有足够安全长度的公钥。
26、Sch?nhage-Strassen算法——在数学中,Sch?nhage-Strassen算法是用来完成大整数的乘法的快速渐近算法。其算法复杂度为:O(N log(N) log(log(N))),该算法使用了傅里叶变换。
27、单纯型算法(Simplex Algorithm)——在数学的优化理论中,单纯型算法是常用的技术,用来找到线性规划问题的数值解。线性规划问题包括在一组实变量上的一系列线性不等式组,以及一个等待最大化(或最小化)的固定线性函数。
28、奇异值分解(Singular value decomposition,简称SVD)——在线性代数中,SVD是重要的实数或复数矩阵的分解方法,在信号处理和统计中有多种应用,比如计算矩阵的伪逆矩阵(以求解最小二乘法问题)、解决超定线性系统(overdetermined linear systems)、矩阵逼近、数值天气预报等等。
29、求解线性方程组(Solving a system of linear equations)——线性方程组是数学中最古老的问题,它们有很多应用,比如在数字信号处理、线性规划中的估算和预测、数值分析中的非线性问题逼近等等。求解线性方程组,可以使用高斯—约当消去法(Gauss-Jordan elimination),或是柯列斯基分解( Cholesky decomposition)。
30、Strukturtensor算法——应用于模式识别领域,为所有像素找出一种计算方法,看看该像素是否处于同质区域( homogenous region),看看它是否属于边缘,还是是一个顶点。
31、合并查找算法(Union-find)——给定一组元素,该算法常常用来把这些元素分为多个分离的、彼此不重合的组。不相交集(disjoint-set)的数据结构可以跟踪这样的切分方法。合并查找算法可以在此种数据结构上完成两个有用的操作:
查找:判断某特定元素属于哪个组。
合并:联合或合并两个组为一个组。
32、维特比算法(Viterbi algorithm)——寻找隐藏状态最有可能序列的动态规划算法,这种序列被称为维特比路径,其结果是一系列可以观察到的事件,特别是在隐藏的Markov模型中。
以上就是Christoph博士对于最重要的算法的调查结果。你们熟悉哪些算法?又有哪些算法是你们经常使用的?