admin管理员组

文章数量:1650772

写在前面:

  • xfeature2d模块是contrib中对于feature2d模块的扩展,其中包含的功能受专利保护或功能较新用于测试
  • 由于feature2d模块主要用途是特征点检测,而特征点匹配也与之密切相关,因此匹配器也一并介绍
  • 文章对两个模块中的Feature2D类进行归类和特点总结
  • 先写这么多吧,后面填坑

进行特征匹配的一般步骤

  • 实例化特征点检测器,进行特征点检测
  • 实例化描述子提取器,对计算得到特征点提取描述子
  • 实例化匹配器,根据描述子进行匹配
  • 筛选优秀匹配结果并绘图

Feature2D类公共继承自FeatureDetector和DescriptorExtractor类,但Feature2D的子类不都实现了这两种类的方法。

对于同时拥有检测器和提取器的类如Surf,它的子类SurfFeatureDetector和SurfDescriptorExtractor与Surf类等价,实例化一个Surf类也就实例化了它的两个子类,但两个子类不可单独实例化

重要概念:

不变性:即使目标的外观发生了某种变化,但是你依然可以把它识别出来

旋转不变性:拍摄时进行旋转仍然可以识别

尺度不变性:拍摄时进行缩放仍然可以识别


同时拥有检测器和提取器

cv::xfeatures2d::SIFT

ScaleInvariant Feature Transform,尺度不变特征变换算法

高斯差分(DoG)去近似高斯拉普拉斯算子(LoG)

描述子128维,512字节

具有尺度不变性,旋转不变性。计算精度高,但内存消耗大,计算量大速度慢

cv::xfeatures2d::SURF

SpeededUpRobustFeatures,加速鲁棒性特征,是SIFT的加速版,特征点检测的速度有着极大的提升

盒子滤波器去近似高斯拉普拉斯算子(LoG)

描述子64维或128维,256或512字节。

具有尺度不变性,旋转不变性(允许不使用旋转不变性以提高速度)。在性能相当的情况下它比 SIFT 快 3 倍,擅长处理模糊和旋转的图像,但不善于处理视角变化和光照变化,内存消耗仍然大。

cv::ORB

Oriented FAST and Rotated BRIEF,  即 定向的FastDetector+旋转的BriefDescriptorExtractor

匹配时使用汉明距离匹配

具有一定的尺度不变性(由图像金字塔实现,而图像金字塔层数有限),旋转不变性(BRIEF本身不具有,ORB进行改进),ORB 比 SURF 和 SIFT 快得多,可获得实时效果

cv::BRISK

cv::KAZE

cv::AKAZE


特征点检测器

cv::GFTTDetector

cv::FastFeatureDetector

cv::AgastFeatureDetector

cv::SimpleBlobDetector

cv::xfeatures2d::MSDDetector

cv::xfeatures2d::StarDetector

cv::xfeatures2d::HarrisLaplaceFeatureDetector


描述子提取器

cv::xfeatures2d::BriefDescriptorExtractor

BinaryRobustIndependentElementaryFeatures,二进制独立鲁棒基本特征

将描述子使用 PCA,LDA 等几种方法对其进行压缩,匹配用正常距离匹配

使用 LSH(Locality Sensitive Hashing,局部敏感哈希)等方法可将 SIFT 描述子转换为二进制字符串,匹配时需要用汉明距离进行匹配

字符串为16、32(默认)、64字节

不具有旋转不变性,计算和匹配特征点描述子更快,需要先得到描述子再计算为字符串,并不能解决内存问题

cv::MSER

cv::xfeatures2d::BoostDesc

cv::xfeatures2d::FREAK

cv::xfeatures2d::DAISY

cv::xfeatures2d::LUCID

cv::xfeatures2d::LATCH

cv::xfeatures2d::VGG


描述子匹配器

cv::BFMatcher 

Brute-Force匹配器(BF),暴力匹配器,  可以获得最优结果,但花费时间长

cv::FlannBasedMatcher  

FLANN匹配器,即基于快速近似最近邻算法的匹配器,对于大型数据集,它比 BFMatcher 工作得更快

本文标签: 模块feature2dxfeature2d