ORB,全称Oriented FAST and Rotated BRIEF,是一种快速特征点提取和描述的算法。计算速度比SIFT快百倍,比SUFT快10倍。
从名称中可以看出,ORB本质是FAST角点检测算法和BRIEF特征描述符的集合。为什么要这样子呢?因为FAST特征点检测不涉及特征点描述,而BRIEF特征描述符有不具备旋转不变性、不具备尺度不变性、对噪声敏感等缺点,将二者结合可以优势互补,劣势相消。
# FAST特征点检测
import cv2 as cv
img = cv.imread('gyy.jpg',0)
# 用默认值初始化FAST对象
fast = cv.FastFeatureDetector_create()
# 寻找并绘制关键点
keyPoint = fast.detect(img,None)
img2 = cv.drawKeypoints(img, keyPoint, None, color=(255,0,0))
cv.imshow('dst',img2)
if cv.waitKey(0) & 0xff == 27:
cv.destroyAllWindows()
# BRIEF特征描述符
import cv2 as cv
img = cv.imread('simple.jpg',0)
# 初始化FAST检测器
fast = cv.xfeatures2d.StarDetector_create()
# 初始化BRIEF提取器
brief = cv.xfeatures2d.BriefDescriptorExtractor_create()
# 找到STAR的关键点
keyPoint = fast.detect(img,None)
# 计算BRIEF的描述符
keyPoint, describe = brief.compute(img, keyPoint)
print( brief.descriptorSize() )
print( describe.shape )
# 以上只是展示opencv中FAST与BRIEF的使用,以下才是ORB算法展示:
import cv2 as cv
img = cv.imread("A.jpg", 0)
orb = cv.ORB_create()
keyPoint, describe = orb.detectAndCompute(img, None)