ORB算法

介绍

ORB 是 Oriented Fast and Rotated Brief 的简称,可以用来对图像中的关键点快速创建特征向量,这些特征向量可以用来识别图像中的对象。
其中,Fast 和 Brief 分别是特征检测算法和向量创建算法。ORB 首先会从图像中查找特殊区域,称为关键点。关键点即图像中突出的小区域,比如角点,比如它们具有像素值急剧的从浅色变为深色的特征。然后 ORB 会为每个关键点计算相应的特征向量。ORB 算法创建的特征向量只包含 1 和 0,称为二元特征向量。1 和 0 的顺序会根据特定关键点和其周围的像素区域而变化。该向量表示关键点周围的强度模式,因此多个特征向量可以用来识别更大的区域,甚至图像中的特定对象。
ORB 的特点是速度超快,而且在一定程度上不受噪点和图像变换的影响,例如旋转和缩放变换等。

原理

step1 建立图像金字塔,FAST算法寻找特征点

给定一个图像 ORB 算法首先开始构建图像金字塔。

图像金字塔是单个图像的多尺度表示法,由一系列原始图像的不同分辨率版本组成。金字塔的每个级别都由上个级别的图像下采样版本组成。下采样是指图像分辨率被降低,比如图像按照 1/2 比例下采样。因此一开始的 4x4 正方形区域现在变成 2x2 正方形。图像的下采样包含更少的像素,并且以 1/2 的比例降低大小。如下图所示。
在这里插入图片描述
ORB 创建好图像金字塔后,它会使用 FAST 算法从每个级别不同大小的图像中快速找到关键点。
通过确定每个级别的关键点 ORB 能够有效发现不同尺寸的对象的关键点,这样的话 ORB 实现了部分缩放不变性。
在这里插入图片描述

step2 给关键点分配方向

为ORB 获得了与这个图像金字塔每个级别相关的关键点。在发现金字塔所有级别中的关键点后,ORB 现在为每个关键点分配一个方向,例如朝左或朝右,取决于该关键点周围的强度是如何变化的。
在这里插入图片描述
方法是首先计算以该关键点为中心的方框中的强度形心。强度形心可以看做给定 patch 中的平均像素强度的位置。计算强度形心后,通过画一条从关键点到强度形心的向量,获得该关键点的方向,如上图所示。这个关键点的方向是向下并朝左,因为这个区域的亮度朝着这个方向增强。

step3 BRIEF创建描述子

通过BRIEF 算法创建特征向量,得到特征描述符。

参考博客:https://www.cnblogs.com/alexme/p/11345701.html

代码实战

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt

img = cv.imread("G://data1//image01.jpg")

"""
 ORB角点检测
 实例化ORB对象
"""

orb = cv.ORB_create(nfeatures=500)
"""检测关键点,计算特征描述符"""
kp, des = orb.detectAndCompute(img,None)

print (des.shape)
# 将关键点绘制在图像上
img2 = cv.drawKeypoints(img,kp,None,color=(0,0,255),flags=0)

# 画图
plt.figure(figsize=(10,8),dpi = 100)
plt.imshow(img2[:,:,::-1])
plt.xticks([]),plt.yticks([])
plt.show()

在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值