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