cv::KeyPoint中response的介绍

article/2025/9/10 8:46:04

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角点, 最基本的计算点的兴趣值的公式为:

                                                                               E(u,v) = \sum_{(x,y)}^{k} w(x,y) [I(x+u, y+v) - I(x,y)]^{2}

其中w(x,y)为窗口函数, I(x,y)为坐标(x,y)处的像素值; E(u,v)则表示了图像的变化程度;

Moravec角点在计算E(u,v)时, 需要计算四个方向, 也就是该点在0度方向, 45度方向, 90度方向,和135度方向, 这个四个方向的图像变化程度; 

对应需要计算的值即为 E(1,0)E(1,1)E(0,1)E(-1,1) ;

最终的响应函数为R(x,y) = min(E(1,0), E(1,1), E(0,1), E(-1,1))

个人理解对应到response的值,也就是该R函数计算出来的值, 如果这个值大于一个阈值, 那么这个点(x,y)便可以称作为特征点, 表示四个方向变化都很剧烈, 称之为角点;

3. Harri角点简单介绍response;

Harri角点在Moravec角点的基础上, 修改了原本的窗口函数w(x,y),  角点检测函数E(u,v), 以及最后的响应函数R(u,v);

想要进一步了解FAST角点的response的,可以参考 这里, 对opencv中FAST角点提取做了比较详细的解释, 关键步骤在CornerScore() 函数中, 当前点的得分, 最为特征点的响应值;

 

参考:

SO上的提问及回答


http://chatgpt.dhexx.cn/article/QgTcYkNh.shtml

相关文章

11种Anchor-free目标检测综述 -- Keypoint-based篇

点击上方“3D视觉工坊”&#xff0c;选择“星标” 干货第一时间送达 导读 anchor-free目标检测算法分为两种&#xff0c;一种是DenseBox为代表的Dense Prediction类型&#xff0c;另一种则是以CornerNet为代表的Keypoint-bsaed Detection类型&#xff0c;以检测目标关键点为主…

SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation

动机&#xff1a; in this paper that predicts a 3D bounding box for each detected object by combining a single keypoint estimate with regressed 3D variables. As a second contribution, we propose a multi-step disentangling approach for constructing the 3D b…

《PCL Docs 案例详解》KeyPoint——SIFT 关键点提取

SIFT 关键点提取 本节演示如何检测点云的SIFT 关键点。SIFT 即尺度不变特征变换&#xff08;Scale-invariant feature transform,SIFT) ,最初用于图像处理领域的一种描述。这种描述具有尺度不变性&#xff0c;可以在图像中检测出关键点&#xff0c;是一种局部特征描述。 完整…

OpenCV中KeyPoint类

https://blog.csdn.net/u010821666/article/details/52883580 Opencv中KeyPoint类中的默认构造函数如下&#xff1a; CV_WRAP KeyPoint() : pt(0,0), size(0), angle(-1), response(0), octave(0), class_id(-1) {} 现分析各项属性 pt(x,y):关键点的点坐标&#xff1b; si…

Anchor-free目标检测综述 -- Keypoint-based篇

早期目标检测研究以anchor-based为主&#xff0c;设定初始anchor&#xff0c;预测anchor的修正值&#xff0c;分为two-stage目标检测与one-stage目标检测&#xff0c;分别以Faster R-CNN和SSD作为代表。后来&#xff0c;有研究者觉得初始anchor的设定对准确率的影响很大&#x…

Opencv中特征点Keypoint的解读(特征点与坐标的相互转换)

Opencv中特征点Keypoint的解读 特征点的生成特征点到坐标的转换坐标到特征点的转换 在我们学习特征点检测时&#xff0c;使用特征点检测器&#xff0c;比如ORB和SIFT生成特征点(FAST和SURF好像已经申请专利&#xff0c;较新版本可能用不了)&#xff0c;通常生成的特征点形式是一…

COCO数据集Keypoint标注格式梳理和使用COCO-Annotator在自有数据集上进行标注

这里写自定义目录标题 COCO数据集Keypoint标注格式COCO数据集官网Keypoint Detection关键点检测统一数据格式Keypoint标注 使用COCO-Annotator标注自有数据集在Ubuntu 18.04上安装COCO-Annotator安装Docker和Docker-Compose安装COCO Annotator启动COCO Annotator使用COCO Annot…

OpenCV学习之KeyPoint

OpenCV中CV_EXPORTS类别KeyPoint与KeyPointsFilter头文件分析 用OpenCV一段时间了&#xff0c;说实话KeyPoint接触也算比较多&#xff0c;一直没有时间对其数据结构进行分析。今天打开源码对其keypoint.cpp文件进行简单分析一下&#xff1a;keypoint.cpp主要包含两个类KeyPoint…

ubuntu引导删除+win10引导修复

Windowsubuntu双系统&#xff0c;删除安装linux磁盘后没有删除其引导&#xff0c;删其引导的步骤为 使用快捷键winx&#xff0c;打开Windows PowerShell(管理员)(A)&#xff0c;依次输入如下命令&#xff1a; 打开diskpart diskpart 列出系统中所有的磁盘 list disk 选择…

win10+ubuntu18.04 双系统修复ubuntu启动引导

win10ubuntu18.04 双系统修复ubuntu启动引导 因为windows是不能引导linux的&#xff0c;而每次win10升级或恢复都会将linux的启动引导覆盖掉&#xff0c;导致无法进入linux, 所以一直就禁止了win10更新&#xff0e;这几天win10出了点小毛病&#xff0c;所以就狠下心来恢复了系…

ubuntu 双系统启动引导修复

1、 准备一个安装&#xff35;盘&#xff0c;插入电脑开机>选择U盘启动>选择试用Try ubuntu without install。 2、 进入系统后&#xff0c;用CtrlAltT快捷键打开终端&#xff0c;获取root权限&#xff0c;执行以下命令&#xff1a; sodu passwd sudo apt-get install s…

win10+ubuntu双系统,重装win10后修复ubuntu引导的方法

笔记本型号&#xff1a;联想拯救者Y7000P 2019版 操作系统&#xff1a;Windows 10Ubuntu 18.04 LTS 问题&#xff1a;重装系统后发现没办法进入到Ubuntu 解决办法&#xff1a; 首先&#xff0c;我们需要准备一个Ubuntu安装U盘&#xff0c;也就是我们之前进行Ubuntu系统安装…

Windows\Ubuntu修复UEFI引导

目录 1、修复Windows引导2、修复Ubuntu的引导 1、修复Windows引导 修复Windows的EFI引导需要使用到的工具为大白菜装机工具&#xff0c;官网是http://www.winbaicai.com/。使用大白菜制作好装机工具以后&#xff0c;重启选择U盘启动&#xff08;一定要选“UEFI&#xff1a;你的…

Ubuntu boot-repair系统修复引导

Ubuntu系统修复引导 笔记本上本来已经有了一个ubuntu和一个windows&#xff0c;但是那天作死&#xff0c;想要在移动固态硬盘上安装一个ubuntu&#xff0c;方便使用&#xff0c;结果装完了之后必须要将移动固态插在笔记本上&#xff0c;才能够正常引导。 上网查了半天&#xf…

ubuntu修复启动引导

1. 解决步骤&#xff1a; &#xff11;&#xff1a;准备一个安装&#xff35;盘&#xff0c;插入电脑&#xff0d;&#xff1e;开机&#xff0d;&#xff1e;选择试用Try ubuntu without install &#xff12;&#xff1a;打开终端(Open Terminal)&#xff0c;获取root权限…

双系统Ubuntu 引导修复(Boot Repair)

安装完双系统&#xff0c;如果在使用过程中不小心删除了Ubuntu引导向&#xff0c;则会导致开机后无法选择进入Ubuntu系统。或者当我们重装了windows系统后&#xff0c;也会发现原来的Ubuntu引导不见了&#xff0c;当出现这两种情况之一时&#xff0c;最好的解决办法不是重新把U…

Win10+Ubuntu双系统修复Ubuntu系统引导

这两天笔者安装win10ubuntu16.04双系统&#xff0c;因为网络上能找到大量的资料&#xff0c;安装过程此处就不多讲。因为笔者电脑是华硕主板&#xff0c;bios默认设置为安全启动&#xff0c;笔者猜测会阻止加载ubuntu引导&#xff0c;导致双系统不能随意引导。先不管那么多&…

Ubuntu20.04 引导修复(亲测有效)

我电脑装了win10Ubuntu20.04。 Ubuntu的引导因为某种原因被我删了。ESP分区下的文件夹也删除了。 然后就想着怎么把Ubuntu的引导给整回来。 在网上搜索大多有几种 1.通过boot-repair来修复&#xff0c;然而我试过还是不行&#xff0c;提示找不到esp分区&#xff0c;我明明有e…

ubuntu启动盘修复grub引导

提示&#xff1a;点击关注作者&#xff0c;以获取其他的最新消息推送。 文章目录 ubuntu启动盘修复grub引导1.准备1个清空的U盘做系统启动盘2.查找本机的启动选项3.进入Ubuntu试用系统并打开终端4.插入网线确保能够正常访问网络5.添加更新下载源6.安装boot-repair7.点击Recomme…

win+ubuntu系统引导修复

windowsubuntu系统引导修复 0 前言1 新建ESP分区并修复windows引导2 Ubuntu系统引导修复3 问题总结4 参考 0 前言 之前由于启动项中有一个多余的ubuntu引导&#xff0c;看着不顺眼想要删除&#xff0c;结果失败&#xff0c;最终格式化了整个EFI分区&#xff0c;导致win10和ubu…