OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
使用 FLANN 进行特征匹配

上一个教程: 特征描述
下一个教程: Features2D + 单应性查找已知对象

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

目标

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

警告
你需要 OpenCV contrib modules 才能使用 SURF 特征(替代方案包括 ORB、KAZE 等特征)。

理论

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

Arandjelovic 等人在 [14] 中提出了扩展到 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 在 [176] 中提出使用距离比率测试来尝试消除错误匹配。计算所考虑的关键点的两个最近匹配项之间的距离比率,当此值低于阈值时,它是一个好的匹配。实际上,该比率有助于区分模糊匹配(两个最近邻居之间的距离比率接近 1)和良好区分的匹配。下图来自 SIFT 论文,说明了基于最近邻距离比率测试的匹配正确的概率。

替代或附加的过滤测试是

  • 交叉检查测试(如果特征 \( f_b \) 是 \( I_b \) 中 \( f_a \) 的最佳匹配,并且特征 \( f_a \) 是 \( I_a \) 中 \( f_b \) 的最佳匹配,则好匹配 \( \left( f_a, f_b \right) \))
  • 几何测试(消除不适合几何模型的匹配,例如 RANSAC 或用于平面对象的鲁棒单应性)

代码

解释

结果

  • 这是使用距离比率测试进行 SURF 特征匹配的结果