OpenCV(四十五):ORB特征点

news2024/11/14 18:40:09

1.特征点的组成

特征点由关键点描述子两部分组成:

  • 关键点是在图像中检测到的具有显著变化的位置坐标。
  • 描述子是用于表示关键点周围局部区域特征的向量或特征向量。

2.ORB特征点原理

ORB特征点由关键点FAST角点 和描述子BRIEF组成。

2.1提取FAST角点的算法

      FAST算法的思想:通过比较像素相对于中心像素有较大差别(过亮、过暗)时,则快速地检测出角点。步骤如下:

  • 选择某个像素点作为中心点P,其像素值为I
  • 设置判定FAST角点的像素闻值,例如=20%*1
  • 比较中心点的像素值与半径为3的圆周上所有像素的像素值进行比较,如果存在连续N个像素的像素值大于或者小于 ,则像素点p为角点。
  • 遍历图像中每个像素点,重复上述步骤

2.2方向分配:

       为每个检测到的角点分配一个主方向。为了实现旋转不变性,采用灰度质心算法(Intensity Centroid)进行实现。对特征点附近的图像灰度质心进行计算,所谓质心是指图像块灰度值作为权值的中心,计算方式如下:

2.3生成BRIEF描述子的算法

       BRIEF描述子生成算法的思想:是通过比较两个像素点对之间的灰度差异,并将比较结果编码为二进制字符串。具体描述BRIEF描述子的步骤如下:

  • 选择一组固定的采样点对
  • 计算采样点对的像素差值
  • 对于每对采样点的像素差值,将其与阈值进行比较,得到一个二进制的比较结果。通常,如果第一个像素的灰度值大于第二个像素的灰度值,就将对应位置的二进制位设为1;否则,置为0。
  • 将所有的二进制比较结果组合成一个二进制字符串,作为BRIEF描述子。

2.4描述子匹配

        对于图像中的两个特征点,使用描述子之间的距离或相似度度量进行匹配。最常见的方法是计算描述子之间的汉明距离(Hamming Distance)或欧氏距离,并根据预设的阈值来判断是否匹配成功。也可以使用快速匹配算法(如KD树或近似最近邻算法)来加速匹配过程。

3.ORB特征点提取函数 create()

static Ptr<ORB> cV::ORB::create ( int   nfeatures = 500,

float    scaleFactor = 1.2f,

int          nlevels = 8,

int          edgeThreshold = 31,

int           firstLevel = 0,

int          WTA K = 2,

ORB::ScoreType  scoreType = ORB: :HARRIS_SCORE,

int         patchSize = 31,

int         fastThreshold = 20

)

  • nfeatures:检测ORB特征点的数目
  • scaleFactor:金字塔尺寸缩小的比例
  • nlevels:金字塔层数
  • edgeThreshold:边缘阙值
  • firstLevel:将原图像放入金字塔中的等级
  • WTA K:生成每位描述子时需要用的像素点数目
  • scoreType:检测关键点时关键点评价方法
  • patchSize:生成描述子时关键点周围邻域的尺寸
  • fastThreshold:计算FAST角点时像素值差值的阅值

4.示例代码

void ORB_f(Mat mat){
    //创建ORB特征点类变量
    Ptr<ORB> orb=ORB::create(500,//特征点数目
                             1.2f,//金字塔层级之间的缩放比例
                             8,//金字塔图像层级系数
                             31,//边缘阈值
                             0,//原图在金字塔中的层数
                             2,//生成描述子时需要用的像素点数目
                             ORB::HARRIS_SCORE,//使用Harris方法评价特征点
                             31,//生成描述子时关键点周围邻域的尺寸
                             20//计算FAST角点时像素值差值的阈值
            );
    //计算ORB关键点
    vector<KeyPoint> Keypoints;
    orb->detect(mat,Keypoints);//确定关键点

    //计算ORB描述子
    Mat descriptions;
    orb->compute(mat,Keypoints,descriptions);//计算描述子

    //绘制特征点
    Mat mat2;
    mat.copyTo(mat2);
    //绘制不含角度和大小的结果
    drawKeypoints(mat,Keypoints,mat,Scalar(255,255,255,255));
    //绘制不含角度和大小的结果
    drawKeypoints(mat,Keypoints,mat2,Scalar(255,255,255,255),DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
    //显示结果
    imwrite("/sdcard/DCIM/mat.png",mat);
    imwrite("/sdcard/DCIM/mat2.png",mat2);

}

显示结果:

      (绘制不含角度和大小的结果)                           (绘制含角度和大小的结果)

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

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

相关文章

STM32 Cubemx 基本定时器Basic Timers

文章目录 前言简介Cubemx使用 前言 持续学习stm32中… 简介 基本定时器有TIM6和TIM7&#xff0c;是一个16位的向上定时器。基本定时器的用途较少&#xff0c;只能用于纯粹的定时器以及驱动DAC模块。 注&#xff1a;基本定时器各自独立&#xff0c;不存在共用的资源。 基本定…

pytorch生成CAM热力图-单张图像

利用ImageNet预训练模型生成CAM热力图-单张图像 一、环境搭建二、主要代码三、结果展示 代码和图片等资源均来源于哔哩哔哩up主&#xff1a;同济子豪兄 讲解视频&#xff1a;CAM可解释性分析-算法讲解 一、环境搭建 1&#xff0c;安装所需的包 pip install numpy pandas mat…

EATON XV-440-10TVB-1-13-1工业显示屏模块

EATON XV-440-10TVB-1-13-1工业显示屏模块是一款功能强大的工业显示屏&#xff0c;具有以下特点和功能&#xff1a; 1. 显示屏尺寸为10.4英寸&#xff0c;分辨率为800600。 2. 采用TFT液晶显示技术&#xff0c;显示效果清晰&#xff0c;色彩鲜艳。 3. 支持多种显示模式&…

ESP32-BOX的组件配置添加核心部分详细介绍

前言 &#xff08;1&#xff09;为了方便开发&#xff0c;ESP32提供了组件库方便用户进行二次开发。 github仓库&#xff1b;gitee仓库 &#xff08;2&#xff09;在学习本章之前最好有CMake或者Makefile的基础&#xff0c;如果没有也不要慌&#xff0c;有的话最好。 &#xff…

1-FPGA硬件加速-YUV_YCbCr

这是对《基于Matlab与FPGA的图像处理教程》的学习笔记&#xff0c;代码和内容摘取自书中。 心得&#xff1a; 使用FPGA进行硬件加速的重点是消除或者减少浮点数运算&#xff0c;转换为定点运算&#xff0c;然后通过pipeline流水设计转为并行实现加速。 原理和方法 RGB与&…

微信小程序——常用组件的属性介绍

常用的组件内容标签 text 文本组件类似于HTML中的span标签&#xff0c;是一个行内元素rich-text 富文本标签支持把HTML字符串渲染为WXML结构 text标签的基本使用 通过text组件的selectable属性&#xff0c;实现长按选中文本内容的效果。只有text标签支持长按选中效果&#x…

爬虫代理在数据采集中的应用详解

随着互联网技术的不断发展&#xff0c;数据采集已经成为了各个行业中必不可少的一项工作。在数据采集的过程中&#xff0c;爬虫代理的应用越来越受到了重视。本文将详细介绍爬虫代理在数据采集中的应用。 什么是爬虫代理&#xff1f; 爬虫代理是指利用代理服务器来隐藏真实的IP…

string的使用和模拟实现

&#x1f493;博主个人主页:不是笨小孩&#x1f440; ⏩专栏分类:数据结构与算法&#x1f440; C&#x1f440; 刷题专栏&#x1f440; C语言&#x1f440; &#x1f69a;代码仓库:笨小孩的代码库&#x1f440; ⏩社区&#xff1a;不是笨小孩&#x1f440; &#x1f339;欢迎大…

Pytest系列-使用自定义标记mark(6)

简介 pytest 可以支持自定义标记&#xff0c;自定义标记可以把一个 web 项目划分为多个模块&#xff0c;然后指定模块名称执行 Pytest 里面自定义标记 用法&#xff1a;将pytest.mark.标记名称 放到测试函数或者类上面 使用&#xff1a; 执行时加上 -m 标记名 进行用例筛选…

[交互]交互的实战问题1

[交互]交互的实战问题1 状态码 431 Request Header Fields Too LargeReferrer Policy: no-referrer-when-downgrade路径参数高并发问题使用场景使用的方法异常情况 状态码 431 Request Header Fields Too Large 最近做项目&#xff0c;遇到一个问题&#xff0c;后台导出表格时…

牛客: BM4 合并两个排序的链表

牛客: BM4 合并两个排序的链表 文章目录 牛客: BM4 合并两个排序的链表题目描述题解思路题解代码 题目描述 题解思路 以链表一为主链表,遍历两条链表 若当前链表二的节点val小于当前链表一的下一个节点val,则将链表链表二的该节点连到链表一的节点的下一个,链表一的当前节点往…

sql存储引擎

-- 查询建表语句 --可以查看引擎 show create table account; -- 可以看到默认引擎 InnoDB ENGINEInnoDB -- 查看当前数据库支持得存储引擎 show engines ; # InnoDB 默认 存储引擎 # MyISAM sql早期默认 存储引擎 # MEMORY 存储在内存中 用来做临时表和缓存 存储引擎 …

Adobe Acrobat Reader 中的漏洞

另一个流行漏洞 Adobe Acrobat 和 Acrobat Reader - 流行的便携式文档格式 (PDF) 工具 - 存在风险。该漏洞 CVE-2023-26369影响 Windows 和 macOS 安装。 攻击者创建的恶意 PDF 文档打开后&#xff0c;会利用与在缓冲区外写入有关的 CVE-2023-26369漏洞。因此&#xff0c;攻击…

数据中心液冷服务器详情说明

目录 前言 何为液冷服务器&#xff1f; 为什么需要液冷&#xff1f; 1.数据中心降低PUE的需求 2.政策导向 3.芯片热功率已经达到风冷散热极限 4.液冷比热远大于空气 液冷VS风冷&#xff0c;区别在哪&#xff1f; 1.液冷服务器跟风冷服务器的区别 2.液冷数据中心跟风冷…

linux安装常见的中间件和数据库

文章目录 一、数据库二、redis三、tomcat四、nginx五、mq六、es七、nacos八、neo4j&#xff08;图数据库&#xff09;九、fastdfs其他 一、数据库 linux环境上使用压缩包安装mysql【数据库】Mysql 创建用户与授权 二、redis redis是没有账号的&#xff0c;只能设置密码Linux…

对IP协议概念以及IP地址的概念进行简单整理

网络层重要协议 参考模型和协议栈IP协议IPv4数据报IP数据报格式IPv4地址特殊IP地址私有IP地址和公有IP地址子网划分 参考模型和协议栈 IP协议 IP协议定义了网络层数据传送的基本单元&#xff0c;也制定了一系列关于网络层的规则。 IPv4数据报 网络层的协议数据单元PDU 叫做分…

GeoSOS-FLUS未来土地利用变化情景模拟模型

软件简介 适用场景 GeoSOS-FLUS软件能较好的应用于土地利用变化模拟与未来土地利用情景 的预测和分析中&#xff0c;是进行地理空间模拟、参与空间优化、辅助决策制定的有效工 具。FLUS 模型可直接用于&#xff1a; 城市发展模拟及城市增长边界划定&#xff1b;城市内 部高分…

分布式事务解决方案之TCC

分布式事务解决方案之TCC 什么是TCC事务 TCC是Try、Confirm、Cancel三个词语的缩写&#xff0c;TCC要求每个分支事务实现三个操作&#xff1a;预处理Try、确认 Confirm、撤销Cancel。Try操作做业务检查及资源预留&#xff0c;Confirm做业务确认操作&#xff0c;Cancel实现一个…

Golang代码漏洞扫描工具介绍——govulncheck

Golang Golang作为一款近年来最火热的服务端语言之一&#xff0c;深受广大程序员的喜爱&#xff0c;笔者最近也在用&#xff0c;特别是高并发的场景下&#xff0c;golang易用性的优势十分明显&#xff0c;但笔者这次想要介绍的并不是golang本身&#xff0c;而且golang代码的漏洞…

微信小程序+echart实现点亮旅游地图

背景 最近看抖音有个很火的特效就是点亮地图&#xff0c;去过哪些地方&#xff0c;于是乎自己也想做一个&#xff0c;结合自己之前做的以家庭为单位的小程序&#xff0c;可以考虑做一个家庭一起点亮地图的功能。 效果图 过程 1&#xff0c;首先就是得去下微信小程序适配的ec…