特征检测与描述符提取的区别
有谁知道OpenCV 2.3中FeatureDetection和DescriptorExtraction的区别吗? 我知道后者是使用DescriptorMatcher进行匹配所必需的。 如果是这样,什么是FeatureDetection使用?
谢谢。
特征检测
-
在计算机视觉和image processing中,特征检测的概念指的是旨在计算图像信息的抽象并在每个图像点进行局部判定的方法,无论该点是否存在给定types的图像特征。 所得到的特征将是图像域的子集,通常以孤立点,连续曲线或连接区域的forms。
特征检测=如何在图像中find一些有趣的点(特征)(例如:find一个angular落,find一个模板,等等…)
特征提取
-
在模式识别和image processing中,特征提取是降维的一种特殊forms。 当一个algorithm的input数据太大而不能被处理,并被怀疑是众所周知的冗余(很多数据,但没有太多的信息),那么input数据将被转换成一个简化的表示集合(也称为特征向量) 。 将input数据转换成一组特征称为特征提取。 如果仔细select提取的特征,则期望特征集合将从input数据中提取相关信息,以便使用这种简化表示而不是全尺寸input来执行期望的任务。
特征提取=如何表示我们发现的有趣点,以便将它们与图像中其他有趣的点(特征)进行比较。 (例如,这个点的局部区域强度?点周围区域的局部方位等等)
实际的例子:你可以用哈里斯angular方法find一个angular落,但是你可以用任何你想要的方法来描述它(例如直方图,HOG,第8个邻接点的局部方向)
你可以在这里看到更多的信息, 维基百科链接
Julien,(帮助维基百科:p)
Feature Detection
和Feature descriptor extraction
都是Feature based image registration
。 只有在整个基于特征的图像注册过程的背景下才能理解他们的工作。
基于特征的注册algorithm
以下图片来自PCL文档显示了这样一个注册pipe道:
-
数据采集:将input图像和参考图像input到algorithm中。 图像应该从稍微不同的视点显示相同的场景。
-
关键点估计(特征检测):关键点( 兴趣点 )是具有以下特征的点云内的点:
- 它有一个明确的,最好是math上有根据的定义,
- 它在图像空间中有一个明确的位置,
- 兴趣点周围的局部图像结构在本地信息内容方面丰富。
OpenCV提供了多种Feature detection
实现,例如:- AKAZE
- 轻快
- ORB
- KAZE
- 冲浪
- 筛
- MSER
- 快速
- 星
- MSD
图像中的这些突出点是非常有用的,因为它们的总和表征了图像,并且有助于区分图像的不同部分。
-
特征描述符(描述符提取器):在检测关键点之后,我们继续为它们中的每一个计算描述符。 “局部描述符是一个点的局部邻域的紧凑表示forms,与描述完整对象或点云的全局描述符相反,局部描述符只是在一个点周围的局部邻域中尝试类似于形状和外观,因此非常适合于表示它在匹配方面“。 (Dirk Holz等人) 。 OpenCV选项 :
- AKAZE
- 轻快
- ORB
- KAZE
- 冲浪
- 筛
- 怪物
- 雏菊
- LATCH
- LUCID
- 简要
-
对应估计(描述符匹配器):下一个任务是find两个图像中find的关键点之间的对应关系。因此,提取的特征被放置在可以被有效search的结构(例如kd树 )中。 通常查找所有局部特征描述符并将它们中的每一个匹配到来自另一个图像的对应对象就足够了。 然而,由于来自类似场景的两个图像不一定具有相同数量的特征描述符,因为一个云可以具有更多数据,所以另一个需要运行分离的对应拒绝过程。 OpenCV选项 :
- BF
- FLANN
-
对应拒绝:执行对应拒绝的最常用方法之一是使用RANSAC (随机样本一致性)。
-
变换估计:在计算两个图像之间的鲁棒对应之后,使用
Absolute Orientation Algorithm
来计算应用于input图像以匹配参考图像的变换matrix。 有许多不同的algorithm可以做到这一点,常用的方法是: 奇异值分解 (SVD)。