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

ORB特征点检测算法

角点是图像中灰度变化在两个方向上都比较剧烈的点。与边缘(只有一个方向变化剧烈)或平坦区域(灰度变化很小)不同,角点具有方向性和稳定性。

tips:像素梯度计算
在这里插入图片描述
在这里插入图片描述

ORB算法流程简述

1.关键点检测(使用FAST)
使用 FAST(Features from Accelerated Segment Test)算法快速检测图像中的角点作为关键点。

2.关键点筛选(Harris评分)
FAST检测的角点很多,ORB使用 Harris 角点响应函数来评分,然后选出前 N 个响应值最大的点作为最终的关键点。

3.方向赋值(构造旋转不变性)
对每个关键点周围的像素区域计算灰度质心方向,并将该方向赋予关键点,用于后续描述符的旋转补偿。

4.特征描述子(使用BRIEF)
使用 BRIEF(Binary Robust Independent Elementary Features)描述子对关键点进行描述。ORB对BRIEF进行改进,使其具有方向不变性,即对BRIEF描述子的采样点进行旋转处理。

5.特征匹配
使用 Hamming 距离进行二进制描述子之间的匹配。通常配合暴力匹配(Brute-Force)或 FLANN 进行快速匹配。

Fast角点检测算法

1.循环遍历图像中的每个像素点
将图像中的每个像素点作为潜在的角点候选点 p,对其周围像素进行检测。

2.初步筛选
取像素点 p 周围的第 1、5、9、13 个点(这四个点在像素环上形成一个正方形的四个顶点)与像素点 p 比较:
如果其中至少有三个点都比 p 的强度大一定阈值 t,或者都比 p 的强度小一定阈值 t,则进入下一步。
否则,该像素点 p 不是角点候选点。

3.后续验证
对初步筛选出的角点候选点 p 进行更严格的验证,检查像素环(半径为3的圆环上取16个像素)上连续有 n 个像素点的强度是否都比 p 的强度大 t 或者都比 p 的强度小 t:
如果满足条件,则 p 是一个角点候选点。
否则,p 不是角点候选点。

为了进一步提高关键点的质量和稳定性,使检测出的关键点更具有代表性和鲁棒性,从而提升后续特征匹配和图像处理的效果,会在使用 FAST 算法检测出角点候选点后,结合 Harris 算子的思路来进一步优化和筛选关键点

Haris角点检测算法

在这里插入图片描述
在这里插入图片描述
矩阵M就是图像的结构张量,描述了图像局部的梯度信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

特征点方向确定

为了实现旋转不变性,ORB为每个关键点计算一个主方向,使得特征描述子可以随着图像的旋转同步旋转。
ORB使用**灰度质心法(Intensity Centroid)**来估计关键点的方向。

具体步骤:
取关键点周围一个固定大小的图像块(例如31×31);
计算图像块的质心位置(C_X,C_Y)
在这里插入图片描述
将关键点位置作为原点,计算质心相对该点的方向向量;

最终方向角:
θ = a r c t a n 2 ( C y − y 0 , C x − x 0 ) θ=arctan2(C_y-y_0, C_x-x_0) θ=arctan2(Cyy0,Cxx0)
其中(x_0,y_0)是关键点坐标。
这样,ORB就为每个关键点赋予了一个方向角 θ,以用于旋转 BRIEF 描述子的采样模式。

特征点描述

特征描述子(BRIEF with rotation)
原始BRIEF描述子:
随机从关键点周围采样像素点对,比较它们的灰度大小。

若 (I(P_1)-I(P_2) ),则记为1;反之为0。

每对像素比较结果构成一个比特位,最终形成长度为128或256位的二进制向量。

ORB的改进:
旋转补偿:将原始BRIEF的采样模板旋转 θ 角度,使得描述子具有旋转不变性;

学习优选的点对组合:ORB用学习方式选出最能区分特征的点对组合,以提升识别能力和抗噪性。

特征点匹配

使用**汉明距离(Hamming Distance)**衡量两个二进制描述子之间的相似度。

汉明距离 = 两个描述子中不相同的比特数。

匹配方法常见的有:

Brute-Force Matcher:暴力搜索所有描述子对,找出最小距离;

KNN匹配 + 比率测试(Lowe’s ratio test):找两个最邻近匹配,如果最近的距离远小于次近的距离,说明匹配可信;

FLANN(近似最近邻搜索):加速匹配,适合大规模匹配。

http://www.xdnf.cn/news/403957.html

相关文章:

  • 如何更改默认字体:ONLYOFFICE 协作空间、桌面编辑器、文档测试示例
  • Spring AI 与 Hugging Face 深度集成:打造高效文本生成应用
  • 扩展:React 项目执行 yarn eject 后的 config 目录结构详解
  • Spring AI 与 Groq 的深度集成:解锁高效 AI 推理新体验
  • 七、MyBatis-Plus高级用法:最优化持久层开发
  • 从0开始学习大模型--Day07--大模型的核心知识点
  • TCPIP详解 卷1协议 十 用户数据报协议和IP分片
  • 还在用付费?免费它不香吗
  • 集群脑裂危机!金仓数据库双主故障如何紧急救援?​
  • 电商物流管理优化:从网络重构到成本管控的全链路解析
  • OSI 7层模型
  • 详解RabbitMQ工作模式之发布确认模式
  • nvm管理node版本
  • 如何使用Selenium?
  • 【Jenkins简单自动化部署案例:基于Docker和Harbor的自动化部署流程记录】
  • Golang企业级商城高并发微服务实战
  • RNN(循环神经网络)原理与结构
  • 【layout组件 与 路由镶嵌】vue3 后台管理系统
  • SSTI记录
  • 【小记】word批量生成准考证
  • GPU SIMT架构的极限压榨:PTX汇编指令级并行优化实践
  • 图文展示HDFS、YARN、MapReduce三者关系
  • WEBSTORM前端 —— 第3章:移动 Web —— 第1节:平面转换、渐变
  • Redisson在业务处理中失败后的应对策略:保障分布式系统的可靠性
  • 深入掌握Linux计划任务与进程管理:从基础到实战
  • Pandas教程:被冷落的数据结构-Panel
  • 联想 SR550 服务器,配置 RAID 5教程!
  • MySQL创建了一个索引表,如何来验证这个索引表是否使用了呢?
  • window 显示驱动开发-将虚拟地址映射到内存段(二)
  • 探秘高可用负载均衡集群:企业网络架构的稳固基石