MATLAB和OpenCV之间不同的SURF特征提取?
我正在用OpenCV实现一个算法,这是我在MATLAB中设计的。我正在为OpenCV中的SURF特性提取器编写一个单元测试,我想比较MATLAB提取的SURF特性与OpenCV的输出 这个问题是,对MATLAB和OpenCV提取器使用相同的参数,我得到了不同数量的特性。这怎么可能?是否有不同的方法来实现SURF 对于MATLAB(),我使用:MATLAB和OpenCV之间不同的SURF特征提取?,matlab,opencv,computer-vision,surf,matlab-cvst,Matlab,Opencv,Computer Vision,Surf,Matlab Cvst,我正在用OpenCV实现一个算法,这是我在MATLAB中设计的。我正在为OpenCV中的SURF特性提取器编写一个单元测试,我想比较MATLAB提取的SURF特性与OpenCV的输出 这个问题是,对MATLAB和OpenCV提取器使用相同的参数,我得到了不同数量的特性。这怎么可能?是否有不同的方法来实现SURF 对于MATLAB(),我使用: MetricThresh:200 NumOctaves:3 NumscaleLevel:4 SURFSize:64 对于我正在使用的OpenCV: Hes
MetricThresh:200
NumOctaves:3
NumscaleLevel:4
SURFSize:64
对于我正在使用的OpenCV:
HessianThreshold:200
nOctaves:3
nOctaveLayers:4
扩展:false
直立:正确
这是怎么回事?有没有更好的方法来测试openCV和MATLAB是否从相同的图像中生成相同的提取的SURF特征
谢谢你的帮助 在引擎盖下,MATLAB使用OpenCV实现一些功能,包括检测特征。如果查看
$matlabroot/bin/$arch
文件夹,除了网关库ocv.dll
)之外,还可以找到OpenCV共享库
事实上,两个框架的文档中都提到了相同的参考文献,这表明算法参数在两个框架中具有相同的含义
MATLAB
赫伯特湾、安德烈亚斯·艾斯、蒂恩·图伊特拉尔斯、吕克·范古尔“冲浪:
加速“鲁棒特征”,计算机视觉和图像理解
(CVIU),第110卷,第3期,第346-359页,2008年
OpenCV
Bay,H.和Tuytelaars,T.和Van Gool,L.“冲浪:加速的健壮功能”,第9届>欧洲计算机视觉会议,2006年
首先,考虑到默认值,确保在这两种情况下使用相同的参数值。以下是供参考的文档页面 因此,请尝试以下代码: 在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);
cv::Mat img;//一些灰度图像
cv::冲浪冲浪(200.0,3,4-2,假,真);
cv::Mat mask;//可选掩码(此处未使用)
std::向量pts;
surf(img、面罩、pts);
除此之外,MATLAB通常包含一个较旧版本的OpenCV(我的MATLAB R2013a附带了v2.4.2 DLL),这可能会导致与您使用的任何OpenCV版本不同的结果(目前最新版本是v2.4.6)fyi您可能会认为此项目有用:(将OpenCV公开为MATLAB中的MEX函数)请注意,我从
numcalelevels
中减去了2,得到了nOctaveLayers
(检查edit detectsurfeatures.m
的源代码以了解)您好,感谢您的详细回答!我用这些参数尝试了你的方法,从相同的灰度图像中,OpenCV检测到254个点,而MATLAB检测到267个点。我使用的是Matlab2012a,我使用的OpenCV版本是v2.4.5。我想下一个合乎逻辑的步骤是重复这个测试,但是使用MATLAB使用v2.4.5库。如果你有任何其他建议,我将不胜感激。谢谢您的时间和帮助。@trianta2:就像我说的,如果您想获得完全相同的结果,您必须在两种情况下使用相同的OpenCV版本(这可能是不可能的)。据我所知,MatlabR2012a附带了OpenCV DLL v2.1.0(到目前为止被认为非常旧)。看到那些是硬编码的(你不能真正改变Matlab链接的),你唯一的选择就是这个旧版本,并建立你的C++程序来对付它…否则,我建议您忽略这些细微差异,坚持使用最新版本:)