今天要整理记录的是OpenCV中BRISK特征提取描述算法的运用。
BRISK特征提取描述算法全称为 Binary Robust Invariant Scalable Keypoints(二进制鲁棒不变可扩展关键点)。BRISK算法也是SIFT算法的一种改进型,主要是针对于旋转不变性、鲁棒性、运算速度等方面做了优化,其大致流程如下:
(1)在提取特征点阶段与SIFT算法类似(可参阅《OpenCV4学习笔记(38)》,同样是先构造多尺度图像金字塔,再从每一层图像组的多尺度空间中找到最大特征点(非极大值抑制);
(2)再通过亚像素插值得到最大特征点的精确坐标位置,也即把最大特征点从其它层的坐标映射到金字塔最底层的坐标位置,从而完成对最大特征点的定位。
(3)在描述特征点阶段,使用特征点邻域同心圆采样法,在每个特征点的邻域中选择一个同心圆,在这个同心圆上均匀采样,并对所有采样点进行高斯模糊以消除重复采样带来的影响,并以采样点中的短距离点对的灰度值比较结果,来构建二进制描述子(类似BRIEF特征二进制描述算法,可参阅《OpenCV4学习笔记(39)》)。
(4)再以每个特征点的方向特征、也就是梯度来进行方向归一化,强化了BRISK特征描述子的旋转不变性。
通过上述步骤即可得到BRISK特征的二进制描述子,总的来说BRISK特征算法是一种效果比较好的特征算法,主要优点在于它的检测速度,相比SIFT等特征算法而言要明显更快,可以用于实时处理中。
在OpenCV中同样封装好了BRISK算法的特征检测器,下面是调用BRISK算法的代码演示:
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.jpg");
resize(tem_image, tem_image, Size(160,120));
resize(dected_image, dected_image, Size(