gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:17:57 25 4
gpt4 key购买 nike

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

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

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

指标阈值:200
Octave 数:3
NumScaleLevels:4
表面尺寸:64

对于 OpenCV,我使用的是:

黑森阈值:200
n Octave :3
nOctaveLayers:4
扩展:假
直立:正确

这是怎么回事?是否有更好的方法来测试 openCV 和 MATLAB 是否从同一图像生成相同的提取 SURF 特征?

感谢您的帮助!

最佳答案

在幕后,MATLAB 将 OpenCV 用于它的一些 computer vision功能,包括检测SURF特征。如果您查看 $matlabroot/bin/$arch 文件夹,除了网关库 ocv.dll 之外,您还会发现 OpenCV 共享库。

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

MATLAB

Herbert Bay, Andreas Ess, Tinne Tuytelaars, Luc Van Gool "SURF: Speeded Up Robust Features", Computer Vision and Image Understanding (CVIU), Vol. 110, No. 3, pp. 346--359, 2008

OpenCV

Bay, H. and Tuytelaars, T. and Van Gool, L. "SURF: Speeded Up Robust Features", 9th > European Conference on Computer Vision, 2006


首先,确保您在两者中使用相同的参数值,同时考虑默认值。这是 OpenCV 的文档页面和 MATLAB供引用。

所以试试下面的代码:

在 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)

关于matlab - 在 MATLAB 和 OpenCV 之间提取不同的 SURF 特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35957729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com