5.3 理解关键点匹配

5.3 理解关键点检测

在第4章“哺乳动物脸部的检测与融合”中的小节"理解层叠分类器的检测原理"时,考虑了在不同的位置、不同的放大或尺度下寻找一组高对比度特征的问题。如前所述,Haar和LBP级联分类器解决了这个问题。因此,我们可以说它们是尺度不变的(对尺度变化具有健壮性)。然而,我们也注意到这些解不是旋转不变的(对旋转的变化是健壮的)。为什么?考虑一下各个独立的特性。Haar-like特征包括边、线和点,它们都是对称的。LBP的特征是梯度,它也可能是对称的。对称的特征在物体旋转时不能给我们提供清晰的指示。

现在,让我们考虑同时是尺度不变和旋转不变的方案。它们必须使用称为角的非对称特性。一个角在一个方向范围内有明亮的邻域,在其余方向范围内有暗的邻域。一个范围必须大于另一个范围,否则该特性就是边,而不是角。例如,一个物体的参考图像可能包含一个直角的角,其亮的邻边在12点到3点方向之间,暗的邻边在3点到12点方向之间。如果我们发现一个场景包含一个直角角,其明亮的邻边在1点到4点方向之间,我们可能会将这个特征(以及其他特征)与参考的物体匹配。然后,我们可以推断场景的对象相对于参考对象顺时针旋转了30度。广义上,这种尺度和旋转不变比较有三个步骤:

  1. 检测:检测角
  2. 提取:对每个角进行统计,从而提取描述符.
  3. 匹配:对不同的图像匹配描述符.
    通常,检测和提取是一种算法的一部分,匹配器是另一种可以处理多种描述符的算法。让我们考虑两种流行的算法:带有FLANN匹配器的SURF检测器/提取器和带有brute-force匹配器的ORB检测器/提取器。

[OpenCV的官方文档包含了一系列优秀的关于检测,提取和匹配的算法,可以访问http://docs.opencv.org/3.1.0/db/d27/tutorial_py_table_of_contents_feature2d.html参考.
要了解更多的关于抽取的优秀的教程,可以参考Gil Levi的关于主体为抽取的博客,可以从A Short introduction to descriptors开始,该博客url为https://gilscvblog.wordpress.com/2013/08/18/a-shortintroduction-to-descriptors/.]

5.3.1 SURF和FLANN

角检测的一种方法是找出图像的原始版本和模糊版本之间的区别。这个差别在角落里最大。一种称为尺度不变特征变换(SIFT)的算法推广了这种方法。对于每个检测到的角,SIFT提取一个描述符,该描述符包含128个灰度直方图单元,用于不同的亮度级别和角周围的不同区域。一种新的算法,Speeded-up Robust Features(SURF),遵循与SIFT相同的通用方法,但应用了许多优化。

SIFT和SURF是专利,因此我建议您只将它们用于非商业研究目的或研究。它们是在opencv_contrib的xfeatures2d模块的cv::xfeatures2d::SURF类和cv::xfeatures2d:SIFT中实现的。这些是cv::Feature2D的子类,cv::Feature2D是标准功能模块的一部分。

对于SIFT和SURF,一个流行的匹配器是Fast Libray for Approximate Nearest Neighbors(FLANN)。FLANN针对具有高维空间的大型数据集中的最近邻搜索进行了优化,例如具有128个元素的SIFT或SURF描述符。cv::DescriptorMatcher类实现了包括FLANN在内的许多算法,我们通过工厂函数cv::DescriptorMatcher::create来选择算法。cv::DescriptorMatcher类是标准features2d模块的一部分,FLANN的实现依赖于标准FLANN模块。

如果opencv_contrib可用,BeanCounter将使用SURF和FLANN。这种组合提供了可接受的速度和良好的可靠性,并广泛应用于工业,尽管SURF是专利。

5.3.2 ORB and brute-force Hamming-distance匹配

与SIFT和SURF相比,其他几种算法具有免费、使用更少内存和运行更快的优点,尽管它们的可靠性较低。

Features from Accelerated Segment Test(FAST)是一种不依赖于模糊滤波器的角检测算法。它只考虑相邻像素之间的亮度差异,如果前几个像素看起来不像一个角落,它就会快速拒绝邻域。FAST不是旋转不变的。

Binary Robust Independent Elementary Features(BRIEF)是一种描述符提取算法,它生成一个二值元素向量(0或1),每个元素表示角周围一对区域的相对亮度。值1表示第一个区域更亮。BRIEF不是旋转不变的。

Oriented FAST and Rotated BRIEF (ORB)使用FAST的一种变体进行检测,使用BRIEF的一种变体进行提取。ORB比最初的FAST和BRIEF更快,而且与它们不同的是,它是旋转不变的。

[更多关于ORB算法的资料,可以参考以下由OpenCV的开发者编写论文
Ethan Rublee, Vincent Rabaud, Kurt Konolige, and Gary Bradski. ORB: an efficient alternative to SIFT or SURF. Menlo Park, California: Willow Garage, 2011. http://www.willowgarage.com/sites/default/files/orb_final.pdf]

FAST、BRIEF和ORB在cv::FastFeatureDetector、cv:: xfeatures2d::BriefDescriptorExtractor和cv::ORB类中实现。这些都是cv::Feature2D的子类。

对于BRIEF、ORB和其他二进制描述符,可以使用brute-force matching with the Hamming distance作为度量。Brute-force匹配仅仅由选择匹配项组成,这些匹配项最小化了匹配的描述符向量对之间的距离度量。Hamming distance是不同向量元素的计数。cv::DescriptorMatcher类实现了很多算法,包括brute-force Hamming distance,我们通过工厂函数cv::DescriptorMatcher::create来选择该算法。

如果opencv_contrib不可用,BeanCounter将使用ORB和brute-force匹配。这种组合提供了良好的速度和可接受的可靠性。特别在移动和嵌入式设备上得到了广泛的应用.

###返回到第五章目录###
###返回到书籍目录###

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值