当前位置: 首页 > article >正文

OpenCV:SURF、OBR特征检测

目录

简述

1. SURF

1.1 什么是 SURF?

1.2 SURF 在 OpenCV 中的实现

1.2.1 OpenCV SURF API

1.2.2 API 参数说明

1.3 使用 SURF 进行特征检测

2. ORB(高效特征检测)

2.1 什么是 ORB?

2.2 ORB 在 OpenCV 中的实现

2.2.1 OpenCV ORB API

2.2.2 API 参数说明

2.3 使用 ORB 进行特征检测

3. ORB 与 SURF 的对比

4. 适用场景总结

5. 总结


简述

在计算机视觉中,特征检测是图像匹配、目标识别、物体跟踪等任务的核心技术。SIFT(Scale-Invariant Feature Transform) 是一种经典的特征检测算法,但由于计算速度较慢,出现了更快的替代方案 SURF(Speeded-Up Robust Features) 和 ORB(Oriented FAST and Rotated BRIEF)。

本文将详细介绍 SURF 和 ORB 的核心原理,并结合 OpenCV 代码示例展示如何在实际应用中使用它们。


1. SURF

1.1 什么是 SURF?

SURF 是 SIFT 的加速版本,由 Bay et al. 在 2006 年提出。它在保持 SIFT 鲁棒性的同时,大幅提高了计算效率,主要通过以下方式实现优化:

  • 使用积分图加速卷积计算,提高检测速度。
  • 使用Hessian矩阵 进行关键点检测,而不是 SIFT 的 DOG(高斯差分)。
  • 使用64维特征描述子(比 SIFT 的 128 维更短),加快计算速度。

1.2 SURF 在 OpenCV 中的实现

1.2.1 OpenCV SURF API

注意:SURF 受专利保护,仅 OpenCV 3.x 提供,在 OpenCV 4.x 版本中已移除。

cv2.xfeatures2d.SURF_create(hessianThreshold=100, nOctaves=4, nOctaveLayers=3, extended=False, upright=False)
1.2.2 API 参数说明
参数说明
hessianThreshold设定 Hessian 矩阵的阈值,越大检测到的特征点越少,但更稳定。
nOctaves金字塔尺度层数,值越大能检测更多的特征点,但计算更慢。
nOctaveLayers每层的图像层数,影响特征点检测的精度。
extendedFalse 生成 64 维特征描述子,True 生成 128 维特征描述子。
uprightFalse 计算旋转不变性,True 不计算方向,计算速度更快但旋转不变性较差。

1.3 使用 SURF 进行特征检测

 代码示例:

import cv2
import numpy as np

# 读取图像
image = cv2.imread('D:\\resource\\filter\\shudu.jpg')

# 转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 创建 SURF 对象
surf = cv2.xfeatures2d.SURF_create()

# 检测关键点并计算描述符
keypoints, descriptors = surf.detectAndCompute(gray, None)

# 在图像上绘制关键点
img_with_keypoints = cv2.drawKeypoints(gray, keypoints, None, (0, 255, 0), 4)

# 显示结果
cv2.imshow('SURF', img_with_keypoints)
cv2.waitKey(0)
cv2.destroyAllWindows()

⚠️由于当前使用的是OpenCV4.x版本,该接口已被移除,无法使用,需要编译源码或安装低版本的OpenCV3.x。


2. ORB(高效特征检测)

2.1 什么是 ORB?

ORB(Oriented FAST and Rotated BRIEF) 由 Ethan Rublee 在 2011 年提出,是 SIFT 和 SURF 的免费替代方案,适用于实时应用和嵌入式设备。ORB 主要特点:

  • 免费开源,适用于所有商业应用(SIFT 和 SURF 受专利保护)。
  • 结合 FAST(特征检测)+ BRIEF(特征描述),实现高效计算。
  • Harris 角点响应 进行排序,选择最优关键点。
  • 旋转不变性 通过主方向计算 BRIEF 描述子。

2.2 ORB 在 OpenCV 中的实现

2.2.1 OpenCV ORB API
cv2.ORB_create(nfeatures=500, scaleFactor=1.2, nlevels=8, edgeThreshold=31, patchSize=31)
2.2.2 API 参数说明
参数说明
nfeatures设定检测的最大特征点数,默认 500
scaleFactor图像金字塔缩放因子,默认 1.2(金字塔每层缩小 20%)。
nlevels金字塔层数,默认 8(金字塔越深,检测更多尺度的特征点)。
edgeThreshold特征点检测的边界阈值,默认 31
patchSize计算特征点描述子时的邻域大小,默认 31

2.3 使用 ORB 进行特征检测

import cv2
import numpy as np

# 读取图像并转换为灰度图
image = cv2.imread('D:\\resource\\filter\\shudu.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 创建 ORB 检测器
orb = cv2.ORB_create(nfeatures=500)

# 检测关键点并计算描述子
keypoints, descriptors = orb.detectAndCompute(gray, None)

# 绘制关键点
image_keypoints = cv2.drawKeypoints(image, keypoints, None, (0, 255, 0))

# 显示结果
cv2.imshow('ORB', image_keypoints)
cv2.waitKey(0)
cv2.destroyAllWindows()

🔷运行结果:

🔷结果解析:

  • 关键点以绿色圆圈标记,表示 ORB 检测到的特征点。
  • ORB 计算速度比 SURF 更快,适用于移动端和实时应用。

3. ORB 与 SURF 的对比

特征SURFORB
专利受专利保护(商业使用需授权)免费开源(适用于所有场景)
特征描述子64 维(可扩展到 128 维)32 维(计算更快)
计算速度比 SIFT 快,但仍较慢最快,适用于实时应用
旋转不变性
尺度不变性
适用场景物体识别、目标跟踪移动设备、实时 SLAM

4. 适用场景总结

应用场景适用方法
目标检测SURF / ORB
实时跟踪ORB(速度快)
图像拼接SURF(匹配准确)
特征匹配ORB(适合大规模匹配)
嵌入式设备ORB(计算量小)

5. 总结

  • SURF 是 SIFT 的加速版,计算更快,适用于高精度匹配任务,但受专利保护。
  • ORB 是 SIFT/SURF 的免费替代方案,计算速度快,适用于 实时应用、移动设备。
  • 如果需要高精度匹配,使用 SURF;如果 计算速度要求高,使用 ORB。

继续学习中,后续补充特征匹配相关的知识。


http://www.kler.cn/a/529008.html

相关文章:

  • 汽车中控屏HMI界面,安全和便捷是设计的两大准则。
  • 【Java异步编程】CompletableFuture综合实战:泡茶喝水与复杂的异步调用
  • 计算机组成原理——存储系统(一)
  • 2025:影刀RPA使用新实践--CSDN博客下载
  • UE学习日志#18 C++笔记#4 基础复习4 指派初始化器和指针
  • SpringBoot 日志
  • IS-IS 数据包类型 | 实验
  • TCL C++开发面试题及参考答案
  • Docker容器数据恢复
  • 【实战篇章】深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据
  • Autogen_core源码:_cache_store.py
  • C# 类与对象详解
  • 1.4第1章DC/DC变换器的动态建模-1.4状态空间平均法--电力电子系统建模及控制 (徐德鸿)--读书笔记
  • [NOIP1997 普及组] 棋盘问题
  • 一、TensorFlow的建模流程
  • 受限玻尔兹曼机:原理、实现、与神经网络对比及应用
  • 从理论到实践:Linux 进程替换与 exec 系列函数
  • 29.Word:公司本财年的年度报告【13】
  • 嵌入式C语言:大小端详解
  • 2.1.3 相机图像信号处理的基本流程
  • Python3 【闭包】避坑指南:常见错误解析
  • 17.3.3 ImageAttributes类
  • 蓝桥杯嵌入式赛道备考1 —— 基础GPIO实战
  • Python NumPy(11):NumPy 排序、条件筛选函数
  • No.8十六届蓝桥杯备战|C++输入输出|printf|scanf(C++)
  • 一、html笔记