图像处理算法之ORB算法详解

发布:2022-10-19 14:17:48
阅读:2467
作者:网络整理
分享:复制链接

ORB的全称是Oriented FAST and Rotated Brief,通过图像特征能够快速识别图像。ORB算法在关键特征提取、算法成本、匹配性能方面,是SIFT、SURF算法的有效替代方案。

ORB了融合FASTBrief算法,FAST从提供的图像中检测特征;Brief快速找到的图像关键点,并将其转换为二进制特征向量。

ORB与SIFT、SURF

SIFT解决了匹配特征中的图像旋转、仿射变换、强度和视点变化等问题。

SIFT算法有4个基本步骤。

首先是使用高斯差(DoG)估计尺度空间极值。

其次,关键点定位,通过消除低对比度点来定位和细化候选关键点。

第三,基于局部图像梯度的关键点方向分配

第四,最后是描述符生成器,用于根据图像梯度大小和方向计算每个关键点的局部图像描述符。

SURF使用基于Hessian矩阵的BLOB检测器来查找关键点。对于方向分配,它通过应用适当的高斯权重在水平和垂直方向上使用小波响应。

对于特征描述,SURF也使用小波响应。选择关键点周围的邻域并将其划分为子区域,然后为每个子区域取小波响应并表示以获得SURF特征描述符。

基于原始图像和旋转图像的实验检测(同一图像)

我们发现,尽管图像内容一样,但SIFT算法和SURF算法在图像旋转时会获取到不同的关键点,匹配度较低。而ORB算法,在原始图像和旋转图像中获得相同的关键点数量,并且匹配100%。另外,ORB的执行速度比SIFT和SURF更快。

Python实现ORB算法思路

1、获取查询图像并将其转换为灰度。

2、现在初始化ORB检测器并检测查询图像和场景中的关键点。

3、计算属于两个图像的描述符。

4、使用蛮力匹配器匹配关键点。

5、显示匹配的图像。

Python代码实现ORB算法流程

import numpy as np
import cv2
query_img=cv2.imread('query.jpg')
train_img=cv2.imread('train.jpg')
query_img_bw=cv2.cvtColor(query_img,cv2.COLOR_BGR2GRAY)
train_img_bw=cv2.cvtColor(train_img,cv2.COLOR_BGR2GRAY)
orb=cv2.ORB_create()
queryKeypoints,queryDescriptors=orb.detectAndCompute(query_img_bw,None)
trainKeypoints,trainDescriptors=orb.detectAndCompute(train_img_bw,None)
matcher=cv2.BFMatcher()
matches=matcher.match(queryDescriptors,trainDescriptors)
final_img=cv2.drawMatches(query_img,queryKeypoints,
train_img,trainKeypoints,matches[:20],None)

final_img=cv2.resize(final_img,(1000,650))

cv2.imshow("Matches",final_img)
cv2.waitKey(3000)
扫码进群
微信群
免费体验AI服务