OpenCV(24)角点检测3 -- ORB

目录

一、基础理论

1、原理

 2、BRIEF算法介绍

1、介绍

2、过程

3、API介绍

 1、ORB_create函数(初始化orb检测器)

2、orb.detectAndCompute函数(检测关键点并计算)

3、cv.drawKeypoints函数(绘制关键点)

二、代码

三、效果


一、基础理论

1、原理

        ORB算法结合了FastBrief算法,提出了构造金字塔为Fast特征点添加了方向,从而使得关键点具有了尺度不变性旋转不变性。具体流程描述如下:

构造尺度金字塔,金字塔共有n层,与SIFT不同的是,每一层仅有一幅图像。第s层的尺度为:

 

 (每层图像大小和尺度有关)

1、在不同的尺度上利用Fast算法检测特征点,采用Harris角点响应函数根据角点的响应值排序选取前N个特征点,作为本尺度的特征点
2、计算特征点的主方向,计算以特征点为圆心半径为r的圆形邻域内的灰度质心位置,将从特征点位置质心位置方向特征点的主方向。      

计算方法:  

质心位置:

主方向: 

 2、BRIEF算法介绍

1、介绍

        BRIEF是一种特征描述子提取算法并非特征点的提取算法一种生成二值化描述子的算法,不提取代价低,匹配只需要使用简单的汉明距离(Hamming Distance)利用比特之间的异或操作就可以完成。因此,时间代价低,空间代价低,效果还挺好是最大的优点

2、过程

1、图像滤波︰原始图像中存在噪声时,会对结果产生影响,所以需要对图像进行滤波,去除部分噪声
2、选取点对以特征点为中心取S*S的邻域窗口在窗口内随机选取N组点对, 一般N=128,256,512,默认是256,关于如何选取随机点对,提供了五种形式,结果如下所示:

 

 

 

3、API介绍

 1、ORB_create函数(初始化orb检测器)

cv2.ORB_create(nfeatures = 500,
             scaleFactor = 1.2,
             nlevels = 8,
             edgeThreshold = 31,
             firstLevel = 0,
             WTA_K = 2,
             scoreType = HARRIS_SCORE,
             patchSize = 31,
             fastThreshold = 20)

参数:

nfeatures:特征点最大数量

返回:

orb对象

orb = cv.ORB_create()

2、orb.detectAndCompute函数(检测关键点并计算)

kp , des= orb.detectAndCompute(img, None)

参数:
img:进行关键点检测的图像

返回:
kp关键点信息,包括位置,尺度,方向信息
des:关键点描述符,每个关键点BRIEF特征向量,二进制字符串

kp , des= orb.detectAndCompute(img, None)       #返回关键点信息及描述符

3、cv.drawKeypoints函数(绘制关键点)

cv.drawKeypoints (image,keypoints,outputimage, color,flags)
img = cv.drawKeypoints(img, kp, None, color=(0,255,0), flags=0)

二、代码

# ORB角点检测
import cv2 as cv

img = cv.imread('Resource/1.jpg')
cv.imshow("img", img)

# 1、初始化ORB检测器
orb = cv.ORB_create(200)
# 2、用ORB寻找关键点
kp , des= orb.detectAndCompute(img, None)       #返回关键点信息及描述符
# 3、仅绘制关键点的位置,而不绘制大小和方向
dst = cv.drawKeypoints(img, kp, None, color=(0,255,0), flags=0)

cv.imshow("dst", dst)

cv.waitKey(0)

三、效果

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_(*^▽^*)_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值