前言
前面我们通过两章《C++ OpenCV特征提取之KAZE检测》《C++ OpenCV特征提取之AKAZE检测》介绍了KAZE和AKAZE的特征子描述,今天我们就来做一下KAZE和AKAZE的特征匹配,话不多说,直接开始。
代码演示
我们再新建一个项目名为opencv-kazedemo,按照配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法,下在的代码我们是直接用了前面两张介绍KAZE的描述子的代码直拷贝过来的,所以我这就直接贴过来了,我们一会儿会在这个代码的基础上进行修改匹配。
下面我们来整体改造一下:
因为要进行匹配,所以我们也要按FLANN的方式用到两张图,还是我们原来用FLAAN的那两张。
把原来的src改为了src1和src2了,加载了两张要对比的图。
KAZE
然后定义KAZE的匹配方法,把src1和src2找到的keypoints都存到descriptor里面。
再用Flann的方式进行匹配
画出匹配的关键点
到这里我们先运行一下看看效果
可以看出画上对应匹配的非常多,这样应该是不对的,所以我们还是要用到前面章节学到的,需要寻找最好的匹配。
我们写入再找到最好的匹配代码加进去,然后在drawmatch里面改为画上最好匹配的代码
然后重新显示一下效果
这次可以看到寻找最好的匹配后,不会像刚才那样感觉匹配的非常乱了。
AKAZE
接下来我们直接换一下AKAZE看看效果
我们把原来的KAZE直接改为AKAZE运行,结果发现报错。找了原因改了一下发现是FLANN的匹配就会报错,这样我们改为BFMATCH的匹配。
然后重新运行一下看看结果
对比了上面的KAZE的结果明显能看出来匹配的特征点要少了不少,而且相对的用时也要比KAZE的时间少了一些。