OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
AKAZE 局部特征匹配

上一个教程: 平面物体检测
下一个教程: AKAZE 和 ORB 平面跟踪

原始作者Fedor Morozov
兼容性OpenCV >= 3.0

介绍

在本教程中,我们将学习如何使用 AKAZE [11] 局部特征来检测和匹配两幅图像上的关键点。我们将在给定单应矩阵的两幅图像上查找关键点,进行匹配,并计算内点(即符合给定单应性的匹配)的数量。

你可以在这里找到此示例的扩展版本: https://github.com/pablofdezalc/test_kaze_akaze_opencv

数据

我们将使用 牛津数据集Graffiti 序列的图像 1 和 3。

单应性由一个 3x3 矩阵给出

7.6285898e-01 -2.9922929e-01 2.2567123e+02
3.3443473e-01 1.0143901e+00 -7.6999973e+01
3.4663091e-04 -1.4364524e-05 1.0000000e+00

你可以在 opencv/samples/data/ 中找到图像 (graf1.png, graf3.png) 和单应性矩阵 (H1to3p.xml)。

源代码

解释

  • 加载图像和单应性矩阵

我们在这里加载灰度图像。单应性矩阵存储在用 FileStorage 创建的 xml 文件中。

  • 使用 AKAZE 检测关键点并计算描述符

我们创建 AKAZE 并检测和计算 AKAZE 关键点和描述符。由于我们不需要 mask 参数,因此使用了 noArray()

  • 使用暴力匹配器查找 2-nn 匹配

我们使用汉明距离,因为 AKAZE 默认使用二进制描述符。

  • 使用 2-nn 匹配和比率准则查找正确的关键点匹配

如果最近的匹配距离显著低于次近的匹配距离,则该匹配是正确的(匹配不含糊)。

  • 检查我们的匹配是否符合单应性模型

如果第一个关键点的投影到第二个关键点的距离小于阈值,则它符合单应性模型。

我们为内点创建了一组新的匹配,因为绘图函数需要它。

  • 输出结果

在这里,我们保存结果图像并打印一些统计数据。

结果

找到的匹配

根据你的 OpenCV 版本,你应该获得与以下结果一致的结果

关键点 1: 2943
关键点 2: 3511
匹配数: 447
内点数: 308
内点比率: 0.689038