OpenCV 4.11.0
开源计算机视觉库
加载中…
搜索中…
未找到匹配项
使用FLANN进行特征匹配

上一教程: 特征描述
下一教程: Features2D + 单应性查找已知物体

原作者Ana Huamán
兼容性OpenCV >= 3.0

目标

在本教程中,您将学习如何:

警告
您需要 OpenCV contrib 模块 才能使用 SURF 特征(替代方案是 ORB、KAZE 等特征)。

理论

经典的特征描述符(SIFT、SURF 等)通常使用欧几里得距离(或 L2 范数)进行比较和匹配。由于 SIFT 和 SURF 描述符表示邻域中定向梯度的直方图(对于 SURF 来说是 Haar 小波响应),因此欧几里得距离的替代方案是基于直方图的度量(\( \chi^{2} \)、Earth Mover’s Distance (EMD) 等)。

Arandjelovic 等人在 [13] 中提出扩展到 RootSIFT 描述符

使用平方根(Hellinger)核代替标准欧几里得距离来测量 SIFT 描述符之间的相似性,这会导致管道所有阶段的性能大幅提升。

二进制描述符(ORB、BRISK 等)使用 汉明距离 进行匹配。此距离等效于计算二进制字符串中不同元素的数量(应用 XOR 运算后的总体计数)

\[ d_{hamming} \left ( a,b \right ) = \sum_{i=0}^{n-1} \left ( a_i \oplus b_i \right ) \]

为了过滤匹配项,Lowe 在 [173] 中提出使用距离比率测试来尝试消除错误匹配。计算考虑的关键点的两个最近匹配之间的距离比率,当此值低于阈值时,它是一个良好的匹配。实际上,该比率有助于区分模糊匹配(两个最近邻之间的距离比率接近于 1)和良好区分的匹配。下图来自 SIFT 论文,它说明了基于最近邻距离比率测试的匹配正确的概率。

替代或附加的过滤测试是

  • 交叉检验测试(如果特征 \( f_b \) 是 \( I_b \) 中 \( f_a \) 的最佳匹配,而特征 \( f_a \) 是 \( I_a \) 中 \( f_b \) 的最佳匹配,则为良好匹配 \( \left( f_a, f_b \right) \))
  • 几何测试(消除不符合几何模型的匹配,例如,用于平面物体的 RANSAC 或鲁棒单应性)

代码

说明

结果

  • 以下是使用距离比率测试的SURF特征匹配结果