ORB (Oriented FAST and Rotated BRIEF)
ORB基本上是FAST关键点检测器和Brief描述符的融合,并进行了许多修改以增强性能。首先,它使用FAST查找关键点,然后应用哈里斯角点度量在其中找到前N个点。它还使用金字塔生成多尺度特征。但是一个问题是,FAST无法计算方向。那么旋转不变性呢?作者提出以下修改。
它计算角点位于中心的贴片的强度加权质心。从此角点到质心的矢量方向确定了方向。为了改善旋转不变性,使用x和y计算矩,它们应该在半径为的圆形区域中,其中补丁的大小。
现在,对于描述符,ORB使用Brief描述符。但是我们已经看到,BRIEF的旋转性能很差。因此,ORB所做的就是根据关键点的方向“引导” BRIEF。对于位置的任何二进制测试 功能集,请定义一个矩阵,其中包含这些像素的坐标。然后使用补丁的方向,找到其旋转矩阵并旋转以获得转向(旋转)版本。
import numpy as np import cv2 from matplotlib import pyplot as plt img = cv2.imread('molecule.png',0) # Initiate STAR detector orb = cv2.ORB_create() # find the keypoints with ORB kp = orb.detect(img,None) # compute the descriptors with ORB kp, des = orb.compute(img, kp) # draw only keypoints location,not size and orientation img2 = cv2.drawKeypoints(img,kp,color=(0,255,0), flags=0,outImage=None) cv2.imwrite('sift_keypoints.jpg',img) plt.imshow(img2),plt.show()
原图