cv::KeyPoint中response的介绍
1. Opencv中的KeyPoint类介绍
KeyPoint类的构造函数如下:
KeyPoint();
KeyPoint(Point2f _pt, float _size, float _angle=-1, float _response=0, int _octave=0, int _class_id=-1);
KeyPoint(float x, float y, float _size, float _angle=-1, float _response=0, int _octave=0, int _class_id=-1);
主要用来存储找到的特征点, 其包含的信息为, 特征点的坐标(包括横坐标x, 纵坐标y), 特征点的尺寸,或者也叫尺度, 特征点的角度或者朝向, 特征点的响应, 以及对应的层级; 这里重点说一下尺度, 响应,和层级;
- 特征点的尺度scale,或尺寸size
主要与特征点提取时算子的窗口大小有关; 比如SURF特征提取时 ,如果使用的是11*11的Hessian Operator, 那么这个特征点对应的size就是11/2, 也就是half the length of the approximated Hessian operator;
或者再以FAST特征为例, 在FAST特征的实际提取过程中,opencv的源码如下:
keypoints.push_back(KeyPoint((float)j, (float)(i-1), 7.f, -1, (float)score));
也就是最后返回的特征点们 对应的size都固定为7.f; 猜想这里的特征提取的patch默认为7;
但是在ORBSLAM中在提取特征完成之后,有下面的操作:
const int nkps = keypoints.size();
for (int i = 0; i < nkps; i++) {keypoints[i].pt.x += minBorderX;keypoints[i].pt.y += minBorderY;keypoints[i].octave = level;keypoints[i].size = scaledPatchSize;
}
每个特征点的size设置为'''PATCH_SIZE*mScaleFactor[level]''', 也就是如果该特征点在原图层,即金字塔的第0层被提取, 那么其size为PatchSize = 31, 但是如果在金字塔的第一层为PatchSIze*1.2 = 30*1.2 =36; 个人感觉, 每个特征的默认模式不同, 好在这个size在后续的代码中也没有进一步使用;
- 特征点的层级octave
这个在特征中很好理解, 该数字代表了其所属的金字塔层级, 原图像中提取的特征点octave为0, 第一层octave为1; 以此类推. 这个值用于在面获取该点的置信度;
2. 特征点的响应 response
response具体指代什么, opencv的官网解释如下:
Response: keypoint detector response on the keypoint (that is, strength of the keypoint)
翻译来讲, 就是特征点检测器 在该特征点的 响应; 比较模糊, 这里想以moravec角点检测来说一说响应response, 有不对的地方还欢迎指正; 之所以以moravec为例是因为个人觉得这个特征提供了一个最基础的模板, 且很好理解; 关于moravec特征点的讲解可以参考 这里;
以下面的图像区域, 举例来说3x3窗口的角点检测步骤:
绿色的窗口为原窗口, 中心点即为(x,y) , 这里I(x,y) = 51; 角点检测的本质为检测像素的变化; 对于Harris角点, 最基本的计算点的兴趣值的公式为:
其中为窗口函数, 为坐标(x,y)处的像素值; 则表示了图像的变化程度;
Moravec角点在计算时, 需要计算四个方向, 也就是该点在0度方向, 45度方向, 90度方向,和135度方向, 这个四个方向的图像变化程度;
对应需要计算的值即为 , , , ;
最终的响应函数为
个人理解对应到response的值,也就是该R函数计算出来的值, 如果这个值大于一个阈值, 那么这个点便可以称作为特征点, 表示四个方向变化都很剧烈, 称之为角点;
3. Harri角点简单介绍response;
Harri角点在Moravec角点的基础上, 修改了原本的窗口函数, 角点检测函数, 以及最后的响应函数;
想要进一步了解FAST角点的response的,可以参考 这里, 对opencv中FAST角点提取做了比较详细的解释, 关键步骤在CornerScore() 函数中, 当前点的得分, 最为特征点的响应值;
参考:
SO上的提问及回答
cv::KeyPoint中response的介绍相关推荐
- 【OpenCV3】cv::Mat中的数据按行列写入txt文件中
在使用opencv进行图像处理的过程中,经常会涉及到将文件中的数据读入到cv::Mat中,或者将cv::Mat中的数据写入到txt文件中. 下面就介绍一种我常用的将cv::Mat中的数据写入到txt文 ...
- 【OpenCV3】cv::Mat中最值和均值的求解
我们知道cv::Mat是OpenCV2和OpenCV3中最基本的数据结构,不仅可以作为图像数据的容器,也可以作为其他类型数据的容器.那么,我们在使用cv::Mat进行数据的处理时,会经常面临求解其最值 ...
- Opencv中的ROI介绍
Opencv中的ROI介绍 (2013-03-27 13:36:26) 转载▼ 分类: 模式识别 ROI(Region of Interest)是指图像中的一个矩形区域,可能你后续 ...
- java中Cookie详细介绍
Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是 ...
- Action 中 Response already committed 解决办法
2019独角兽企业重金招聘Python工程师标准>>> 在一个roundtrip中response只能被发出一次,在一些验证码.文件下载中通过httpServletResponse. ...
- HTML中Css详细介绍
HTML中Css详细介绍 一.样式表的作用 1.Css样式表,层叠样式表 2.类似于人类的衣服,网页的衣服 3.作用:美化网页 4.优势: 1.内容与表现分离,便于维护 2.样式丰富,页面布局灵活 3 ...
- Linux下使用ls查看文件颜色全部为白色的解决方法,以及Linux中文件颜色介绍
1 解决ls查看文件爱呢颜色为白色 方法一: 1.修改~/.bashrc文件,添加如下内容 alias ls='ls --color=auto' 2.source一下,让修改配置生效 source ~ ...
- 【opencv】4.初始化Mat的方式、访问cv::Mat中的某个元素
可以参考:https://www.cnblogs.com/guoben/p/12728390.html 方法1: cv::Mat img_1 = cv::Mat::zeros(cv::Size(col ...
- TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别
TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...
最新文章
- Go 知识点(18)— 条件编译(编译标签、文件后缀)
- vue中利用scss实现整体换肤和字体大小设置
- java spring框架 注解_详解Java的Spring框架中的注解的用法
- arthas 查看哪个方法调用最耗时_Arthas实战
- [网络安全提高篇] 一〇二.Metasploit技术之基础用法万字详解及防御机理
- 【一起去大厂系列】深入理解MySQL中where 1 = 1的用处
- 七个重要习惯——读《高效能人士的七个习惯》整理
- CCF202009-2 风险人群筛查
- 科学计算机怎么编程游戏,官泄 可编程科学计算器开发游戏
- 未来教育计算机二级答案19,2019年3月计算机二级MSOffice提分试题及答案019
- mysql 数据表中查找重复记录(条数)
- Java入门教程笔记07(面向对象基础)
- php数组函数array flip,PHP array_flip() 函数
- 【机器视觉】工业传统视觉和3D视觉算法
- 嵌入式开发入门之经典 ARM开发板
- 使用gitlab ci构建IOS包并发送通知消息到企业微信
- 【JY】基于性能的抗震设计浅析(二)
- 如何离线安装python包
- 信号完整性研究:什么是地弹
- stm32f105rct6 使用ADC1 的 PC0、PC1、PC2、PC3、PC4通道 测电压