C ++ OpenCV SURF vs SurfFeatureDetector vs SurfDescriptorExtractor

时间:2016-08-21 10:55:42

标签: c++ opencv surf

到目前为止,我使用cv::SurfFeatureDetector从图像中获取SURF点。现在我想得到描述符。所以,我认为cv::SurfDescriptorExtractor是我需要的。但是,我看到cv::SurfFeatureDetectorSurfDescriptorExtractor都可以检测到SURF点并计算描述符。还有cv::SURF可以做同样的事情。这3个之间有什么区别吗?

1 个答案:

答案 0 :(得分:0)

不,没有区别。

您可以在source code中看到它们是相同的:

typedef SURF SurfFeatureDetector;
typedef SURF SurfDescriptorExtractor;

实际上,XXXFeatureDetectorXXXDescriptorExtractor只是两个独立任务的通用接口,因此您可以将关键点检测与描述符计算分开,例如,您可以使用MSER检测关键点并进行计算SIFT的描述符。

您可以看到here SURF inherits from Feature2D`:

class CV_EXPORTS_W SURF : public Feature2D

FeatureDetectorDescriptorExtractor the sameFeature2D

typedef Feature2D FeatureDetector;
typedef Feature2D DescriptorExtractor;

FeatureDetector DescriptorExtractor 之间的区别是:

  

OpenCV中的特征检测器具有包含通用接口的包装器,使您可以轻松地在解决相同问题的不同算法之间切换。实现关键点检测器的所有对象都继承FeatureDetector接口。

常见问题是提取KeyPoint s。

  

OpenCV中关键点描述符的提取器具有包含通用接口的包装器,使您可以轻松地在解决相同问题的不同算法之间切换。本节致力于计算描述符,表示为多维空间中的向量。实现向量描述符提取器的所有对象都继承DescriptorExtractor接口。

这种区别对于将查找关键点的任务与计算描述符的任务分开很有用,因为并非所有方法都能同时执行这两项操作。例如。 MSER只是一个特征检测器,但不计算描述符。