目录
一、基础理论
1、原理
2、BRIEF算法介绍
1、介绍
2、过程
3、API介绍
1、ORB_create函数(初始化orb检测器)
2、orb.detectAndCompute函数(检测关键点并计算)
3、cv.drawKeypoints函数(绘制关键点)
二、代码
三、效果
ORB算法结合了Fast和Brief算法,提出了构造金字塔,为Fast特征点添加了方向,从而使得关键点具有了尺度不变性和旋转不变性。具体流程描述如下:
1、在不同的尺度上利用Fast算法检测特征点,采用Harris角点响应函数,根据角点的响应值排序,选取前N个特征点,作为本尺度的特征点。
2、计算特征点的主方向,计算以特征点为圆心,半径为r的圆形邻域内的灰度质心位置,将从特征点位置到质心位置的方向做特征点的主方向。
BRIEF是一种特征描述子提取算法,并非特征点的提取算法,一种生成二值化描述子的算法,不提取代价低,匹配只需要使用简单的汉明距离(Hamming Distance)利用比特之间的异或操作就可以完成。因此,时间代价低,空间代价低,效果还挺好是最大的优点。
1、图像滤波︰原始图像中存在噪声时,会对结果产生影响,所以需要对图像进行滤波,去除部分噪声。
2、选取点对:以特征点为中心,取S*S的邻域窗口,在窗口内随机选取N组点对, 一般N=128,256,512,默认是256,关于如何选取随机点对,提供了五种形式,结果如下所示:
cv2.ORB_create(nfeatures = 500,
scaleFactor = 1.2,
nlevels = 8,
edgeThreshold = 31,
firstLevel = 0,
WTA_K = 2,
scoreType = HARRIS_SCORE,
patchSize = 31,
fastThreshold = 20)
参数:
nfeatures:特征点最大数量
返回:
orb对象
orb = cv.ORB_create()
kp , des= orb.detectAndCompute(img, None)
参数:
img:进行关键点检测的图像返回:
kp:关键点信息,包括位置,尺度,方向信息
des:关键点描述符,每个关键点BRIEF特征向量,二进制字符串kp , des= orb.detectAndCompute(img, None) #返回关键点信息及描述符
cv.drawKeypoints (image,keypoints,outputimage, color,flags)
img = cv.drawKeypoints(img, kp, None, color=(0,255,0), flags=0)
# ORB角点检测
import cv2 as cv
img = cv.imread('Resource/1.jpg')
cv.imshow("img", img)
# 1、初始化ORB检测器
orb = cv.ORB_create(200)
# 2、用ORB寻找关键点
kp , des= orb.detectAndCompute(img, None) #返回关键点信息及描述符
# 3、仅绘制关键点的位置,而不绘制大小和方向
dst = cv.drawKeypoints(img, kp, None, color=(0,255,0), flags=0)
cv.imshow("dst", dst)
cv.waitKey(0)