ORB特征检测有直接的API,可以直接调用
ORB原理:分三部
一、提取特征点:ORB特征点其实就是边界,灰度变化较大的地方,因为ORB特征点的定义就是与周围点不一样的点,与转换成LBP图谱类似,以某点为圆心,选择合适的点数作为比较值,在总数目范围内规定一个阈值,不一样的点数超过这个阈值,即为特征点。
二、获取特征点描述:ORB特征点描述与LBP特征图谱类似,都是以二进制表示,选点方式也是一样,圆形,只是取值方式不同,LBP是以圆心为阈值,ORB是横纵坐标比较,比如横坐标比纵坐标大即为1
三、特征点匹配
特征点匹配是建立在多幅图的基础上,比较互相之间的特征点描述,匹配的目的是对特征点进行筛选,选出符合要求的特征点
简单的实现代码如下:
import numpy as np
import cv2
path = 'test.jpg'
image1 = cv2.imread(path,0)
image2 = cv2.imread('timg.jpg',0)
#创建检测器
detector = cv2.ORB_create()
#提取特征点和对特征点进行描述
key_point1,des1 = detector.detectAndCompute(image1,None)
key_point2,des2 = detector.detectAndCompute(image2,None)
#创建匹配器
mather = cv2.BFMatcher(cv2.NORM_HAMMING)
#进行匹配
match = mather.match(des1,des2)
image3 = cv2.drawMatches(image1,key_point1,image2,key_point2,match[:30],image2,flags=2)
cv2.imshow('test',image3)
cv2.imwrite('orb.jpg',image3)
cv2.waitKey(0)