我目前正在使用OpenCV提供的几种特征检测器,并将它们作为视觉特征匹配的基础进行比较。

我正在使用SIFT描述符。在检测MSER和DoG(SIFT)功能时,我已经完成了令人满意的匹配(拒绝了不匹配项之后)。比较,也是因为在最后的应用中,视觉特征跟踪过程将提供一组GFTT特征。

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

我使用GFTT进行的第一个结果很糟糕,直到我比较了典型的sizeoctave参数具有不同类型的功能:



MSER设置大小(10到40px之间)并将八度设为0
DoG(SIFT)设置大小和八度(大小/八度比率在20到40之间)

GFTT参数始终为:size = 3,八度= 0


我认为这是因为GFTT功能的主要目的不是用于匹配,而只是用于跟踪。这说明了匹配结果的质量低下,因为从这样的微小特征中提取的描述符不再具有歧视性,并且对许多事物不变,包括小的1像素偏移。

如果我手动设置GFTT的size到10-12,我得到了很好的结果,与使用MSER或DoG(SIFT)时非常相似。

我的问题是:有没有一种更好的方法来确定增加size(和/或octave),而不是仅仅去看看10看看是否可行?我想避免对size增加值进行硬编码,并以编程方式确定它,但是只要我有一些可靠的论据来支持对新的size增加值/ size增加值/ size估计算法的选择,就可以进行硬编码了。

评论

Hey @ penelope:看看这个链接,这个家伙已经做了一些不错的工作。[computer-vision-talks.com/2011/08/…

@Sistu嘿,在一般情况下,对于平面对象,看起来像是描述符的很好的一般比较,但是我正在处理特定类型的图像,我需要做自己的测试。此外,这个问题比“我需要参考材料来比较各种类型的除草机的性能”更为具体。不过,这是一个不错的链接,请查看一下。

#1 楼

我不确定您的确切问题是否会得到很好的回答:SIFT和SURF的比例空间实际上是为自动估算围绕拐角状关键点的“良好”相关邻域大小而设计的(这是什么好特征

现在,更肯定的答案是:


建立关键点和良好匹配的数据库(例如,使用方形校准图案)并创建在此数据库上进行自动性能评估以找到正确的大小。该任务实际上可以真正实现自动化(请参见Mikolajczyk和Schmid关于点匹配评估的工作)
在图像金字塔中嵌入您的良好功能,使其也具有某种比例。您可以在多尺度FAST和Harris兴趣点上查找参考,这些参考点的操作与此过程非常相似。模糊(或多或少的blockSize运算符所做的事情)并查看拐角何时消失。但是请注意,更多的模糊会使拐角远离其真实位置。

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

评论


$ \ begingroup $
我一直在寻找比您建议的解决方案更快捷,更简单的解决方案。此外,我只能在提取关键点并与某物匹配后才能确定匹配是好是坏。即使我完全随机地匹配它们,我也会得到一些很好的匹配-所以您的第一个建议并没有帮助。至于第二部分,更加快捷:我知道没有完美的参数,但是正如我所说,将大小增加到12很有帮助-质量可以与SIFT和MSER匹配相媲美。我只是毫不犹豫地选择100以上或34以上的12 ...
$ \ endgroup $
–佩内洛普
2012年5月9日9:47

#2 楼

为了帮助您确定检测器的最佳参数,OpenCV为此配备了AjusterAdapter。我从来没有亲自使用过它,但是它可能是通过编程确定参数的标准方法。
还要注意,尽管Keypoints具有多个属性,但并不是所有算法都有意义。因为Keypoint结构用于不同的算法,所以它具有所有这些字段,但有时不使用它们,这就是为什么要获得那些octave = 0的原因。海事组织。

评论


$ \ begingroup $
我知道某些类型的功能有时不是出于某种目的的最佳类型,但是最近的工作一直在尝试使用不止一种类型的v.features / interest区域并通过组合获得更好结果的方法。可以单独使用任何一种类型(如果您有兴趣,我可以添加指向作品的链接)。另外,我正在做的至少是部分研究,因此,我尝试做一下并评估使用不同关键点类型获得的结果,即使其中一些结果不如最新技术也是如此。艺术。我将研究AdjusterAdapter,谢谢。
$ \ endgroup $
–佩内洛普
2012年6月14日下午7:16

$ \ begingroup $
我只是浏览了界面提供的功能。它只能增加或减少检测器检测到的功能数量。此外,我对检测到的功能没有任何问题。我只是想调整它们的大小,以便更好地用于匹配(将大小增加到10可以做到这一点,但是我对此没有任何具体的(足够的)论点)
$ \ endgroup $
–佩内洛普
2012年6月14日上午8:17