cv2 ORB

本篇博客主要介绍cv2中ORB模块。ORB是FAST关键点检测和BRIEF关键点描述器的结合体,并做了很多修改增强了性能。首先他使用FAST找到关键点,然后在使用Harris关键点检测对这些关键点做排序找到前N个点,他也是用金字塔从而产生尺度不变性特征。

对于描述符,ORB使用BRIEF描述符,但是BRIEF在旋转方面表现不佳,因此ORB所做的是根据关键点的方向来做引导,对于在未知(xi,yi)的n个二进制测试的任何特性集,定义一个包含这些像素租表的2 n矩阵,然后利用补丁的方向,找到旋转矩阵并旋转S,以得到引导(旋转)版本。

ORB将角度进行离散化,以增加2/30(12度),并构建一个预先计算过的简短模式的查找表,只要关键点的方向是一致的,就会使用正确的点集来计算它的描述符。

BRIEF有一个重要的属性,即每个比特的特性都有很大的方差,数据的方差大的一个好处是使得特征更容易分辨,而平均值接近于0.5,。但是一旦它沿着关键点的方向移动,它就会失去这个属性并变得更加分散。

示例代码:

import numpy as np
import cv2
import matplotlib.pyplot as plt

img = cv2.imread('../data/blox.jpg', 0)

# Initiate ORB detector
orb = cv2.ORB_create()
# find the keypoints with ORB
kp = orb.detect(img, None)
# compute the dscriptors with ORB
kp, des = orb.compute(img, kp)

# draw only keypoints location, not size and orientation
img2 = cv2.drawKeypoints(img, kp, None, color=(0, 255, 0), flags=0)

plt.imshow(img2), plt.show()

原图:

最终结果:

猜你喜欢

转载自blog.csdn.net/github_39611196/article/details/81160007
ORB