最近,在做一些角点检测、特征提取与匹配算法的学习与总结,主要整理了网上一些大牛的博客并记录下来,希望能与大家一起分享。本篇介绍了图像特征,以及一些经典的角点检测、特征提取与匹配算法的发展史。
在图像处理和计算机视觉领域,图像特征可以用来解决目标识别、图像匹配、视觉跟踪、三维重建等一系列问题。图像特征主要包括三种类型:
其中,在表达图像特征时角点的应用最为广泛,因为角点在任意方向的一个微小变动都会引起图像灰度的很大变化。“角点”(conrner),也称之为“兴趣点”(interest point),或“关键点”(key point),或“特征点”(feature)。关于角点的具体描述可以有以下几种:
角点检测算法可归纳为三类:
基于灰度图像的角点检测又可以分为基于梯度、基于模板和基于梯度模板组合的方法。其中,基于模板的方法主要考虑像素邻域点的灰度变化,常见的角点检测算法有Moravec角点检测算法、Harris角点检测算法、Shi-Tomasi角点检测,及SUSAN角点检测算法。接下来,让我们分别来了解这些角点检测算法。
Moravec角点检测算法:
1977年,Moravec提出了兴趣点的概念,并应用于解决Stanford Cart的导航问题。1981年,Moravec在International Joint Conference on Artificial Intelligence发表了篇题为:Obstacle Avoidance and Navigation in the Real World by a Seeing Robot Rover的文章,并将其应用于立体匹配。该算法是最早的角点检测算法之一,它将角点定义为具有低“自相关性”的点。算法会检测图像的每一个像素,将像素周边的一个邻域作为一个patch,并检测这个patch和周围其他patch的相关性。这种相关性通过两个patch间的SSD(平方差之和)来衡量,SSD值越小则相似性越高。
Moravec角点检测算法有几个明显缺陷:(1)对边缘点的反应比较强烈;(2)不具备旋转不变性;(3)窗口是方形且是二元的;(4)对离散点(噪声点)敏感;(5)忽略了图像边界的一些区域。此外,检测出的角点会出现“扎堆”现象,可通过使用非极大值抑制(Non-maximal suppression),避免角点聚集问题。虽然该算法有很多缺点而且实用性差,但它是很多算法的基础,后面讲解的Harris算法就是基于该思想进行改进的。
Harris角点检测算法:
Harris角点检测算法是C.Harris和M.J.Stephens于1988年提出的一种角点检测算子,它是对Moravec算子的改进。其改进包括:1)Harris算子用高斯函数代替Moravec算子的二值窗口函数,对离中心点越的像素赋予越大的权重,以减少噪声影响;2)Moravec算子只考虑了每隔45度方向,Harris用Taylor展开去近似任意方向;3)Harris采用了一种新的角点判定方法。
Harris角点检测算法有诸多优点:(1)旋转不变性;(2)对图像灰度的仿射变化具有部分不变性;(2)对于图像灰度平移变化不变;(3)对于图像灰度尺度变化不变。当然Harris也有不完善的地方,例如,它对尺度很敏感,不具备几何尺度不变性(貌似可以通过高斯金字塔解决)。
Shi-Tomasi角点检测算法:
1994年,J.Shi和C.Tomasi在其论文“Good Features to Track”中,提出了一种对Harris角点检测算子的改进算法——Shi-Tomasi角点检测算子。Harris算法最原始的定义是将矩阵M的行列式值与M的迹相减,再将差值同预先给定的阈值进行比较。Shi和Tomasi提出改进的方法是,若两个特征值中较小的一个大于最小阈值,则会得到强角点。
SUSAN角点检测算法:
1997年由英国牛津大学的S.M.Smith和j.m.Brady提出的一种完全不同的角点检测方法。即“SUSAN (Smallest Univalue Segment Assimilating Nucleus)”检测算子。SUSAN算法选用圆形模板,将位于圆形窗口模板中心等待检测的像素点称为核心点。核心点的邻域被划分为两个区域:亮度值相似于核心点亮度的区域即核值相似区(USAN),以及亮度值不相似于核心点亮度的区域。其一、该方法由于不需要计算图像灰度差,因此,具有很强的抗噪声的能力。其二、SUSAN是通过比较像素点邻域同其中心相似程度,所以也具有了光强变化不变性、旋转不变性,以及一定程度的尺度不变性。其三、该方法的提出,主要是针对于边缘检测和角点检测。
FAST角点检测算法:
Edward Rosten和Tom Drummond在2006年发表的“Machine learning for high-speed corner detection”文章中提出了一种FAST特征,并在2010年对这篇论文作了小幅度的修改后重新发表。FAST的全称为Features From Accelerated Segment Test,以速度快著称。Rosten等人将FAST角点定义为:若某像素点与其周围领域内足够多的像素点处于不同的区域,则该像素点可能为角点。也就是某些属性与众不同,考虑灰度图像,即若该点的灰度值比其周围领域内足够多的像素点的灰度值大或者小,则该点可能为角点。但该算法不具备尺度不变性和旋转不变性。
此外,还有亚像素级角点检测。
特征点是由关键点(key point)和描述子(Descriptor)组成,其中,描述子通常是一个向量,描述了该关键点周围的像素信息。只要两个特征点的描述子在向量空间上的距离相近,就可以认为它们是相同的特征点。比如,SIFT特征是指“提取SIFT关键点,并计算SIFT描述子”。
SIFT特征:
SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT)。该方法于1999年由David Lowe首先发表于计算机视觉国际会议(International Conference on Computer Vision,ICCV),2004年再次经David Lowe整理完善后发表于International journal of computer vision(IJCV)。
SURF特征:
SURF,Speeded Up Robust Features(SURF,加速稳健特征)。最初由Herbert Bay发表在2006年的欧洲计算机视觉国际会议(Europen Conference on Computer Vision,ECCV)上,并在2008年正式发表在Computer Vision and Image Understanding期刊上。SURF是对SIFT算法的改进,提升了算法的执行效率,为算法在实时计算机视觉系统中应用提供了可能。
ORB特征:
ORB(Oriented FAST and Rotated BRIEF)是一种快速特征点提取和描述的算法。这个算法是由Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Gary R.Bradski在2011年一篇名为“ORB:An Efficient Alternative to SIFTor SURF”的文章中提出。ORB算法分为两部分,分别是特征点提取和特征点描述。特征提取是由FAST(Features from Accelerated Segment Test)算法发展来的,特征点描述是根据BRIEF(Binary Robust IndependentElementary Features)特征描述算法改进的。ORB特征是将FAST特征点的检测方法与BRIEF特征描述子结合起来,并在它们原来的基础上做了改进与优化。据说,ORB算法的速度是sift的100倍,是surf的10倍。
以上角点检测算法、特征提取与匹配算法既有联系又有区别,相信集中在一起学习可以节省不少时间。至于各种算法实现流程,会在具体的学习中陆续整理出来。。。