天天看点

特征提取算法与图像描述符[ORB]ORB特征算法

ORB特征算法

ORB算法综合了FAST角点检测算法和BRIEFF描述符。

FAST特征检测

  1. 算法原理
  2. opencv官方文档

FAST只是一种特征点检测算法,并不涉及特征点的特征描述。

fast = cv2.FastFeatureDetector_create(threshold=10)
           
img = cv2.imread("laugh.jpg", 0)
fast = cv2.FastFeatureDetector_create()
keypoints = fast.detect(img, None)
img = cv2.drawKeypoints(img, keypoints, None, (0, 0, 255))
           
特征提取算法与图像描述符[ORB]ORB特征算法

FAST - threshold100效果图

特征提取算法与图像描述符[ORB]ORB特征算法

FAST - 默认threshold(10)效果图

BRIEF特征描述符

  1. 论文
  2. opencv官方文档
  3. 中文版

Brief是Binary Robust Independent Elementary Features的缩写。这个特征描述子是由EPFL的Calonder在ECCV2010上提出的。主要思路就是在特征点附近随机选取若干点对,将这些点对的灰度值的大小,组合成一个二进制串,并将这个二进制串作为该特征点的特征描述子。文章同样提到,在此之前,需要选取合适的gaussian kernel对图像做平滑处理。

缺点

1:不具备旋转不变性。

2:对噪声敏感

3:不具备尺度不变性。

img = cv2.imread("laugh.jpg", 0)
# Initiate FAST detector
star = cv2.xfeatures2d.StarDetector_create()
# Initiate BRIEF extractor
brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
# find the keypoints with STAR
kp = star.detect(img, None)
# compute the descriptors with BRIEF
kp, des = brief.compute(img, kp)
print(brief.descriptorSize())
print(des.shape)

           

ORB

  1. ORB论文
  2. OpenCV官方文档

ORB采用了FAST作为特征点检测算子,特征点的主方向是通过矩(moment)计算而来解决了BRIEF不具备旋转不变性的问题。

ORB还做了这样的改进,不再使用pixel-pair,而是使用9×9的patch-pair,也就是说,对比patch的像素值之和,解决了BRIEF对噪声敏感的问题。

关于计算速度:

ORB是sift的100倍,是surf的10倍。

import cv2

img = cv2.imread("A.jpg", 0)
orb = cv2.ORB_create()
kp, des = orb.detectAndCompute(img, None)
           
特征提取算法与图像描述符[ORB]ORB特征算法

ORB效果

继续阅读