在MATLAB和OpenCV之间提取不同的SURF特征?

时间:2013-07-25 18:05:48

标签: matlab opencv computer-vision surf matlab-cvst

我在OpenCV中实现了一个我在MATLAB中设计的算法。我正在为OpenCV中的SURF特征提取器编写单元测试,我想将MATLAB提取的SURF特性的输出与OpenCV进行比较。

这个问题是,对于MATLAB和OpenCV提取器使用相同的参数,我得到了不同数量的功能。这怎么可能?是否有不同的方法来实施SURF?

对于MATLAB(http://www.mathworks.com/help/vision/ref/detectsurffeatures.html)我正在使用:

MetricThresh:200
NumOctaves:3
NumScaleLevels:4
SURFSize:64

对于我正在使用的OpenCV:

HessianThreshold:200
nOctaves:3
nOctaveLayers:4
延长:假 正直的:真的

这里发生了什么?有没有更好的方法来测试openCV和MATLAB是否从同一图像中生成相同的提取SURF特征?

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

在幕后,MATLAB将OpenCV用于其computer vision部分功能,包括检测SURF功能。如果您查看$matlabroot/bin/$arch文件夹,除了网关库ocv.dll之外,您还可以找到OpenCV共享库。)

事实上,在两者的文档中都提到了相同的参考文件,这表明算法参数在两个框架中具有相同的含义。

MATLAB

  

Herbert Bay,Andreas Ess,Tinne Tuytelaars,Luc Van Gool“SURF:   加快强大功能“,计算机视觉和图像理解   (CVIU),Vol。 110,No。3,pp.346--359,2008

的OpenCV

  

Bay,H。和Tuytelaars,T。和Van Gool,L。“SURF:Speeded Up Robust Features”,第9版>欧洲计算机视觉会议,2006年


首先,请确保在两者中使用相同的参数值,并考虑默认值。以下是OpenCVMATLAB的文档页面供参考。

请尝试以下代码:

在MATLAB中:

>> img = [];     % some 2d grayscale image
>> pts = detectSURFFeatures(img, 'MetricThreshold',200, ...
       'NumOctaves',3, 'NumScaleLevels',4);

在C ++ OpenCV中:

cv::Mat img;     // some grayscale image
cv::SURF surf(200.0, 3, 4-2, false, true);

cv::Mat mask;    // optional mask (unused here)
std::vector<cv::KeyPoint> pts;
surf(img, mask, pts);

除此之外,MATLAB通常包含较旧版本的OpenCV(我的MATLAB R2013a附带v2.4.2 DLL),这可能会导致您使用的任何OpenCV版本产生不同的结果(最新版本为v2.4.6)