OpenCV  4.10.0
开源计算机视觉
加载...
搜索...
无匹配项
与 FLANN 匹配特征

上一个教程: 特征描述
下一个教程: Features2D + Homography 寻找已知对象

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

目标

在本教程中,你将了解如何

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

原理

通常使用欧几里得距离(或 L2 范数)比较和匹配经典特征描述符(SIFT、SURF 等)。由于 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 论文,说明了基于最近邻距离比率测试的匹配正确的概率。

其他或额外的过滤测试为

  • 交叉检验测试(理想匹配 \( \left( f_a, f_b \right) \) 如果 \( I_b \) 中的特征 \( f_b \) 是 \( f_a \) 的最佳匹配,而 \( I_a \) 中的特征 \( f_a \) 是 \( f_b \) 的最佳匹配)
  • 几何测试(剔除不符合几何模型的匹配,例如针对平面物体而进行的 RANSAC 或鲁棒单应性)

代码

说明

结果

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