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

标签 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 ) 我正在使用:

指标阈值: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/17865546/

相关文章:

android - 如何在 openCV 中找到 Rect 对象的角点?

opencv - 校准两个相机 OpenCV

matlab - 生成许多​​随机向量与生成单个随机矩阵之间是否存在统计差异

matlab - Octave 无法识别 .m 文件中的更改

matlab - 1 个循环中的多个图形,每次迭代在每个图形上添加一条线

python - 已安装 OpenCV 但在 IDLE 中未找到模块 "cv2"

c++ - 将 CV::Mat 转换为 Arma::mat

machine-learning - 在没有提供注释的情况下,如何在 PascalVOC 2012 或 COCO 测试集上测试模型?

c++ - OpenCV 前景检测速度慢

matlab - 如何在matlab中编写指标函数