有没有人知道OpenCV 2.3中FeatureDetection和DescriptorExtraction之间的区别?我知道后者是使用DescriptorMatcher进行匹配所必需的。如果是这种情况,FeatureDetection用于什么?
谢谢。
答案 0 :(得分:90)
功能检测
在计算机视觉和图像处理中,特征检测的概念是指旨在计算图像信息的抽象并在每个图像点做出局部决策的方法,无论在该点是否存在给定类型的图像特征或不。生成的特征将是图像域的子集,通常采用孤立点,连续曲线或连通区域的形式。
特征检测=如何在图像中找到一些有趣的点(特征)。(例如:找一个角,找一个模板等等......)
功能提取
在模式识别和图像处理中,特征提取是降维的一种特殊形式。当算法的输入数据太大而无法处理并且怀疑是多余的(大量数据,但信息不多)时,输入数据将被转换为简化的表示集(也称为特征向量) 。将输入数据转换为特征集称为特征提取。如果仔细选择提取的特征,则预期特征集将从输入数据中提取相关信息,以便使用此缩减表示而不是全尺寸输入来执行所需任务。
特征提取=如何表示我们发现的有趣点,将它们与图像中的其他有趣点(特征)进行比较。 (例如,这一点的局部区域强度?点周围区域的局部方向?等等......)
实际示例:你可以找到一个带有哈里斯角方法的角落,但是你可以用你想要的任何方法来描述它(例如,直方图,HOG,第8个邻接中的局部方位)
你可以在这里看到一些更多的信息, Wikipedia link
朱利安,(帮助维基百科:p)答案 1 :(得分:22)
Feature Detection
和Feature descriptor extraction
都是Feature based image registration
的一部分。只有在整个基于特征的图像注册过程的背景下查看它们才能理解它们的工作是有意义的。
基于特征的注册算法
PCL documentation的以下图片显示了这样的注册管道:
数据采集:输入图像和参考图像被输入算法。图像应从略微不同的视点显示相同的场景。
关键点估算(功能检测):关键点(interest point)是点云中具有以下特征的点:
特征描述符(描述符提取器):在检测到关键点之后,我们继续计算每个关键点的描述符。 "本地描述符是点的本地邻域的紧凑表示。与描述完整对象或点云的全局描述符相比,局部描述符仅尝试在点周围的局部邻域中类似于形状和外观,因此非常适合于在匹配方面表示它。" (Dirk Holz et al.)。 OpenCV选项:
对应关系估计(描述符匹配器):下一个任务是找到两个图像中找到的关键点之间的对应关系。因此,提取的要素被放置在可以有效搜索的结构中(例如kd-tree)。通常,查找所有局部特征描述符并将它们中的每一个与来自另一个图像的对应对应物相匹配就足够了。然而,由于来自类似场景的两个图像不一定具有相同数量的特征描述符,因为一个云可以具有比另一个更多的数据,我们需要运行分离的对应拒绝过程。 OpenCV选项:
通信拒绝:执行通信拒绝的最常用方法之一是使用RANSAC(随机抽样共识)。
转换估计:在计算两个图像之间的鲁棒对应关系后,使用Absolute Orientation Algorithm
计算转换矩阵,该转换矩阵应用于输入图像以匹配参考图像。有许多不同的算法方法可以做到这一点,常见的方法是:Singular Value Decomposition(SVD)。