ORB-SLAM2-金字塔求解-特征点的提取-描述子的计算

//这个成员函数重载了函数括号运算符,让他具有函数的特点
//但是还不知道在其他程序块是如何应用这块代码的。
//InputArray和OutputArray是opencv中的两个函数接口
void ORBextractor::operator()( InputArray _image, InputArray _mask, vector<KeyPoint>& _keypoints,OutputArray _descriptors)
{ if(_image.empty())return;//将输入的图像转换为Mat数据类型Mat image = _image.getMat();//判断数据类型是不是8bits单通道类型assert(image.type() == CV_8UC1 );// Pre-compute the scale pyramid//先计算输入图像的金字塔ComputePyramid(image);//从金字塔中的每一层图像中获取所有的特征点都存储在allKeypoints向量中vector < vector<KeyPoint> > allKeypoints;ComputeKeyPointsOctTree(allKeypoints);//ComputeKeyPointsOld(allKeypoints);Mat descriptors;int nkeypoints = 0;//将每一层获取的特征点的个数累加for (int level = 0; level < nlevels; ++level)nkeypoints += (int)allKeypoints[level].size();if( nkeypoints == 0 )_descriptors.release();else{//OutputArray是InputArray的派生类,在使用_OutputArray.getMat()之前要先用create()来为    //矩阵分配内存。_descriptors.create(nkeypoints, 32, CV_8U);descriptors = _descriptors.getMat();}_keypoints.clear();_keypoints.reserve(nkeypoints);int offset = 0;for (int level = 0; level < nlevels; ++level){//首先获取每一层图像上提取的特征点vector<KeyPoint>& keypoints = allKeypoints[level];//统计每层图像上提取的特征点的个数int nkeypointsLevel = (int)keypoints.size();if(nkeypointsLevel==0)continue;// preprocess the resized image//每次将金字塔上某一层上的图像复制都workingMat中Mat workingMat = mvImagePyramid[level].clone();//对这个图像用高斯滤波器进行平滑,输出的图像仍然放在workingMat中的GaussianBlur(workingMat, workingMat, Size(7, 7), 2, 2, BORDER_REFLECT_101);//平滑之后计算描述子// Compute the descriptors//一个特征点的描述子占一行Mat desc = descriptors.rowRange(offset, offset + nkeypointsLevel);computeDescriptors(workingMat, keypoints, desc, pattern);//将所有层上的特征点的描述子都放在一起,每一行是一个描述子offset += nkeypointsLevel;// Scale keypoint coordinatesif (level != 0){//scale是金字塔中不同层图像所代表的尺度,越往上尺度越大float scale = mvScaleFactor[level]; //getScale(level, firstLevel, scaleFactor);//我们先前在提取金字塔中每一层图像中的特征点时,特征点的坐标都设置为了在当前图像//下的坐标,从第i-1层图像变为第i层图像,相当于将图像中每一个像素点的坐标除以1.2//所以为了得到每一层图像上提取的特征点在原图像中的坐标位置需要乘以1.2。for (vector<KeyPoint>::iterator keypoint = keypoints.begin(),keypointEnd = keypoints.end(); keypoint != keypointEnd; ++keypoint)keypoint->pt *= scale;}// And add the keypoints to the output_keypoints.insert(_keypoints.end(), keypoints.begin(), keypoints.end());}
}
//按照上面的操作步骤是提取到每层图像上的特征点之后直接就计算特征点的描述子,和将每层中提取的特征
//点的坐标还原到原图像上去。而没有先用四叉树对提取的特征点进行优化。

 

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

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

相关文章

am335x uboot, kernel 编译

一、设置环境变量// 写在家目录下面的 .bashrc 里面export KERNEL_PATH~/aplex/kernel3.2.0 // kernel 路径export UBOOT_PATH~/aplex/uboot2011.09 // u-boot 路劲export ROOTFS_PATH~/aplex/filesystemexport TOOLFS_PATH~/aplex/toolsexport ARCHarm …

php+ajax简单实现跨域(http+https)请求调用

当一个网站 a站 需要调用另一个网站 b站 列表文章时 比如&#xff1a;www.a123.com 调用 www.b456.com 文章 在 a站 建立php文件获取 b站 资源文章到本地后&#xff0c;再传递a站前端 在网站 b456 下的文件为 <ul class"ls_wz"> <li><a href"#&q…

ORB-SLAM2中MapPoints的描述子的计算

//我们在从金字塔的图像中获取特征点时为每一个特征点计算了描述子 //现在看看如何计算一个空间的地图点的描述子 void MapPoint::ComputeDistinctiveDescriptors() {// Retrieve all observed descriptorsvector<cv::Mat> vDescriptors;//获取到某一个地图点可以被哪些关…

HDU:4185-Oil Skimming

Oil Skimming Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description Thanks to a certain “green” resources company, there is a new profitable industry of oil skimming. There are large slicks of crude oil floa…

域控制器情况分析

域控制器情况分析 1、Windows Server 的 Foundation、Standard、Enterprise 以及 Datacenter 版本号既可作为源server&#xff0c;也可作为目标server。仅支持将 Foundation Server 版本号作为受限方案中的目标server。在使用 Foundation Server 作为目标server之前&#xff0c…

Linux基础命令---su

su临时切换身份到另外一个用户&#xff0c;使用su切换用户之后&#xff0c;不会改变当前的工作目录&#xff0c;但是会改变一些环境变量。此命令的适用范围&#xff1a;RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法su [选项] [参数]2、选项列表--help显示…

在Ubuntu 16.04 上安装和卸载matlab 2018b(Install and uninstall matlab 2018b on ubuntu)

1.安装2018b可以参考下面两篇文章 https://www.ph0en1x.space/2018/04/23/ubuntu_matlab/ https://blog.csdn.net/qq_32892383/article/details/79670871 2.卸载2018b 我的默认安装在 /usr/local/MATLAB $ sudo rm -r /usr/local/MATLAB $ cd ~ $ ll (这个时候可以看到隐…

04.openssl编程——哈希表

4.1 哈希表在一般的数据结构如线性表和树中&#xff0c;记录在结构中的相对位置与记录的关键字之间不存在确定的关系&#xff0c;在结构中查找记录时需要进行一系列的关键字比较。这一类查找方法建立在比较的基础上&#xff0c;查找的效率与比较次数密切相关。理想的情况是能…

shell数组中“和@的妙用

#!/bin/bashlist(4k"8k a bit""16k abc""32k gold"64k)for i in "${list[]}"do echo $idone 分别对比一下不带” 和换成*&#xff0c;之间的区别。转载于:https://www.cnblogs.com/zjd2626/p/7041341.html

「JupyterLab」 Jupyter Notebook 新生代IDE模式页面

参考&#xff1a;Overview 安装&#xff1a; $ pip install jupyterlab 启动&#xff08;不是jupyter notebook&#xff09;&#xff1a; $ jupyter lab Jupyterlab中最好用的就是显示csv数据。CSV数据显示效果&#xff1a; 安装插件 jupyterlab是和jupyter notebook隔离的&…

undefined reference to 'pthread_create'

刚在Ubuntu16.04 上用Clion写一个"单生产者-单消费者"的线程的程序&#xff0c;源程序可以参考下面的网址 https://www.cnblogs.com/haippy/p/3252092.html 在编译的时候编译器给的提示是&#xff1a; undefined reference to pthread_create 解决办法就是在CMake…

windows下安装vundle

windows下安装vundle ## 前言 windows下安装vundle和linux下稍微有些不一样&#xff0c;虽然官网给出了 安装说明&#xff0c;但是有些问题的。E117: Unknown function: vundle#begin ## 安装步骤 参考官方文档即可vundle ## 问题处理 修改_vimrc配置文件内容&#xff0c;这是正…

深度学习框架不能“包治百病”,开发者如何选出最适合自己的?

随着深度学习关注度和势头上升&#xff0c;深度学习被越来越多的企业和组织的生产实践结合起来。这时&#xff0c;无论是对于深度学习相关专业的初学者&#xff0c;还是已经在企业和组织中从事工业场景应用和研发的开发者来说&#xff0c;选择一个适合自己&#xff0c;适合业务…

Linux+CLion+cmake 动态链接库的使用

在作《剑指offer》中的单向链表的题目时&#xff0c;需要一些常用到的操作链表的函数放在一个文件下&#xff0c;我想把这些函数的声明都写在list.h文件中&#xff0c;把这些函数的定义都写在list.cpp文件中&#xff0c;这样就可以在测试文件test.cpp中调用list.cpp中定义的函数…

PAT(乙级)1009

1009. 说反话 (20)给定一句英语&#xff0c;要求你编写程序&#xff0c;将句中所有单词的顺序颠倒输出。 输入格式&#xff1a;测试输入包含一个测试用例&#xff0c;在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成&#xff0c;其中单词是由英文字母&…

库存扣减问题

2019独角兽企业重金招聘Python工程师标准>>> 并发减库存 并发扣库存问题总结 库存扣减还有这么多方案&#xff1f; | 架构师之路 转载于:https://my.oschina.net/u/2939155/blog/3004363

HSRPSTPACL

1 HSRP配置 1.1 问题 在企业网络到外部的连接方案中&#xff0c;要求不高的条件下可以是单出口。一旦该出口线路出现问题&#xff0c;整个企业网络就不能连接到外网了。为了使得企业网络到外网连接的高可用性&#xff0c;可以设置两个以上的出口&#xff0c;然而多个出口对…

java 的 CopyOnWriteArrayList类

初识CopyOnWriteArrayList 第一次见到CopyOnWriteArrayList&#xff0c;是在研究JDBC的时候&#xff0c;每一个数据库的Driver都是维护在一个CopyOnWriteArrayList中的&#xff0c;为了证明这一点&#xff0c;贴两段代码&#xff0c;第一段在com.mysql.jdbc.Driver下&#xff0…

科技的趋势!AI将进军了37%的企业

2019独角兽企业重金招聘Python工程师标准>>> 市场研究机构Gartner调查了全球89个国家的逾3,000名信息长&#xff08;CIO&#xff09;&#xff0c;显示有37%的企业已经或打算于近期内部署人工智能&#xff08;AI&#xff09;&#xff0c;在4年内成长270%。Gartner研究…

CMakeLists.txt编写规则

在PROJECT_SOURCE_DIR下新建了src, include, lib, bin四个子文件夹。 src文件夹用来存放所有的.cpp文件&#xff0c;include文件夹用来存储所有的.h文件&#xff0c; lib中存放生成的自己编写的共享库&#xff0c; bin中存放所有的可执行文件 用SET来设置.exe可执行文件和共享…