OpenCV 4.11.0
开源计算机视觉库
加载中…
搜索中…
未找到匹配项
AKAZE 局部特征匹配

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

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

引言

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

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

数据

我们将使用 Oxford 数据集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