Lowe's比率检验是如何工作的?

34
假设我有一组N个图像,并且已经计算出每个图像的SIFT描述符。我现在想要计算不同特征之间的匹配。我听说常见的方法是Lowe的比率测试,但我无法理解它是如何工作的。可以有人给我解释一下吗?

您可以阅读下面的教程:https://docs.opencv.org/3.0-beta/doc/tutorials/features2d/akaze_matching/akaze_matching.html总结一下,每个特征描述符都与n个最近邻进行匹配。(在下面的情况下,n=2)matcher.knnMatch(desc1, desc2, nn_matches, 2);然后,Lowe比率测试试图找出哪一个是最佳匹配。 - eiki
11
比值测试并不确定哪一个是最佳匹配。比值测试的作用是检查匹配是否有歧义,需要被删除。可以将其看作是一种异常值去除技术。 - dari
1
亲爱的 @dari,你能更清晰地解释一下吗? - elena
3
如果比率接近1,那么两个匹配项都同样好,选择其中一个会使你在大约50%的情况下得到异常值。因此,通常最好放弃这两个匹配项。 - dari
1
能否爱上一个算法?(感谢o.g. Lowe和所有回答者-我今天学到了一些东西!) - rinogo
3个回答

66

简化版:第一张图片的每个关键点都与第二张图片的多个关键点匹配。我们为每个关键点保留2个最佳匹配项(最佳匹配项=具有最小距离测量值的匹配项)。Lowe的测试检查这两个距离是否足够不同。如果它们不够不同,那么该关键点将被排除,并且不会用于进一步计算。

详细版:

David Lowe提出了一种通过消除次优匹配来过滤关键点匹配的简单方法。需要注意的是,尽管在计算机视觉领域广泛使用,但该方法并不限于CV。这里我描述了该方法以及如何在计算机视觉的上下文中实现/应用。

假设L1是图像1的关键点集合,其中每个关键点都有一个描述,该描述列出关于关键点的信息,这些信息的性质实际上取决于使用的描述符算法。而L2是图像2的关键点集合。典型的匹配算法将通过找到L1中每个关键点在L2中的最接近匹配项来工作。如果使用欧几里得距离,就像在Lowe的论文中一样,这意味着来自L2集合的关键点与来自L1集合的关键点之间的欧几里得距离最小。

在这里我们可能会被诱导只是设定一个阈值,并消除距离高于该阈值的所有匹配项。但实际上并不那么简单,因为描述符中的不是所有变量都是“有差别”的:两个关键点之间的距离可能很小,因为它们描述符中的大多数变量具有相似的值,但是这些变量可能与实际匹配无关。可以始终向描述符的变量添加加权因子,使更具区分能力的特征“计数”更多。Lowe提出了一个更简单的解决方案,如下所述。

首先,我们将L1中的关键点与L2中的两个关键点匹配。从假设图像1中的关键点不能有超过一个等价物在图像2中推断出,这两个匹配项不能同时正确:它们中至少有一个是错误的。根据Lowe的推理,距离最近的匹配项是“好”匹配项,而第二小距离的匹配项相当于随机噪声,一种基本速率。如果“好”匹配项无法与噪声区别开来,则应拒绝“好”匹配项,因为它在信息上没有带来任何有趣的内容。因此,总体原则是最佳匹配项和次佳匹配项之间需要有足够大的差异。

如何操作化“足够的差异”的概念很重要:Lowe使用两个距离的比率,通常表示为:

if distance1 < distance2 * a_constant then ....

其中distance1是关键点与其最佳匹配之间的距离,distance2是关键点与其次佳匹配之间的距离。使用“小于”符号可能会有些令人困惑,但当考虑到较小的距离意味着该点更接近时,这一点就变得明显了。在OpenCV世界中,knnMatch函数将从最好到最差返回匹配项,因此第一个匹配项将具有较小的距离。问题实际上是“多小?”为了弄清楚这一点,我们将distance2乘以介于0和1之间的常数,从而减小distance2的值。然后我们再次查看distance1:它是否仍然小于distance2?如果是,则它通过了测试,并将添加到良好点列表中。如果不是,则必须将其消除。

这解释了“小于”部分,但乘法是怎么回事呢?由于我们正在查看距离之间的差异,为什么不只是使用distance1和distance2之间的实际数学差异?尽管技术上我们可以,但所得出的差异将是绝对的,过于依赖描述符内部的变量、我们使用的距离测量类型等。如果用于提取描述符的代码发生更改,影响所有距离测量,那该怎么办?简而言之,进行distance1-distance2会使方法更加脆弱,需要经常进行调整,并使方法学比较更加复杂。这都与比率有关。

带走的信息:Lowe的解决方案不仅因其简洁性而引人注目,还因为它在很多方面都是算法无关的。


3
我认为这个方法在计算机视觉以外的领域也适用,并且它是一种不使用固定阈值来选择距离的好方法。 - Mart10
你是对的。我添加了一句话来表达比值测试与CV无关的想法。 - GuillaumeL
如果你使用bf.knnMatch(des1, des2, k=3)或者一般情况下的k>2呢?这种情况下,它会返回一个列表的列表,每个子列表的大小为k。那么Lowe的比率测试应该如何执行? - nbro
3
对于k>2的情况,其他配对将会是第三好、第四好等等。Lowe's测试比较最佳和次佳匹配,因为次佳匹配被认为是在"噪声"(不良匹配)中最好的配对。就像算法在说:"给我你认为正确的配对。现在给出同一关键点中你所有糟糕配对中的最佳配对。我看不到明显的差异,因此与该关键点相关的任何配对都不能用于计算单应性矩阵"。 - GuillaumeL
3
获取关键点匹配的前两个最佳结果。如果这些匹配之间的“距离”相似,则它们可能不是很好的匹配,应予以丢弃。如果最佳匹配结果与第二个最佳匹配结果之间的距离足够大,则很可能是一个“好”的匹配结果,应该保留。 - rinogo
这是我看过和阅读过的最好的Lowe比率测试解释,而且我已经阅读了很多。如果我可以冒昧一下,这甚至比原始的SIFT论文中所解释的更好。做得好! - rayryeng

6

Lowe's 比率测试


算法:

  1. 首先,我们计算图像一中特征fi与图像二中所有特征fj之间的距离。
  2. 我们选择图像二中与图像一中特征fi具有最小距离的特征fc作为我们的最佳匹配。
  3. 然后我们获取图像二中离特征fi第二近的特征fs
  4. 接下来通过距离比率计算我们的最佳匹配fc比次佳匹配fs更接近多少。
  5. 最后我们保留距离比率小于距离比率阈值的匹配项(即distance ratio < distance ratio threshold)。

距离比率 = d(fi, fc)/d(fi, fs) 定义为图像一中特征fi与在图像二中与其最接近的匹配fc之间的距离除以与次接近匹配fs之间的距离。

通常情况下我们将距离比率阈值(ρ)设置为0.5左右,这意味着我们要求最佳匹配距离次佳匹配至少要接近两倍于原始特征描述符。因此丢弃不明确的匹配项并保留好的匹配项。


1
为更好地理解比值测试,您需要阅读他的文章。只有通过阅读文章,您才能找到答案。 简单的答案是它很低,Lowe在他的实验中实现了这一点,并建议在选择两个相似距离之间时,选择距离为另一个距离的0.7的那个。 请查看下面的链接: https://www.cs.ubc.ca/~lowe/papers/ijcv04.pdf

7
我已经全力以赴地写了一篇答案,总结了Lowe的文章,并加入了一些在论文中不明显的提示。请看一下 :) - GuillaumeL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接