一、什么是特征点,它具有什么“特征”?
特征点、角点、关键点,这些概念虽然有细节上的不同,但是在我们这里统一称为“特征”点,也就是具有特征性质的点。在图像处理中,所谓“特征点”,主要指的就是“能够在其他含有相同场景或目标的相似图像中以一种相同的或至少非常相似的不变形式表示图像或目标”,听上去比较拗口,那么用比较直白的方法表述,就是对于“同一个物体或场景,从不同的角度采集多幅图片,如果相同的地方能够被识别出来是相同的。这些些具有‘尺度不变性的点或块’称为特征点”。
特征提取是图像分析与图像识别的前提,它是将高维的图像数据进行简化表达最有效的方式,从一幅图像的M×N×3的数据矩阵中,我们看不出任何信息,所以我们必须根据这些数据提取出图像中的关键信息,一些基本元件以及它们的关系。
特征点是那些经过算法分析出来的,含有丰富局部信息的点,经常出现在图像中拐角、纹理剧烈变化等地方。特征点具有的所谓“尺度不变性”,就是指其在不同图片中能够被识别出来具有的统一性质。
图中被圆圈标记的点是良好的追踪点,而标有方框的点 - 即是尖锐边界的点 - 都是差的选择。如果你能够在不同的图片中,找到同一物体独一无二的一个点,那么反过来你就能够在不同的图片上讲这个物体定位出来。
最后需要注意一点,“特征点”不仅仅是一个点,它还包括一系列局部的信息。甚至很多情况下,它本身就是具有面积的一小块区域。
二、特征点具有哪些意义?
对于计算机来说,图像只是数据的存储;只有对图像进行特征分析后,才能够进一步去识别图像中的物体。因此特征点在识别、定位、拼接、跟踪等多种图像处理的细分类别中广泛使用,是基础并且广泛运用的图像处理知识。以拼接举例:
经典的图像拼接中,因为目前计算机无法识别出图片中的物体,所以需要有一种统一的计算方法,能够告诉计算机不同图片中同一物体的特征点,那么也就是得到了物体的位置和形态了;经过提纯模型(经常是RANSAC)进一步对所获得的点进行建模,可以获得两幅图片之间较为精确的位姿关系,从而对准。
三、OpenCV中提供了那些特征点模型?
特征点寻找技术一直在发展,并且近些年出现的特征提取技术逐步具备“旋转或尺度不变性或小的仿射变换的不变性" 。但即使是这样,并没有一种方法比其他的“明显更好”。综合掌握,根据实际情况选取才是合理的破题之道。
1、Harris-Shi-Tomasi特征检测器和cv :: GoodFeaturesToTrackDetector
最常用的角点定义是由哈里斯[Harris88]提出的, 这些角点,被称为哈尔角点,可以被认为是原始的关键点;而后被Shi和Tomasi [Shi94]进行了进一步扩展,后者被证明对于大多数跟踪应用来说是优越的。由于历史原因,在OpenCV中叫做”GoodFeatures";
2、简单的blob检测器和cv :: SimpleBlobDetector
提出“斑点”的概念。斑点本质上没有那么明确的局部化,而是表示可能预期随时间具有一定稳定性的感兴趣区域。
3、FAST特征检测器和cv :: FastFeatureDetector
最初由Rosten和Drummond [Rosten06]提出的FAST(加速段测试的特征),其基本思想是,如果附近的几个点与P类似,那么P将成为一个很好的关键点。
4、SIFT特征检测器和cv :: xfeatures2d :: SIFT
由David Lowe最初于2004年提出的SIFT特征(尺度不变特征变换)[Lowe04]被广泛使用,是许多随后开发的特征的基础;SIFT特征计算花销很大,但是具有高度的表达能力。
5、SURF特征检测器和cv :: xfeatures2d :: SURF
SURF特征(加速鲁棒特征)最初由Bay等人于2006年提出[Bay06,Bay08],并且在许多方面是我们刚刚讨论的SIFT特征的演变。SURF所产生的特征不仅计算速度快得多,并且在许多情况下,它对SIFT特征观察到的方向或照明变化的鲁棒性也更强。
6、Star / CenSurE特征检测器和cv :: xfeatures2d :: StarDetector
Star特征,也被称为中心环绕极值(或CenSurE)功能,试图解决提供哈尔角点或FAST特征的局部化水平的问题,同时还提供尺度不变性。
7、BRIEF描述符提取器和cv :: BriefDescriptorExtractor
BRIEF,即二进制鲁棒独立基本特征,是一种相对较新的算法,BRIEF不找到关键点;相反,它用于生成可通过任何其他可用的特征检测器算法定位的关键点的描述符。
8、BRISK算法
Leutenegger等人介绍的BRISK40描述符,试图以两种不同的方式改进Brief(Leutenegger11)。 首先,BRISK引入了自己的一个特征检测器(回想一下,Brief只是一种计算描述符的方法)。 其次,BRISK的特征本身虽然与BRIEF原则相似,却尝试以提高整体功能的鲁棒性的方式进行二值比较。
9、ORB特征检测器和cv :: ORB
创建了ORB功能[Rublee11],其目标是为SIFT或SURF提供更高速的替代品。ORB功能使用非常接近于FAST(我们在本章前面看到的)的关键点检测器,但是使用了基本上不同的描述符,主要基于BRIEF。
10、FREAK描述符提取器和cv :: xfeatures2d :: FREAK
FREAK描述符最初是作为Brief,BRISK和ORB的改进引入的,它是一个生物启发式的描述符,其功能非常类似于BRIEF,主要在于它计算二进制比较的领域的方式[Alahi12]。
11、稠密特征网格和cv :: DenseFeatureDetector类
cv :: DenseFeatureDetector class53的目的只是在图像中的网格中生成一个规则的特征数组。
四、OpenCV中特征寻找的相关函数和机制有哪些?
当进行跟踪时,或者其他类型的用到关键点及其描述符的分析时,通常需要做三件事情。第一个是根据一些关键点的定义搜索图像并查找该图像中的所有关键点;第二个是为发现的每个关键点计算其描述符;第三个是通过将所找到的关键点的描述符与一些现有的描述符集进行比较,看看是否可以找到匹配项。当然匹配之后还有一些其他的后续工作。
以上工作可以分类4步:
1、寻找
OpenCV一方面提供了比如“cv::goodFeaturesToTrack()"这样的直接寻找特征的方法,但是一般情况下提供了统一抽象。cv :: KeyPoint对象为特征点;cv :: Feature2D表述为点的特征。
2、匹配
OpenCV同样提供统一方法。cv :: DMatch对象,一般来说,匹配器将是一个尝试将一个图像中的关键点与其他单个图像或称为字典的其他图像的集合进行匹配的对象。当找到匹配时,OpenCV通过生成cv :: DMatch对象的列表(STL向量)来描述它们。同时,cv:DescriptorMatcher类接口提供了三个函数match(),knnMatch()和 radiusMatch();对于每个函数,有两个不同的变形 - 一个用于识别(需要一个特征列表并使用经过训练的字典),另一个用于跟踪(需要两个特征列表)。
3、显示
一般的特征点都带有显示接口,你可以通过绘制特征点来获得一个直观的认识;或者在两幅图中将同样的特征进行连线表示关系。
4、扩展
OpenCV中,cv :: calcOpticalFlowPyrLK()等函数在光流等运用中对特征点进行扩展。
感谢阅读至此,希望有所帮助。