如何估计位于哈里斯角的视觉特征的倍频程和大小

信息处理 图像处理 opencv 计算机视觉
2022-01-17 13:27:10

我目前正在使用并比较 OpenCV 提供的几个特征检测器的性能,作为视觉特征匹配的基础。

我正在使用SIFT描述符。在检测MSERDoG (SIFT)特征时,我已经完成了令人满意的匹配(在拒绝错误匹配之后)。

目前,我正在使用GFTT(Good Features to Track - Harris 角)测试我的代码以进行比较,并且还因为在最终应用程序中,视觉特征跟踪过程将提供一组 GFTT 功能。

我正在使用cv::FeatureDetector::detect(...)它为我提供了一个std::vector<cv::KeyPoint>充满检测到的特征/关键点/感兴趣的区域该结构cv::KeyPoint包含有关特征位置的基本信息,以及有关已检测到关键点size及其所在位置的信息。octave

在比较不同类型特征的典型参数和参数之前,我使用GFTT的第一个结果很糟糕:sizeoctave

  • MSER设置大小(在 10 到 40 像素之间)并将八度音程保留为 0
  • DoG (SIFT)设置大小八度大小/八度比在 20 和 40 之间)
  • GFTT的参数总是size = 3 , octave = 0

我认为这是因为GFTT功能的主要目的不是用于匹配,而只是用于跟踪。这解释了匹配结果的低质量,因为从如此微小的特征中提取的描述符不再对许多事物具有区分性和不变性,包括小的 1 像素偏移。

如果我手动将GFTT设置为size10 - 12 ,我会得到很好的结果,这与使用MSERDoG (SIFT)时非常相似

我的问题是:有没有just-go-with-10-see-if-it-workssize更好的方法来确定(and/or ) 增加多少如果可能,我想避免对增加进行硬编码并以编程方式确定它,但只要我有一些可靠的论据支持我对新/增加/估计算法的选择,硬编码是可以的。octavesizesizesizesize

2个回答

我不确定您的确切问题实际上是否有很好的回答:SIFT 和 SURF 的尺度空间实际上是为了自动估计角状关键点周围的“好”相关邻域大小(这是什么好的特征)跟踪是)。

现在,更积极的答案是:

  • 建立一个关键点和良好匹配的数据库(例如使用方形校准模式)并在该数据库上创建一个自动性能评估以找到正确的大小。这个任务实际上可以自动化(参见 Mikolajczyk 和 Schmid 关于点匹配评估的工作)

  • 将您的良好特征嵌入图像金字塔中,以使其具有某种相关的比例。您可以查找有关多尺度 FAST 和 Harris 兴趣点的参考资料,它们的作用与此过程非常相似。

为了启发式地找到最大块大小,您可以使用框模糊计算图像的估计值(这或多或少是 blockSize 运算符所做的),并查看角何时消失。但是请注意,更多的模糊会使角落远离其真实位置。

如果您真的在寻找一些快速而肮脏的修复,请尝试 5x5 和 11x11 之间的尺寸(立体声块匹配中使用的典型尺寸)。如果您正在寻找一个智力上令人满意的标准,那么请尝试在您的噪声水平下最大化两个特征点的良好匹配的可能性。

为了帮助您确定检测器的最佳参数,OpenCV 具有用于此目的的AjusterAdapter我自己从未使用过它,但这可能是以编程方式确定参数的标准方法。另请注意,尽管关键点具有多个属性,但并非所有属性都对所有算法都有意义。因为 Keypoint 结构用于不同的算法,所以它具有所有这些字段,但有时它们不被使用,这就是为什么你得到那些 octave = 0; 国际海事组织。