【特征描述】ORB详解(附python实例代码)

特征描述 ORB

ORB 算法创建的特征向量只包含 1 和 0,称为二元特征向量。1 和 0 的顺序会根据特定关键点和其周围的像素区域而变化。该向量表示关键点周围的强度模式,因此多个特征向量可以用来识别更大的区域,甚至图像中的特定对象。
ORB 的特点是速度超快,而且在一定程度上不受噪点和图像变换的影响,例如旋转和缩放变换等。

ORB特征描述

ORB特征基于FAST角点的特征点检测与BRIEF特征描述技术。

与SIFT和SURF相比,速度快是ORB的最大优势。

在这里插入图片描述

ORB的基本思路

它是对FAST角点与BRIEF特征描述子的一种结合与改进。

FAST角点检测的缺点
  • 缺乏尺度不变性的;
  • 可以通过构建高斯金字塔,然后在每一层金字塔图像上检测角点,来实现尺度不变性;
BRIEF的缺点
  • 缺乏旋转不变性的;
  • 需要给BRIEF加上旋转不变性。

BRIEF

BRIEF需要先平滑图像,然后在特征点周围选择一个Patch,在这个Patch内通过一种选定的方法来挑选出来nd个点对。

比较点对中两点像素的大小,进行如下赋值

在这里插入图片描述
所有 nd 个点对,都进行比较之间,我们就生成了一个 nd 长的二进制串。

ORB对BRIEF的改进

ORB在计算BRIEF描述子时建立的坐标系是以关键点为圆心,以关键点和取点区域的形心(圆形)的连线为X轴建立坐标系。

计算形心时,圆形区域上每个点的"质量”是其对应的像素值。

在这里插入图片描述

完整代码如下

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img1 = cv.imread('H:/pictures/box.png',0)          # queryImage
img2 = cv.imread('H:/pictures/box_in_scene.png',0) # trainImage
# Initiate ORB detector
orb = cv.ORB_create()
# find the keypoints and descriptors with ORB
kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)

# create BFMatcher object
bf = cv.BFMatcher(cv.NORM_HAMMING, crossCheck=True)
# Match descriptors.
matches = bf.match(des1,des2)
# Sort them in the order of their distance.
matches = sorted(matches, key = lambda x:x.distance)
# Draw first 10 matches.
img3 = cv.drawMatches(img1,kp1,img2,kp2,matches[:20],None, flags=2)
plt.imshow(img3),plt.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫余

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值