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的介绍相关推荐

  1. 【OpenCV3】cv::Mat中的数据按行列写入txt文件中

    在使用opencv进行图像处理的过程中,经常会涉及到将文件中的数据读入到cv::Mat中,或者将cv::Mat中的数据写入到txt文件中. 下面就介绍一种我常用的将cv::Mat中的数据写入到txt文 ...

  2. 【OpenCV3】cv::Mat中最值和均值的求解

    我们知道cv::Mat是OpenCV2和OpenCV3中最基本的数据结构,不仅可以作为图像数据的容器,也可以作为其他类型数据的容器.那么,我们在使用cv::Mat进行数据的处理时,会经常面临求解其最值 ...

  3. Opencv中的ROI介绍

    Opencv中的ROI介绍 (2013-03-27 13:36:26) 转载▼   分类: 模式识别         ROI(Region of Interest)是指图像中的一个矩形区域,可能你后续 ...

  4. java中Cookie详细介绍

    Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是 ...

  5. Action 中 Response already committed 解决办法

    2019独角兽企业重金招聘Python工程师标准>>> 在一个roundtrip中response只能被发出一次,在一些验证码.文件下载中通过httpServletResponse. ...

  6. HTML中Css详细介绍

    HTML中Css详细介绍 一.样式表的作用 1.Css样式表,层叠样式表 2.类似于人类的衣服,网页的衣服 3.作用:美化网页 4.优势: 1.内容与表现分离,便于维护 2.样式丰富,页面布局灵活 3 ...

  7. Linux下使用ls查看文件颜色全部为白色的解决方法,以及Linux中文件颜色介绍

    1 解决ls查看文件爱呢颜色为白色 方法一: 1.修改~/.bashrc文件,添加如下内容 alias ls='ls --color=auto' 2.source一下,让修改配置生效 source ~ ...

  8. 【opencv】4.初始化Mat的方式、访问cv::Mat中的某个元素

    可以参考:https://www.cnblogs.com/guoben/p/12728390.html 方法1: cv::Mat img_1 = cv::Mat::zeros(cv::Size(col ...

  9. TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别

    TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...

最新文章

  1. Go 知识点(18)— 条件编译(编译标签、文件后缀)
  2. vue中利用scss实现整体换肤和字体大小设置
  3. java spring框架 注解_详解Java的Spring框架中的注解的用法
  4. arthas 查看哪个方法调用最耗时_Arthas实战
  5. [网络安全提高篇] 一〇二.Metasploit技术之基础用法万字详解及防御机理
  6. 【一起去大厂系列】深入理解MySQL中where 1 = 1的用处
  7. 七个重要习惯——读《高效能人士的七个习惯》整理
  8. CCF202009-2 风险人群筛查
  9. 科学计算机怎么编程游戏,官泄 可编程科学计算器开发游戏
  10. 未来教育计算机二级答案19,2019年3月计算机二级MSOffice提分试题及答案019
  11. mysql 数据表中查找重复记录(条数)
  12. Java入门教程笔记07(面向对象基础)
  13. php数组函数array flip,PHP array_flip() 函数
  14. 【机器视觉】工业传统视觉和3D视觉算法
  15. 嵌入式开发入门之经典 ARM开发板
  16. 使用gitlab ci构建IOS包并发送通知消息到企业微信
  17. 【JY】基于性能的抗震设计浅析(二)
  18. 如何离线安装python包
  19. 信号完整性研究:什么是地弹
  20. stm32f105rct6 使用ADC1 的 PC0、PC1、PC2、PC3、PC4通道 测电压

热门文章

  1. 玲珑杯round11-E:萌萌哒的第五题
  2. 1_Small Data Challenges in Big Data Era
  3. 多维数组-创建多维数组
  4. Digilent提供的Pmod AD1驱动程序
  5. vivado2018.3添加IP库
  6. Codeforces 1043F(容斥+dp)
  7. Python攻克之路-xml模块
  8. 使用C++实现二叉搜索树的数据结构
  9. linux下 mysql主从备份
  10. Java Socket文件上传