首页 > 其他分享 >slam 14 讲之特征点和特征匹配

slam 14 讲之特征点和特征匹配

时间:2024-10-09 10:23:50浏览次数:8  
标签:14 特征 角点 FAST 像素 slam 图像 ORB

前言

视觉SLAM主要分为视觉前端和优化后端。前端也称为视觉里程计(VO)。它根据相邻图像的信息估计出粗略的相机运动,给后端提供较好的初始值。

VO的实现方法分类:

  • 特征点法(提取特征),主流,成熟。运行稳定,对光照、动态物体不敏感。
  • 直接法(不提特征)

在本讲中,我们将从特征点法入手,学习如何提取、匹配图像特征点,然后估计两帧之间的相机运动和场景结构,从而实现一个基本的两帧间视觉里程计。

特征点

  1. VO的主要问题是什么?
    如何根据图像来估计相机运动。

  2. 怎么估计相机运行?
    在图像中选取有代表性的一些点,在这些点的基础上,讨论相机位姿估计问题,以及这些点的定位问题。

  3. 这些点有什么特点?
    这些点在相机视角发生少量变化后会保持不变,所以我们会在各个图像中找到相同的点。也就是不同帧可以匹配到相同点。

  4. SLAM 中这些点叫什么?
    在经典SLAM模型中,它们被称为路标(landmark)。在视觉SLAM中,路标则是指图像特征(Feature)。

  5. 灰度值也是一种特征,为什么不能直接用?有什么缺点?
    在视觉里程计中,我们希望特征点在相机运动之后保持稳定 ,而灰度值受光照、形变、物体材质的影响严重,在不同图像间变化非常大,不够稳定。

  6. 哪些可以作为图像中有代表的特征点?有什么区别?

image

角点可以是两条线的交叉处,也可以是位于相邻的两个主要方向不同的事物上的点。特征点是图像里一些特别的地方 。我们可以把图像中的角点、边缘和区块都当成图像中有代表性的地方。不过,我们更容易精确地指出,某两幅图像中出现了同一个角点;同一个边缘则稍微困难一些,因为沿着该边缘前进,图像局部是相似的;同一个区块则是最困难的。我们发现,图像中的角点、边缘相比于像素区块而言更加“特别”,在不同图像之间的辨识度更强。所以,一种直观的提取特征的方式就是在不同图像间辨认角点,确定它们的对应关系。在这种做法中,角点就是所谓的特征

  1. 角点可以满足要求吗?有什么缺点?
    在大多数应用中,单纯的角点依然不能满足我们的很多需求。例如,从远处看上去是角点的地方,当相机走近之后,可能就不显示为角点了。或者,当旋转相机时,角点的外观会发生变化,我们也就不容易辨认出那是同一个角点。

  2. 那么有哪些角点的替代方案?设计的这些特征点有什么优点?
    计算机视觉领域的研究者们在长年的研究中设计了许多更加稳定的局部图像特征,如著名的SIFT[30] 、SURF[31] 、ORB[32] 等等。

  • 1.可重复性(Repeatability):相同的“区域”可以在不同的图像中找到。
  • 2.可区别性(Distinctiveness):不同的“区域”有不同的表达。
  • 3.高效率(Efficiency):同一图像中,特征点的数量应远小于像素的数量。
  • 4.局部性(Locality):特征仅与一小片图像区域相关。
  1. 特征点是什么?
    比如,当谈论SIFT特征时,是指“提取SIFT关键点,并计算SIFT描述子”两件事情。
    特征点有两部分组成:
  • 关键点 (Key-point):该特征点在图像里的位置,有些特征点还具有朝向、大小等信息。
  • 描述子 (Descriptor):通常是一个向量,按照某种人为设计的方式,描述了该关键点周围像素的信息。描述子是按照“外观相似的特征应该有相似的描述子 ”的原则设计的。因此,只要两个特征点的描述子在向量空间上的距离相近,就可以认为它们是同样的特征点。
  1. SIFT(尺度不变特征变换,Scale-Invariant Feature Transform) 可以作为 SLAM 系统的特征点吗?可以 GPU 加速计算吗?
    SIFT 充分考虑了在图像变换过程中出现的光照、尺度、旋转等变化,但随之而来的是极大的计算量。由于整个SLAM过程中图像特征的提取与匹配仅仅是诸多环节中的一个,到目前(2016年)为止,普通PC的CPU还无法实时地计算SIFT特征,进行定位与建图。所以在SLAM中我们甚少使用这种“奢侈”的图像特征。
    可以通过GPU等设备来加速计算。经过GPU加速后的SIFT,就可以满足实时计算要求。但是,引入GPU将带来整个SLAM成本的提升。由此带来的性能提升是否足以抵去付出的计算成本,需要系统的设计人员仔细考量。

  2. SLAM 哪些特征点可以选择?
    考虑适当降低精度和健壮性,以提升计算的速度。例如,FAST关键点属于计算特别快的一种特征点(注意这里“关键点”的表述,说明它没有描述子)。而ORB(Oriented FAST and Rotated BRIEF)特征则是目前看来非常具有代表性的实时图像特征。它改进了FAST检测子[33] 不具有方向性的问题,并采用速度极快的二进制描述子BRIEF[34] ,使整个图像特征提取的环节大大加速。根据作者在论文中所述测试,在同一幅图像中同时提取约1000个特征点的情况下,ORB约要花费15.3ms,SURF约花费217.3ms,SIFT约花费5228.7ms。由此可以看出,ORB在保持了特征子具有旋转、尺度不变性的同时,速度方面提升明显,对于实时性要求很高的SLAM来说是一个很好的选择。在目前的SLAM方案中,ORB是质量与性能之间较好的折中。

  3. FAST关键点是什么?
    FAST是一种角点,主要检测局部像素灰度变化明显的地方,以速度快著称。它的思想是:如果一个像素与邻域的像素差别较大(过亮或过暗),那么它更可能是角点。相比于其他角点检测算法,FAST只需比较像素亮度的大小,十分快捷。它的检测过程如下:

    1. 在图像中选取像素p ,假设它的亮度为Ip 。
    2. 设置一个阈值T (比如,Ip 的20%)。
    3. 以像素p 为中心,选取半径为3的圆上的16个像素点。
    4. 假如选取的圆上有连续的N 个点的亮度大于Ip +T 或小于Ip -T ,那么像素p 可以被认为是特征点(N 通常取12,即为FAST-12。其他常用的N 取值为9和11,它们分别被称为FAST-9和FAST-11)。
    5. 循环以上四步,对每一个像素执行相同的操作。

image

  1. FAST-12算法 怎么提高计算效率?
    在FAST-12算法中,为了更高效,可以添加一项预测试操作,以快速地排除绝大多数不是角点的像素。具体操作为:对于每个像素,直接检测邻域圆上的第1,5,9,13个像素的亮度。只有当这4个像素中有3个同时大于Ip +T 或小于Ip -T 时,当前像素才有可能是一个角点,否则应该直接排除。这样的预测试操作大大加速了角点检测。此外,原始的FAST角点经常出现“扎堆”的现象。所以在第一遍检测之后,还需要用非极大值抑制(Non-maximal suppression),在一定区域内仅保留响应极大值的角点,避免角点集中的问题。

  2. FAST特征点的优点和缺点?

优点:

  • 计算仅仅是比较像素间亮度的差异,速度非常快

缺点:

  • FAST特征点数量很大且不确定,而我们往往希望对图像提取固定数量的特征
  • FAST角点不具有方向信息
  • 由于它固定取半径为3的圆,存在尺度问题:远处看着像是角点的地方,接近后看可能就不是角点了
  1. ORB 特征对 FAST 的改进是什么?
  • 特征点数量不固定问题:可以指定最终要提取的角点数量N ,对原始FAST角点分别计算Harris响应值,然后选取前N 个具有最大响应值的角点作为最终的角点集合。
  • 不具有方向性和尺度问题:ORB添加了尺度和旋转的描述。尺度不变性由构建图像金字塔(金字塔是指对图像进行不同层次的降采样,以获得不同分辨率的图像。),并在金字塔的每一层上检测角点来实现。而特征的旋转是由灰度质心法(Intensity Centroid)实现的。
  1. 灰度质心法是什么?

所谓质心是指以图像块灰度值作为权重的中心。其具体操作步骤如下[35] :
1.在一个小的图像块B 中,定义图像块的矩为

\[\begin{aligned}m_{pq}=\sum_{x,y\in B}x^py^qI(x,y),\quad p,q=\{0,1\}.\end{aligned} \]

2.通过矩可以找到图像块的质心:

\[\begin{aligned}C=(\frac{m_{10}}{m_{00}},\frac{m_{01}}{m_{00}}).\end{aligned} \]

3.连接图像块的几何中心O 与质心C ,得到一个方向向量 \(\overrightarrow{OC}\),于是特征点的方向可以定义为

\[\theta=\arctan(m_{01}/m_{10}). \]

通过以上方法,FAST角点便具有了尺度与旋转的描述,从而大大提升了其在不同图像之间表述的健壮性。所以在ORB中,把这种改进后的FAST称为Oriented FAST。

  1. BRIEF描述子是什么?

在提取Oriented FAST关键点后,我们对每个点计算其描述子。ORB使用改进的BRIEF特征描述。我们先来介绍一下BRIEF是什么。

BRIEF是一种二进制 描述子,其描述向量由许多个0和1组成,这里的0和1编码了关键点附近两个像素(比如p 和q )的大小关系:如果p 比q 大,则取1,反之就取0。如果我们取了128个这样的p,q ,最后就得到128维由0、1组成的向量。那么,p 和q 如何选取呢?在作者原始的论文中给出了若干种挑选方法,大体上都是按照某种概率分布,随机地挑选p 和q 的位置,读者可以阅读BRIEF论文或OpenCV源码以查看其具体实现[34] 。BRIEF使用了随机选点的比较,速度非常快,而且由于使用了二进制表达,存储起来也十分方便,适用于实时的图像匹配。原始的BRIEF描述子不具有旋转不变性,因此在图像发生旋转时容易丢失。而ORB在FAST特征点提取阶段计算了关键点的方向,所以可以利用方向信息,计算了旋转之后的“Steer BRIEF”特征使ORB的描述子具有较好的旋转不变性。

由于考虑到了旋转和缩放,使得ORB在平移、旋转和缩放的变换下仍有良好的表现。同时,FAST和BREIF的组合也非常高效,使得ORB特征在实时SLAM中非常受欢迎。下图展示了一张图像提取ORB之后的结果。

image

  1. 特征匹配是干什么呢?

image

通过对图像与图像或者图像与地图之间的描述子进行准确匹配,我们可以为后续的姿态估计、优化等操作减轻大量负担。通过计算描述子距离知道哪些特征点是匹配的。

描述子距离表示了两个特征之间的相似程度 ,不过在实际运用中还可以取不同的距离度量范数。对于浮点类型的描述子,使用欧氏距离进行度量即可。而对于二进制的描述子(比如BRIEF这样的),我们往往使用汉明距离(Hamming distance)作为度量——两个二进制串之间的汉明距离,指的是其不同位数的个数 。

标签:14,特征,角点,FAST,像素,slam,图像,ORB
From: https://www.cnblogs.com/odesey/p/18440587

相关文章

  • 代码随想录算法训练营第四天|24. 两两交换链表中的节点、19.删除链表的倒数第N个节点
    24.两两交换链表中的节点力扣题目链接(opensnewwindow)给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[]示例3:输入:head=[1]......
  • 学年(2024-2025-3) 学号(20241424)《计算机基础与程序设计》第三周学习总结
    学期(2024-2025-3)学号(20241424)《计算机基础与程序设计》第三周学习总结作业信息|这个作业属于([2024-2025-3-计算机基础与程序设计](https://www.cnblogs.com/rocedu/p/9577842.html#WEEK03)||-- |-- ||这个作业要求在(2024-2025-3计算机基础与程序设计第三周作业)||这个作业......
  • 14. 异常处理
    一、什么是异常  程序在运行过程之中,不可避免的出现一些错误,比如:使用了没有赋值的变量、使用了不存在的索引、除0等等。这些错误在程序中,我们称之为异常。程序运行过程中,一旦出现异常将会导致程序立即终止,异常以后的代码全部都不会执行。二、异常的传播  当在函数中出现......
  • CF1406E Deleting Numbers
    题意简述交互题,给定集合\(S=\{1,2,\cdots,n\}\)和一个隐藏的数\(m\),你需要使用不超过\(10^4\)次操作猜出\(m\),操作类型如下:Ax,查询在\(S\)中是\(x\)的倍数的数的个数。Bx,查询在\(S\)中是\(x\)的倍数的数的个数,并把这些数删去,但是\(m\)不会被删去。Cx,表示你......
  • 【斯坦福CS144】Lab2
    一、实验目的实现一个TCPReceiver,用以接收传入的TCPsegment并将其转换成用户可读的数据流。二、实验内容1.接收TCPsegment;2.重新组装字节流(包括EOF);3.确定应该发回给发送者的信号,以进行数据确认和流量控制。三、实验过程输入gitmergeorigin/check2-startercode......
  • 《如 何 速 通 一 套 题》14.0
    邮寄核爆赛,拿完暴力走人了......A(由于题目名称为“我是A题”所以省略,下同)我们处理掉整个整个的\(A\timesB\)的面,然后从上往下倒序枚举C。当枚举到一个C时,我们把这个C独有的贡献加上去(这就是为什么要倒序枚举C)。由于本题数据太水,暴力可过。理论上可以线段树优化,但......
  • 数据清洗 微信:a1319614038
    #stata数据清洗整理合并筛选匹配#excel数据匹配合并筛选匹配#python数据清洗整理合并筛选匹配抓取,请直接说明具体要求发给我,我会第一时间回复你,#vlookup函数应用,vlookup功能实现,#CSV文件处理,超大文件,超过显示,#拆分,统计,批量处理,大量数据文件合并,#匹配合并,矩阵文件,各种问题解决。数......
  • 如果 表名 拼写错误或表不存在,你会看到 #1146 - Table 'ecms.表名' doesn't exist 的
    <?php$servername="localhost";$username="your_username";$password="your_password";$dbname="ecms";//创建连接$conn=newmysqli($servername,$username,$password,$dbname);//检查连接if($conn->connect......
  • 期末考试复习宝典P19题7:特征图大小的计算(当计算得到小数时)
    https://blog.csdn.net/qfqf123456/article/details/112389559#:~:text=本文介绍了如何计算卷题目:输入图片大小为200乘200,依次经过一层卷积(kernelsize5乘5,padding1,stride2),pooling(kernelsize3乘3,padding0,stride1),又一层卷积(kernelsize3乘3,padding1,stride1)之后,输......
  • P1437 [HNOI2004] 敲砖块 题解
    初拿到手感觉限制太多了,不好硬做,于是开始观察。若要取某一个数,我们要取其左上右上两个数,而这两个数又要取上面三个数,所以取一个数的前提条件其实是取这一个三角形。举例2234582712236493比如我要取第3行的6,我首先要取7和12,要取7和12,首先要取3,4,5,所以一层层拓展......