欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ORB特征检测

程序员文章站 2022-03-13 22:05:56
...

ORB概述

  • ORBOriented FAST and Rotated BRIEF是一种快速特征点提取和描述的算法。
  • 这个算法是由Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Gary R.Bradski2011年一篇名为“ORBAn Efficient  Alternative to SIFT or SURF”的文章中提出。
  • ORB算法分为两部分,分别是特征点提取和特征点描述。特征提取是由FASTFeatures from  Accelerated Segment Test)算法发展来的,特征点描述是根据BRIEFBinary Robust Independent Elementary Features)特征描述算法改进的。
  • ORB = oFast + rBRIEF。据称ORB算法的速度是sift100倍,是surf10
  • ORB算子在SLAM及无人机视觉等领域得到广泛应用。

oFAST特征提取

  ORB算法的特征提取是由FAST算法改进的,这里称为oFASTFAST keypoint Orientation),在使用FAST提取出特征点之后, 给其定义一个特征点方向,以此来实现特征点的旋转不变性。

oFAST实现步骤:

  1. 粗提取
  2. 筛选最优特征点
  3. 使用非极大值抑制算法去除临近位置多个特征点
  4. 建立金字塔以实现特征点多尺度不变性

 rBRIEF特征描述

ORB算法的特征描述是由BRIEF算法改进的,这里称为rBRIEFRotation-Aware Brief)。也就是说,BRIEF特征描述的基础上加入旋转因子从而改进BRIEF算法。

算法描述:

BRIEF算法计算出来的是一个二进制串的特征描述符。它是在一个特征点的邻域内,选择n对像素点piqii=1,2,…,n)

比较每个点对的灰度值的大小,如果I(pi)> I(qi),则生成二进制串中的1,否则为0

所有的点对都进行比较,则生成长度为n的二进制串。一般n128256512opencv默认为256

rBRIEF实现步骤:

  1.  以关键点P为圆心,以d为半径做圆O。
  2.  在圆O内某一模式选取N个点对。这里为方便说明,N=4,实际应用中N可以取512。
  3.  定义操作T。
  4.  分别对已选取的点对进行T操作,将得到的结果进行组合。

Python实现:

import cv2 as cv
import numpy as np

# 读入左右反向图片
imgL = cv.imread("left03.jpg")
imgR = cv.imread("right03.jpg")
# 灰度图转换
grayL = cv.cvtColor(imgL, cv.COLOR_BGR2GRAY)
grayR = cv.cvtColor(imgR, cv.COLOR_BGR2GRAY)
# 创建orb算子以及提取描述子
orb = cv.ORB_create()
kpL, dstL = orb.detectAndCompute(grayL, None)
kpR, dstR = orb.detectAndCompute(grayR, None)
# 创建FBMatcher类对象,并且进行匹配
BF = cv.BFMatcher(cv.NORM_L2)
matches = BF.match(dstL, dstR)
# 显示orb匹配结果
img1 = cv.drawMatches(imgL, kpL, imgR, kpR, matches, None, flags=2)
cv.imshow("ORB", img1)
#--------------------------------------#
# 初始化Bruteforce匹配器
bf = cv.BFMatcher()
# 通过KNN匹配两张图片的描述子
matches = bf.knnMatch(dstL, dstR, k=2)
# 筛选比较好的匹配点
good = []
for i, (m, n) in enumerate(matches):
    if m.distance < 0.85 * n.distance:
        good.append(m)
# 画出匹配点
img2 = cv.drawMatches(imgL, kpL, imgR, kpR, good, None, flags=2)
cv.imshow("ORB-BF", img2)

cv.waitKey(0)
cv.destroyAllWindows()

效果显示:

ORB特征检测
 ORB特征检测

 

相关标签: ORB Python