Fast和ORB算法
1.Fast算法
1.1 原理:取图像中的检测点,以该点为圆心的周围邻域内像素点判断检测点是否为角点;通俗理解为 :若一个像素周围有一定数量的像素与该点像素值不同,则认为其为角点
1.2 基本流程
缺点:
(1)获得的候选点比较多
(2)特征点的选取不是最优的,因为它的效果取决于要解决的问题和角点的分布情况
(3)进行非特征点判别时大量的点被丢弃
(4)检测到的很多特征点都是相邻的
1.3 实现
语法:
(1)fast=cv.FastFeatureDetector_create(threshold,nonmaxSupperession)
参数:
- threshold:阈值t,有默认值10
- nonmaxSupperession:是否进行非极大值抑制,默认值True
- fast:创建FastFeatureDetector对象
(2)利用fast.detect检测关键点,没有对应的关键点描述:kp=fast.detect(grayImg,None)
参数:
- grayImg:进行关键点检测的图像,注意是灰度图像
- kp:关键点信息,包括位置,尺度,方向信息
(3)将关键点检测结果绘制在图像上:cv.drawKeypoints(img,keypoints,outputimg,color,flags)
非极大值抑制:
设置极大值抑制:
2.ORB算法
2.1 实现:
语法:
(1)实例化ORB:orb=cv.orb_create(nfeatures)
nfeatures:特征点的最大数量
(2)利用orb.detectAndComputer()检测关键点并计算:kp,des=orb.detectAndComputer(gray,None)
参数:
- gray:进行关键点检测的图像,注意是灰度图像
- kp:关键点信息,包括位置,尺度,方向信息
- des:关键点描述符
(3)将关键点检测结果绘制在图像上:cv.drawKeypoints(img,keypoints,outputimg,color,flags)