【笔记】OpenCv-ORB

ORB

1,介绍

ORB(Oriented FAST and Rotated BRIEF)是一种计算机视觉领域中用于检测和描述图像局部特征的算法。它结合了FAST关键点检测、BRIEF特征描述以及一些额外的步骤,以提供具有尺度和旋转不变性的特征。

以下是ORB算法的一些主要特点和步骤:

  1. FAST关键点检测: ORB首先使用FAST(Features from Accelerated Segment Test)算法来检测图像中的关键点。FAST是一种高效的角点检测算法,通过对图像中的像素进行快速的强度测试来识别可能的关键点。

  2. BRIEF特征描述: 对于每个检测到的关键点,ORB使用BRIEF算法进行特征描述。BRIEF生成二进制描述符,通过比较关键点周围的像素对的亮度来确定二进制码。这使得BRIEF在计算上非常高效。

  3. 旋转不变性: 为了提供旋转不变性,ORB在关键点周围计算了一个方向,并将关键点的描述符旋转到一个统一的方向。这使得ORB能够在检测到的关键点的不同旋转姿态之间进行匹配。

  4. 尺度不变性: ORB使用图像金字塔来检测关键点的多个尺度,从而提供尺度不变性。

  5. 快速匹配: 由于使用二进制描述符,ORB在进行特征匹配时非常高效。通常采用汉明距离等方法来衡量两个特征的相似度。

  6. 兼顾性能和精度: ORB的设计目标是在提供良好的性能的同时,保持足够的特征精度,使其适用于实时应用。

  7. OpenCV实现: 在OpenCV中,ORB算法被实现在cv2.ORB_create()函数中,并可以通过调整参数来满足不同应用场景的需求。

相对于SIFT和SURF等算法,ORB是一个无专利限制的算法,因此在许多实际应用中更受欢迎。然而,具体选择算法还取决于任务的需求和计算资源的限制。

2,实现

import cv2
import numpy as np

# 读取图像
img1 = cv2.imread('image1.jpg', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('image2.jpg', cv2.IMREAD_GRAYSCALE)

# 创建ORB对象
orb = cv2.ORB_create()

# 使用ORB对象检测关键点并计算描述符
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)

# 使用BFMatcher进行特征匹配
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1, des2)

# 将匹配结果按距离排序
matches = sorted(matches, key=lambda x: x.distance)

# 绘制前10个匹配结果
img_matches = cv2.drawMatches(img1, kp1, img2, kp2, matches[:10], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)

# 显示匹配结果
cv2.imshow('ORB Matches', img_matches)
cv2.waitKey(0)
cv2.destroyAllWindows()

3,效果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值