ORB 特征点提取

FAST关键点

选取像素p,假设它的亮度为Ip   .  

设置一个阈值T(比如Ip20%);

以像素p为中心,选取半径为3的圆上的16个像素点;

假如选取的圆上,有连续的N个点的亮度大于Ip+T或小于Ip-T,那么像素p可以被认为是特征点; 

循环以上4步,对每一个像素执行相同操作。

FAST 描述子

论文:BRIEF: Binary Robust Independent Elementary Features

BRIEF算法的核心思想是在关键点P的周围以一定模式选取N个点对,把这N个点对的比较结果组合起来作为描述子。为了保持踩点固定,工 程上采用特殊设计的固定的pattern来做

灰度质心法

原始的FAST关键点没有方向信息,这样当图像发生旋转后,brief描述子也会发生变化,使得特征点对旋转不鲁棒

解决方法:orientated FAST

使用灰度质心法计算特征点的方向,

什么是灰度质心法?

下面重点说一下如何计算灰度质心。

以上是灰度质心法求关键点旋转角度的原理。

在一个圆内计算灰度质心

下图P为几何中心,Q为灰度质心

思考:为什么是圆?不是正方形?

ORBSLAM里面是先旋转坐标再从图像中采点提取,并不是先取那块图像再旋转,见computeOrbDescriptor函数里的这个表达式

#define GET_VALUE(idx) \    center[cvRound(pattern[idx].xb + pattern[idx].ya)step + \   //y'step       cvRound(pattern[idx].xa -

pattern[idx].yb)]

会导致下方采集点的时候绿色和黄色部分就是不同的像素

下面求圆内的坐标范围

umax1/4圆的每一行的u轴坐标边界(下图中橙色线段FG

vmax = cvFloor(HALF_PATCH_SIZE * sqrt(2 .f) / 2 + 1) ; vmin = cvCeil(HALF_PATCH_SIZE * sqrt(2 .f) / 2) ;
// 对应从D到B的红色弧线,umax坐标从D到C for (v = 0 ; v <= vmax; ++v)
umax[v] = cvRound(sqrt(hp2 - v * v)) ;
// 对应从B到E的蓝色弧线,umax坐标从C到A
for (v = HALF_PATCH_SIZE , v0 = 0 ; v >= vmin ; --v) {
while (umax[v0] == umax[v0 + 1]) ++v0 ;
umax[v] = v0 ;
++v0 ;
}

 

参考:

认真的虎ORBSLAM2源码解读(四):图解ORB特征提取ORBextractor_orbextractor 提取特征-CSDN博客 

https://www.cnblogs.com/wall-e2/p/8057448.html

特征点角度计算

steer brief

v 绕 原点旋转θ 角,得到点v’,假设 v点的坐标是(x, y) ,那么可以推导得到 v’点的坐标(x’, y’)

参考:

https://www.cnblogs.com/zhoug2020/p/7842808.html

IC_Angle 计算技巧

在一个圆域中算出m10x坐标)和m01y坐标),计算步骤是先算出中间红线的m10,然后在平行于x轴算出m10m01 ,一次计算相当 于图像中的同个颜色的两个line

为什么要重载小括号运算符 operator()

可以用于仿函数(一个可以实现函数功能的对象)

仿函数(functor)又称为函数对象(function object)是一个能行使函数功能的类。仿函数的语法几乎和我们普通的函数调用一样,不过作 为仿函数的类,都必须重载operator()运算符

1.仿函数可有拥有自己的数据成员和成员变量,这意味着这意味着仿函数拥有状态。这在一般函数中是不可能的。 2.仿函数通常比一般函数有更好的速度。

扩展阅读

C++operator()(重载小括号运算符)_c++的bool operator()-CSDN博客

金字塔的计算

图像金字塔对应函数为:ORBextractor::ComputePyramid

特征点数量的分配计算

参考:https://zhuanlan.zhihu.com/p/61738607

使用四叉树均匀分布特征点

ORB特征提取策略对ORB-SLAM2性能的影响:ORB-SLAM2中的ORB特征提取方法相对于OpenCV中的方法,提高了ORB-SLAM2的轨迹精 度和鲁棒性。增加特征提取的均匀性可以提高系统精度,但是似乎会降低特征提取的重复性。

参见:https://zhuanlan.zhihu.com/p/57235987 对应函数 DistributeOctTree

.  如果图片的宽度比较宽,就先把分成左右w/h份。一般的640×480的图像开始的时候只有一个node

.  如果node里面的点数>1,把每个node分成四个node,如果node里面的特征点为空,就不要了,删掉。 .  新分的node的点数>1,就再分裂成4node。如此,一直分裂。

.  终止条件为:node的总数量> [公式] ,或者无法再进行分裂。 .  然后从每个node里面选择一个质量最好的FAST点。

参考:https://zhuanlan.zhihu.com/p/61738607 ExtractorNode::DivideNode

高斯处理  

特征点去畸变

近点和远点

在双目或RGB-D模式下,特征点对应的深度值小于40倍的双目/RGB-D基线称之为近点,否则称之为远点。 近点特征点对三角化得到的三维点坐标比较准确,可以提供旋转、平移、尺度信息。

远点特征点仅能够提供相对准确的旋转信息,无法提供比较准确的尺度和平移信息。只有当多个视角下多次观测到的远点我们才会考虑三角 化。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CSS实现图片裁剪居中(只截取剪裁图片中间部分,图片不变形)

1.第一种方式&#xff1a;&#xff08;直接给图片设置&#xff1a;object-fit:cover;&#xff09; .imgbox{width: 100%;height:200px;overflow: hidden;position: relative;img{width: 100%;height: 100%; //图片要设置高度display: block;position: absolute;left: 0;right…

【Python基础篇】你了解python中运算符吗

文章目录 1. 算数运算符1.1 //整除1.2 %取模1.3 **幂 2. 赋值运算符3. 位运算符3.1 &&#xff08;按位与&#xff09;3.2 |&#xff08;按位或&#xff09;3.3 ^&#xff08;按位异或&#xff09;3.4 ~&#xff08;按位取反&#xff09;3.5 <<&#xff08;左移&#…

【JavaWeb程序设计】JSP编程II

目录 一、输入并运行下面的import_test.jsp页面 1.1 代码运行结果 1.2 修改编码之后的运行结果 二、errorPage属性和isErrorPage属性的使用 2.1 下面的hello.jsp页面执行时将抛出一个异常&#xff0c;它指定了错误处理页面为errorHandler.jsp。 2.1.2 运行截图 2.2 下面…

压测工具---Ultron

压测工具&#xff1a;Ultron 类型&#xff1a;接口级和全链路 接口级 对于接口级别的压测我们可以进行 http接口压测、thrift压测、redis压测、kafka压测、DDMQ压测、MySQL压测等&#xff0c;选对对应的业务线、选择好压测执行的时间和轮数就可以执行压测操作了 全链路 对…

Java新特性梳理——Java15

highlight: xcode theme: vuepress 概述 2020 年 9 月 15 日&#xff0c;Java 15 正式发布&#xff0c;(风平浪静的一个版本)共有 14 个 JEP&#xff0c;是时间驱动形式发布的第六个版本。相关文档&#xff1a;https://openjdk.java.net/projects/jdk/15/ 语法层面变化 密封类 …

【机器学习】基于密度的聚类算法:DBSCAN详解

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 基于密度的聚类算法&#xff1a;DBSCAN详解引言DBSCAN的基本概念点的分类聚类过…

JVM原理(十七):JVM虚拟机即时编译器详解

编译器无论在何时、在何种状态下把Class文件转换成与本地基础设施相关的二进制机器码&#xff0c;他都可以视为整个编译过程的后端。 后端编译器编译性能的好坏、代码优化质量的高低却是衡量一款商用虛拟机优秀与否的关键指标之一。 1. 即时编译器 即时编译器是一个把Java的…

19.【C语言】初识指针(重难点)

内存&#xff1a;所有程序的运行在内存中 用Cheat Engine查看任意程序的内存(16进制&#xff09;&#xff1a; 显示大量的数据 想要定位某个数字 &#xff0c;需要知道地址(类比二维坐标) 如F8的地址为00BCB90008,所以是00BCB908(偏移) ctrlG 则有 内存单元的说明&#xff1…

动态颤抖的眼睛效果404页面源码

动态颤抖的眼睛效果404页面源码&#xff0c; 源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 动态颤抖的眼睛效果404页面源码

Portainer 是一个开源的容器管理平台-非常直观好用的Docker图形化项目

在这个容器化技术大行其道的时代&#xff0c;Docker和Kubernetes几乎成了技术圈的新宠。可是管理起容器来&#xff0c;有时候还是有点头大。命令行操作对于某些小伙伴来说&#xff0c;可能还是有点不太友好。 今天开源君分享一个叫 Portainer 的开源项目&#xff0c;一个用来简…

AI大模型时代的存储发展趋势

从2022年下半年&#xff0c;大模型和AIGC这两个词变得极其火热&#xff0c;而GPU的市场也是一卡难求。对于这种迷乱和火热&#xff0c;让我想起了当年的比特币挖矿和IPFS。似乎世界一年一个新风口&#xff0c;比特币、元宇宙、NFT、AIGC&#xff0c;金钱永不眠&#xff0c;IT炒…

【React】React18 Hooks 之 useReducer

目录 useReducer案例1&#xff1a;useReducer不带初始化函数案例2&#xff1a;useReducer带初始化函数注意事项1&#xff1a;dispatch函数不会改变正在运行的代码的状态注意事项2&#xff1a;获取dispatch函数触发后 JavaScript 变量的值注意事项3&#xff1a;触发了reducer&am…

【MotionCap】pycharm 远程在wsl2 ubuntu20.04中root的miniconda3环境

pycharm wsl2 链接到pycharmsbin 都能看到内容,/root 下内容赋予了zhangbin 所有,pycharm还是看不到/root 下内容。sudo 安装了miniconda3 引发了这些问题 由于是在 root 用户安装的miniconda3 所以安装路径在/root/miniconda3 里 这导致了环境也是root用户的,会触发告警 WA…

Xilinx原语

1. 原语介绍 原语是 Xilinx 器件底层硬件中的功能模块&#xff0c;它使用专用的资源来实现一系列的功能。相比于 IP 核&#xff0c;原语的调用方法更简单&#xff0c;但是一般只用于实现一些简单的功能。本章主要用到了 BUFG、 BUFIO、 IDDR、 ODDR、IDELAYE2 和 IDELAYCTRL。…

14-29 剑和诗人3 – 利用知识图谱增强 LLM 推理能力

知识图谱提供了一种结构化的方式来表示现实世界的事实及其关系。通过将知识图谱整合到大型语言模型中&#xff0c;我们可以增强它们的事实知识和推理能力。让我们探索如何实现这一点。 知识图谱构建 在利用知识图谱进行语言模型增强之前&#xff0c;我们需要从可靠的来源构建…

AIGC | 为机器学习工作站安装NVIDIA 4070 Ti Super显卡驱动

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 0x00 前言简述 话接上篇《AIGC | Ubuntu24.04桌面版安装后必要配置》文章&#xff0c;作为作者进行机器学习的基础篇&#xff08;筑基期&#xff09;&#xff0c;后续将主要介绍机器学习环境之如何…

springboot+vue+mybatis图书馆借阅管理系统+PPT+论文+讲解+售后

21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存储达到…

项目实战--Spring Boot与PageHelper的集成及线程污染解决

一、PageHelper使用背景 公司要做个简单管理系统&#xff0c;要我搭建Spring BootMyBatisPageHelperRedis的项目框架然后交i给实习生来开发。这个其实很简单&#xff0c;但是遇到搭建和使用过程中PageHelper有好多小坑&#xff0c;就记录一下&#xff0c;避免再踩。 版本选择&…

hdu物联网硬件实验2 GPIO亮灯

学院 班级 学号 姓名 日期 成绩 实验题目 GPIO亮灯 实验目的 点亮三个灯闪烁频率为一秒 硬件原理 无 关键代码及注释 const int ledPin1 GREEN_LED; // the number of the LED pin const int ledPin2 YELLOW_LED; const int ledPin3 RED…

Java - JDK17语法新增特性(如果想知道Java - JDK17语法新增常见的特性的知识点,那么只看这一篇就足够了!)

前言&#xff1a;Java在2021年发布了最新的长期支持版本&#xff1a;JDK 17。这个版本引入了许多新的语法特性&#xff0c;提升了开发效率和代码可读性。本文将简要介绍一些常见的新特性&#xff0c;帮助开发者快速掌握并应用于实际开发中。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨…