短版:第一张图片的每个关键点都与第二张图片的多个关键点相匹配。我们为每个关键点保留 2 个最佳匹配(最佳匹配 = 距离测量值最小的那些)。劳氏检验检查这两个距离是否足够不同。如果不是,则该关键点被消除,不再用于进一步计算。
加长版:
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小吗?如果是,那么它通过了测试,并将被添加到好点列表中。如果不是,就必须淘汰。
这样就解释了“小于”部分,但是乘法呢?既然我们正在查看距离之间的差异,为什么不直接使用距离 1 和距离 2 之间的实际数学差异呢?虽然从技术上讲我们可以,但最终的差异将是绝对值,它太依赖于描述符中的变量、我们使用的距离测量类型等。如果提取描述的代码发生变化,影响所有距离测量怎么办?简而言之,进行距离1 - 距离2 的鲁棒性会降低,需要经常进行调整,并且会使方法比较更加复杂。关键在于比例。
要点:Lowe 的解决方案很有趣,不仅因为它简单,而且因为它在很多方面与算法无关。