我目前正在使用OpenCV作为视觉特征匹配基础的几种特征检测器,并对其性能进行比较。
我正在使用SIFT描述符。在检测MSER和DoG(SIFT)功能时,我已经完成了令人满意的匹配(拒绝了不匹配的匹配之后)。
目前,我正在使用GFTT(要跟踪的良好功能-Harris角)测试我的代码以进行比较,并且因为在最后的应用中,视觉功能跟踪过程中将提供一组GFTT功能。
我使用cv::FeatureDetector::detect(...)
它为我提供了一个std::vector<cv::KeyPoint>
充满了兴趣检测的特征/关键点/地区。该结构cv::KeyPoint
包含有关要素的位置有关的基本信息,以及信息size
,并octave
在关键点已经被检测到。
在比较不同类型的特征的典型值和参数之前,我对GFTT的最初结果很糟糕:size
octave
- MSER设置大小(10到40px之间),并将八度保留为0
- DoG(SIFT)设置大小和八度(大小/八度比在20到40之间)
- GFTT参数始终为:size = 3,octave = 0
我认为这是因为GFTT功能的主要目的不是用于匹配,而只是用于跟踪。这解释了匹配结果的低质量,因为从如此微小的特征中提取的描述符不再具有歧视性,并且对于许多事物(包括小的1像素偏移)不变。
如果我手动设置size
的GFTT至10 - 12,我得到了良好的效果,非常类似于使用时MSER或DOG(SIFT) 。
我的问题是:有没有比10见才能确定增加size
(和/或octave
)多少更好的方法呢?我想避免对可能的增加进行硬编码,并以编程方式确定它,但是只要我有一些可靠的论据来支持对新的/ 增加 / 估计算法的选择,就可以进行硬编码。size
size
size
size