OpenCV4学习笔记(46)——特征提取与描述之AKAZE特征提取描述算法

在之前的笔记《OpenCV4学习笔记(38)》中,整理记录了我本人对于经典特征算法——SIFT算法一些流程的理解,而今天要整理的是SIFT算法的其中一种改进算法,也即AKAZE特征算法。

AKAZE特征算法是SIFT特征算法的一种改进版本,但不使用高斯模糊来构建尺度空间,因为高斯模糊具有丢失边缘信息的缺点,进而采用非线性扩散滤波来构建尺度空间,从而保留图像更多的边缘特征。

在特征点提取阶段,AKAZE算法采用与SIFT算法类似的提取特征点方式,即在同一金字塔层内的不同尺度的一组图像中寻找最大特征点。

然后在特征描述子生成阶段,采用与ORB特征算法类似的方法生成描述子(可参阅《OpenCV4学习笔记(40)》),但ORB算法中采用LDB特征描述算法来生成特征描述子,而AKAZE采用 M-LDB特征描述算法来生成描述子,使得最终得到的特征具有旋转不变性。M-LDB特征描述算法是基于LDB特征描述算法并针对图像的旋转和缩放进行改进,相比LDB具有旋转不变性和尺度不变性,进一步提高了特征的鲁棒性。

通过AKAZE特征算法得到的描述子具有旋转不变性、尺度不变性、光照不变性、空间不变性等,而且其鲁棒性、特征独特性和特征精度相比起ORB、SIFT算法提取出的特征要更好。

AKAZE算法作为KAZE算法的性能提升版本,利用Fast Explicit Diffusion(FED)来构建尺度空间。因为盒子滤波可以很好地近似高斯核,并且能够提升速度、易于实现,所以其主要思想是循环执行M次的盒子滤波,每次循环都有N个步长的显式扩散,每一步的步长是非线性的、也即是不断变化的,初始步长起源于盒子滤波的因式分解。

虽然其速度有了一定的提升,但是仍然不足以胜任实时处理的需求。

在OpenCV中已经实现并封装好了AKAZE算法的特征检测器,我们只需要使用auto akaze = AKAZE::create()就可以直接创建一个AKAZE特征检测器了,然后就可以对图像进行特征提取、描述子生成等操作。下面看一下演示代码:

	Mat tem_image = imread("D:\\opencv_c++\\opencv_tutorial\\data\\images\\tem.jpg");
	Mat dected_image = imread("D:\\opencv_c++\\opencv_tutorial\\data\\images\\miao.jpeg");
	resize(tem_image, tem_image, Size(160,120));
	resize(dected_image, dected_image, Size(600, 800));

	auto akaze = AKAZE::create();
	vector<KeyPoint> keyPoints_tem, keyPoints_dected;
	Mat descriptors_tem, descriptors_dected;
	akaze->detectAndCompute(t
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值