C++ OpenCV SURF vs SurfFeatureDetector vs SurfDescriptorExtr

C++ OpenCV SURF vs SurfFeatureDetector vs SurfDescriptorExtractor

本文关键字:vs SurfFeatureDetector SurfDescriptorExtr SURF OpenCV C++      更新时间:2023-10-16

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

不,没有区别。

你可以在源代码中看到它们是相同的:

typedef SURF SurfFeatureDetector;
typedef SURF SurfDescriptorExtractor;

在实践中,XXXFeatureDetectorXXXDescriptorExtractor只是两个独立任务的公共接口,因此您可以将关键点检测从描述符计算中分离出来,例如您可以使用MSER检测关键点并使用SIFT计算描述符。


你可以在这里看到SURF inherits from Feature2D ':

class CV_EXPORTS_W SURF : public Feature2D

FeatureDetectorDescriptorExtractorFeature2D相同:

typedef Feature2D FeatureDetector;
typedef Feature2D DescriptorExtractor;
FeatureDetectorDescriptorExtractor的区别是:

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

常见问题是提取KeyPoint s。

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

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