ORB算法特征提取

声明:学习过程中的知识总结,欢迎批评指正。

ORB算法提取两路输入图像(图像A,图像B)的特征点,根据提取的特征点进行特征匹配得到特征对。

图像金字塔

因为在现实世界中,同一个物体可能会以不同的尺度出现在图像中。例如,当你走近一个物体时,它在图像中的尺度就会变大;当你远离一个物体时,它在图像中的尺度就会变小。而且在双目视角中同一物体的尺度也是不一样的,为了让特征点检测算法能够在不同尺度的图像中都能有效地检测到特征点,需要使用图像金字塔。图像金字塔是由原始图像(称为第0层Level0)经过多次下采样得到的,在每一层上重新运行特征点提取算法或者根据缩放因子把第0层的特征点均摊到其它层,这样,我们就可以在不同尺度的图像中都检测到特征点,从而实现尺度不变性。

计算FAST角点

  1. 选取像素p,假设它的亮度为Ip
  2. 设置一个阈值T(这个阈值指的是亮度差)
  3. 以像素p为中心,选取半径为3的圆上的16个像素点
  4. 假设在这个圆上,有连续N个点的亮度大于Ip+T或小于Ip-T,那么像素p就被认为是特征点
  5. 循环上面几步,对每个像素都执行相同操作

可以理解成用一个7×7的卷积核,把图像进行遍历。

四叉树均匀化

通过四叉树均匀化把每层图像中的特征点的分布调整的更加均匀一些,在图像处理和计算机视觉中,特征点的分布往往会影响到后续算法的性能。如果特征点集中在图像的某一部分,那么这可能会导致对图像其他部分的信息损失,从而影响到后续算法的精度。

四叉树均匀化步骤:

  1. 将图像分割成四个等大小的区域(也就是四叉树的根节点)。
  2. 在每个区域中选择一定数量的特征点。如果某个区域中的特征点数量超过了预设的阈值,那么就继续将这个区域分割成四个子区域,并在每个子区域中选择特征点。
  3. 重复上述过程,直到所有的区域中的特征点数量都不超过阈值,或者达到了预设的最大深度。

BRIEF、ORB描述子

BRIEF算法的核心思想就是在特征点P周围以一定模式选取N个点对,比较点对的两个点(比如p,q)所在的灰度值大小:如果p比q大,则取1,反之取0。如果取了256个这样的p,q,就会得到256维由0,1组成的向量,而这个向量就是这个点的唯一表示,就可以称之为描述子。通过上述步骤我们得到了图像A和图像B的图像金字塔以及每一层中均匀分布的特征点,然后对这些特征点进行BRIEF描述子计算。FAST角点是没有方向信息的,那么在图像发生旋转的时候,其描述子也会发生变化,为了是的特征点具有旋转不变形,引出了灰度质心法来计算特征点的方向。

Steer BRIED描述子:上面所说的BRIEF算法,在将图像旋转后,描述子就会发生变化,为了使得描述子对旋转鲁棒,提出了灰度质心法(这个原理在下面讲解)具体做法就是将固定的pattern进行坐标转换,转换的坐标就是灰度质心法求解的向量作为x轴所在的坐标系,然后用转换后的pattern坐标下所在的像素进行对比,同样会得到唯一的描述子。如下图所示,Q就是灰度质心,坐标转换成PQ是x轴的坐标系:

BRIEF描述子的计算过程如下:

  1. 首先,选取特征点周围的一个小区域,通常是一个正方形区域。
  2. 然后,在这个区域内随机选择一对像素,计算它们的灰度值差。
  3. 如果灰度值差大于0,那么在BRIEF描述子中对应的位置为1,否则为0。
  4. 重复上述过程,直到得到一个足够长的二进制向量。通常,BRIEF描述子的长度可以是128、256或512。

ORB(Oriented FAST and Rotated BRIEF)描述子是在BRIEF的基础上加入旋转不变性的。这是通过引入特征点的方向信息来实现的。

具体的步骤:

  1. 特征点检测:ORB使用FAST角点检测器来找到图像中的特征点。
  2. 计算特征点的方向:对于每个关键点,ORB计算其周围像素的质心,然后计算特征点到质心的向量,该向量的角度就是特征点的方向。具体来说,如果图像中的点为𝑝(𝑥,𝑦),其强度质心为𝐶,则角度𝜃可以通过下面的公式计算:其中,𝑝是特征点周围的像素,𝐶是这些像素的质心,𝑥和𝑦是像素的坐标。
  3. 生成旋转不变的BRIEF描述子:在生成BRIEF描述子的时候,ORB考虑了特征点的方向。具体来说,它根据特征点的方向,将比较的像素对进行旋转,然后再比较它们的灰度值。这样生成的BRIEF描述子就具有旋转不变性了。

非极大值抑制

在特征点检测和描述子生成的过程中,非极大值抑制(Non-Maximum Suppression,NMS)是一个常用的步骤,用于减少冗余的特征点,并保留最显著的特征点。这在处理大量图像数据时是非常重要的,因为它可以显著减少计算量和存储需求。

特别是在特征点检测阶段,我们通常会得到大量的候选特征点,其中许多可能是相互非常接近或者在某种程度上是冗余的。非极大值抑制就是在这些候选特征点中选择最显著的特征点。通常,这是通过比较每个特征点与其邻域内其他特征点的响应值来实现的。只有当一个特征点的响应值大于其所有邻域内的其他特征点时,我们才保留这个特征点。

然而,对于特征点的主方向的计算,非极大值抑制并不常用。主方向的计算通常是基于特征点周围像素的梯度方向和大小,通过形成一个方向直方图,然后找到直方图的峰值来确定的。这个过程并不涉及非极大值抑制。但在某些算法中,可能会在计算主方向后再次使用非极大值抑制,以进一步减少特征点的数量。

特征点匹配

对同一层中的特征点进行特征匹配得到特征对,然后把每一层得到的特征对都叠加到第0层,再到一连串完整的特征对。

  1. 特征描述子计算:对每个特征点,计算其特征描述子。这可以使用BRIEF、SIFT、SURF、ORB等方法。
  2. 特征描述子比较:计算两个图像中所有特征描述子之间的距离。这通常使用欧氏距离或汉明距离,取决于特征描述子的类型,如果是使用具有旋转不变性的描述子计算方法,那么可以通过汉明距离来比较他们之间的距离。
  3. 匹配:根据特征描述子之间的距离,找到最相似的特征点对。常用的策略有最近邻匹配(Nearest Neighbor matching)和比值测试(Ratio Test)。最近邻匹配是找到距离最近的特征点对,而比值测试是找到第二近的特征点,并计算最近和第二近的距离比值,如果这个比值小于某个阈值(如0.8),则认为这是一个好的匹配。
  4. 剔除错误匹配:由于噪声和其他因素的影响,可能会产生一些错误的匹配。因此,通常需要使用一些方法来剔除这些错误的匹配,如RANSAC(RANdom SAmple Consensus)算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/853218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

青少年编程与数学 01-001开始使用计算机 03课题、键盘操作与打字2_2

青少年编程与数学 01-001开始使用计算机 03课题、键盘操作与打字2_2 五、中文打字六、语音输入(一)启用Windows语音输入(二)使用语音输入(三)提示与注意事项 课题建议课题作业英文词汇英文缩写 本文主题为键…

文生视频新王登场:Luma官宣免费、电影级大片生成,Sora?可灵?SD3.0?(内附网址)

✨点击这里✨:🚀原文链接:(更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号!) 文生视频新王登场:Luma官宣免费、电影级大片生成,Sora?可灵&am…

Ubuntu server 24 (Linux) 安装部署samba服务器 共享文件目录 windows访问

1 安装 sudo apt update sudo apt-get install samba #启动服务 sudo systemctl restart smbd.service sudo systemctl enable smbd.service #查看服务 2 创建用户 #创建系统用户 sudo useradd test2 #配置用户密码 sudo smbpasswd -a test2 # smbpasswd: -a添加用户 …

[xmake]构建静态库和动态库

xmake 静态库和动态库 在xmake中创建静态库和动态库的方法非常相似。以下是创建静态库和动态库的基本步骤: 创建xmake工程文件(xmake.lua)。 配置工程属性,包括工程名、版本等。 添加源代码文件到工程中。 设置是创建静态库还…

SD3开源:AI绘画的新纪元,出图效果巨好,不容错过!(附教程)

大家好,我是画画的小强。 这两天,Stability AI 将史上最牛的AI绘画模型SD3开源了,真是有格局! 虽说只是中杯的20亿参数版本,但我已经很满足了,再高的版本,我这普通的16G 4070Ti Super 显卡也跑…

C++程序退出时进行资源清理和关闭操作

在 C 程序中,进行资源清理和关闭操作时,通常会使用析构函数或 atexit 函数来执行清理操作。以下是一些方法和示例,展示如何在程序退出时清理 USB 资源或执行其他清理操作 一、使用析构函数 如果你的资源清理操作与某个对象的生命周期相关&am…

虚幻引擎 Apple Vision Pro 快速入门指南

先决条件 需要配备 Apple Silicon(m1、m2、m3)的 Mac 安装了 visionOS 1.1 支持的 Xcode 15.3 Apple Vision Pro 设备设置 这是一个简短的摘要,请参阅 Apple 的文档以获取完整的设置说明。 设置并连接到你的 wifi,或者使用开发者带 由于 wifi 不稳定,建议使用开发者带 更…

HAL库开发--串口

知不足而奋进 望远山而前行 目录 文章目录 前言 学习目标 学习内容 开发流程 串口功能配置 串口功能开启 串口中断配置 串口参数配置 查询配置结果 发送功能测试 中断接收功能测试 printf配置 DMA收发 配置 DMA发送 DMA接收(方式1) DMA接收(方式2) 总结 前言…

shell编程基础(第18篇:更多的文件操作命令介绍)

前言 对于文件来说,除了它的文件内容之外,就是对其文件本身的操作,比如我们想要重命名文件、移动文件、复制文件、已经获取文件所在目录,文件名等操作,今天一起学习更多的文件操作相关的命令 basename 用于获取文件名…

C++ 32 之 静态成员函数

#include <iostream> #include <string> using namespace std;// 特点: // 1.在编译阶段就分配了内存空间 // 2.类内声明&#xff0c;在类外进行初始化 // 3.所有对象共享一份静态成员数据 class Students02{ public:int s_c;static int s_d;// 静态成员函数&#…

整理好了!2024年最常见 20 道并发编程面试题(八)

上一篇地址&#xff1a;整理好了&#xff01;2024年最常见 20 道并发编程面试题&#xff08;七&#xff09;-CSDN博客 十五、请解释什么是不可变对象&#xff08;Immutable Objects&#xff09;以及它们在并发编程中的优势。 不可变对象&#xff08;Immutable Objects&#x…

btstack协议栈实战篇--HFP HF - Hands-Free

btstack协议栈---总目录_bt stack是什么-CSDN博客 目录 1.Main Application Setup 2.hci_packet_handler 3.hfp_hf_packet_handler 4.log信息 这个HFP免提示例演示了如何从远程HFP音频网关(AG),并且如果定义了HAVE BTSTACK STDIN,如何控制HFP AG。 1.Main Appl…

基于python的PDF文件解析器汇总

基于python的PDF文件解析器汇总 大多数已发表的科学文献目前以 PDF 格式存在&#xff0c;这是一种轻量级、普遍的文件格式&#xff0c;能够保持一致的文本布局和格式。对于人类读者而言&#xff0c; PDF格式的文件内容展示整洁且一致的布局有助于阅读&#xff0c;可以很容易地…

航拍无人机像素坐标转世界坐标

一、背景 已知相机参数&#xff08;传感器宽度和高度、图像宽度和高度、焦距、相对航高、像主点坐标 &#xff09;&#xff0c;在给定像素坐标的前提下&#xff0c;求世界坐标&#xff0c;大部分通过AI来实现&#xff0c;不知道哪个步骤有问题&#xff0c;望大家指正 二、代码…

YOLOv8可视化界面PYQT5

yolov8&#xff0c;可视化界面pyqt。支持图片检测&#xff0c;视频检测&#xff0c;摄像头检测等&#xff0c;实时显示检测画面。支持自定义数据集&#xff0c;计数&#xff0c;fps展示……,即插即用&#xff0c;无需更改太多代码

非关系型数据库NoSQL数据层解决方案 之 Mongodb 简介 下载安装 springboot整合与读写操作

MongoDB 简介 MongoDB是一个开源的面向文档的NoSQL数据库&#xff0c;它采用了分布式文件存储的数据结构&#xff0c;是当前非常流行的数据库之一。 以下是MongoDB的主要特点和优势&#xff1a; 面向文档的存储&#xff1a; MongoDB是一个面向文档的数据库管理系统&#xff0…

TLE9879的基于Arduino调试板SWD刷写接口

官方的Arduino评估板&#xff0c;如下图所示&#xff1a; 如果你有官方的调试器&#xff0c;应该不用关注本文章&#xff0c;如下图连接就是&#xff1a; 如果&#xff0c;您和博主一样需要自己飞线的话&#xff0c;如下图所示&#xff1a;PCB的名称在右边整理&#xff0c;SWD的…

揭秘虾皮电商API:一站式接入,轻松掌握亿万商机

当涉及到虾皮&#xff08;Shopee&#xff09;接口的时&#xff0c;我们需要注意的是虾皮提供了API供开发者使用以集成其平台功能。然而&#xff0c;由于API的具体细节、参数和认证机制可能会随时间变化&#xff0c;以下是一个简化的示例和步骤&#xff0c;用于说明如何与虾皮AP…

Elasticsearch 认证模拟题 - 20

一、题目 定义一个 pipeline&#xff0c;并且将 earthquakes 索引的文档进行更新 pipeline 的 ID 为 earthquakes_pipeline将 magnitude_type 的字段值改为大写如果文档不包含 batch_number&#xff0c;增加这个字段&#xff0c;将数值设置为 1如果已经包含 batch_number&…

大模型系列:Prompt提示工程常用技巧和实践

前言 Prompt提示语是使用大模型解决实际问题的最直接的方式&#xff0c;本篇介绍Prompt提示工程常用的技巧&#xff0c;包括Zero-Shot、Few-Shot、CoT思维链、Least-to-Most任务分解。 内容摘要 Prompt提示工程简述Prompt的一般结构介绍零样本提示Zero-Shot少样本提示Few-Sho…