VSLAM基础(一)————常见特征点提取算法及匹配优化

过年期间闲来无事,就想来把这半年学习的一些视觉知识(视觉slam相关)做个梳理,就以这篇图像特征点提取与匹配作为开头吧。

一、关键点与描述子

关键点:图像上某些特殊的、具有代表的点(常见表示就是图像上的横纵坐标、主方向、尺度等)。

描述子:用一些数学方法描述关键点(常见表示是n维向量)。

1)harris角点检测

角点原理来源于人对角点的感性判断,即图像在各个方向灰度有明显变化。算法的核心是利用局部窗口在图像上进行移动判断灰度发生较大的变化,所以此窗口用于计算图像的灰度变化为:[-1,0,1;-1,0,1;-1,0,1][-1,-1,-1;0,0,0;1,1,1]。人各个方向上移动这个特征的小窗口,窗口内区域的灰度发生了较大的变化,那么就认为在窗口内遇到了角点。如果窗口在某一个方向移动时,窗口内图像的灰度发生了较大的变化,而在另一些方向上没有发生变化,那么,窗口内的图像可能就是一条直线的线段。

harris角点性质:

Harris角点检测算子对亮度和对比度的变化不敏感;

Harris角点检测算子具有旋转不变性;

Harris角点检测算子不具有尺度不变性;

2)SIFT

SIFT的全称是Scale Invariant Feature Transform,尺度不变特征变换,由加拿大教授David G.Lowe提出的。SIFT特征对旋转、尺度缩放、亮度变化等保持不变性,是一种非常稳定的局部特征。

2.1 SIFT算法具的特点

  1. 图像的局部特征,对旋转、尺度缩放、亮度变化保持不变,对视角变化、仿射变换、噪声也保持一定程度的稳定性。
  2. 独特性好,信息量丰富,适用于海量特征库进行快速、准确的匹配。
  3. 多量性,即使是很少几个物体也可以产生大量的SIFT特征
  4. 扩招性,可以很方便的与其他的特征向量进行联合。
  5. 缺点是实时性不高,并且对于边缘光滑目标的特征点提取能力较弱。

2.2 SIFT特征检测的步骤

     有4个主要步骤:

  1. DoG尺度空间的极值检测。 首先是构造DoG尺度空间,在SIFT中使用不同参数的高斯模糊来表示不同的尺度空间。而构造尺度空间是为了检测在不同尺度下都存在的特征点,特征点的检测比较常用的方法是Δ2G(高斯拉普拉斯LoG),但是LoG的运算量是比较大的,Marr和Hidreth曾指出,可以使用DoG(差分高斯)来近似计算LoG,所以在DoG的尺度空间下检测极值点。
  2. 删除不稳定的极值点。主要删除两类:低对比度的极值点以及不稳定的边缘响应点。
  3. 确定特征点的主方向。以特征点的为中心、以3×1.5σ为半径的领域内计算各个像素点的梯度的幅角和幅值,然后使用直方图对梯度的幅角进行统计。直方图的横轴是梯度的方向,纵轴为梯度方向对应梯度幅值的累加值,直方图中最高峰所对应的方向即为特征点的方向。
  4. 生成特征点的描述子。 首先将坐标轴旋转为特征点的方向,以特征点为中心的16×16的窗口的像素的梯度幅值和方向,将窗口内的像素分成16块,每块是其像素内8个方向的直方图统计,共可形成128维的特征向量。

 

3)SURF

Surf(Speeded Up Robust Features)类似于SIFT但改进了特征的提取和描述方式,用一种更为高效的方式完成特征的提取和描述。

SURF算法与SIFT算法对比

(1)在生成尺度空间方面,SIFT算法利用的是差分高斯金字塔与不同层级的空间图像相互卷积生成。SURF算法采用的是不同尺度的box filters与原图像卷积

(2)在特征点检验时,SIFT算子是先对图像进行非极大值抑制,再去除对比度较低的点。然后通过Hessian矩阵去除边缘的点。

而SURF算法是先通过Hessian矩阵来检测候选特征点,然后再对非极大值的点进行抑制

(3)在特征向量的方向确定上,SIFT算法是在正方形区域内统计梯度的幅值的直方图,找到最大梯度幅值所对应的方向。SIFT算子确定的特征点可以有一个或一个以上方向,其中包括一个主方向与多个辅方向。SURF算法则是在圆形邻域内,检测各个扇形范围内水平、垂直方向上的Haar小波响应,找到模值最大的扇形指向,且该算法的方向只有一个。

(4)SIFT算法生成描述子时,是将的采样点划分为的区域,从而计算每个分区种子点的幅值并确定其方向,共计维。SURF算法在生成特征描述子时将的正方形分割成的小方格,每个子区域25个采样点,计算小波haar响应,一共维。

4)FAST角点检测

大体思路:若一个像素周围有一定数量的像素与该点像素值不同,则认为其为角点。

FAST算法特点:

在速度上要比其他算法速度快很多;
           受图像噪声以及设定的阈值影响很大;
           不产生多尺度特征而且特征点没有方向信息,这样就会失去旋转不变性;

5)BRIEF描述子

算法步骤

利用Harris或者FAST等方法检测特征点

确定特征点的邻域窗口Patch,并对该邻域内像素点进行σ=2σ=2、窗口尺寸为9的高斯平滑,以滤除噪声(也可直接对整幅图像做高斯平滑)
在邻域窗口内随机选取n对(n可取128、256等)像素点,并根据灰度值大小编码成二进制串,生成n位(bit)的特征描述子

缺点

1.对噪声敏感(因为二进制编码是通过比较具体像素值来判定的) 
2.不具备旋转不变性 
3.不具备尺度不变性

6)ORB

ORB特征是将FAST特征点的检测方法与BRIEF特征描述子结合起来,并在它们原来的基础上做了改进与优化。据说,ORB算法的速度是sift的100倍,是surf的10倍。

oFAST特征点:

建立金字塔,来实现特征点的多尺度不变性。设置一个比例因子scaleFactor(opencv默认为1.2)和金字塔的层数nlevels(pencv默认为8)。将原图像按比例因子缩小成nlevels幅图像。缩放后的图像为:I’= I/scaleFactork(k=1,2,…, nlevels)。nlevels幅不同比例的图像提取特征点总和作为这幅图像的oFAST特征点。

ORB算法提出使用矩(moment)法来确定FAST特征点的方向。也就是说通过矩来计算特征点以r为半径范围内的质心,特征点坐标到质心形成一个向量作为该特征点的方向。

rBRIEF特征描述:

在使用oFast算法计算出的特征点中包括了特征点的方向角度,在主方向及相应尺度上取点对,计算出二进制描述子。

二、描述子匹配

在我们得到了不同图像上的特征点与描述子后,想要找到匹配点可以用以下方法,当然这些都是最基础的方法,在后续仍需要其他方法增加匹配点与去除误匹配。

1、基于阈值

  如何描述子之间的距离小于某个阈值,则认为他们相互匹配,由于大小阈值的的描述子可能有很多个,因此该方

  可能会得到多个与之匹配的描述子。

  if |Da-Db|

  else   dismatch

2、基于最近邻

  如果Db就Da的最近邻,并且 距离小于某个阈值,则认为他们相互匹配。该方法得到唯一的匹配

3、基于距离比率(distance ratio)的最近邻

  该方法与最近邻类似,不同的是其对最近邻与次近邻间的distance ratio应用阈值处理

  即:if ||Da-Db||/||Da-Dc||

  该方法保证与Da匹配的描述子只有一个,其它的与其相差较大。这在描述子评价中有非常重要的作用,如果

  一种描述子能保证上述条件,那么该描述子优于其它描述子。

特征点算法的详细描述可以查看这篇博客:https://blog.csdn.net/gwplovekimi/article/details/80019589

你可能感兴趣的:(slam,计算机视觉)