OpenCV学习之KeyPoint

article/2025/9/10 13:11:57
OpenCV中CV_EXPORTS类别KeyPoint与KeyPointsFilter头文件分析

  用OpenCV一段时间了,说实话KeyPoint接触也算比较多,一直没有时间对其数据结构进行分析。今天打开源码对其keypoint.cpp文件进行简单分析一下:keypoint.cpp主要包含两个类KeyPoint与KeyPointsFilter。其中KeyPoint包含基础的功能函数:读写存储keypoint函数、KeyPoint与Point2f转换函数、计算keypoint点覆盖率函数。KeyPointsFilter类主要是针对KeyPoint数据矢量存储附加一些功能函数:比如runByImageBorder()移除keypoint处于图像边缘的情况等等,下面会逐一进行分析其每个功能函数。首先来看一下KeyPoint类的声明:

  其中KeyPoint存储类型已经在上面代码中进行简单注释,一般keypoint坐标属于必须存储参数,而class_id、response等其它属于非必须存在,如果没有保存值一般为-1。

再来看一下KeyPointsFilter类函数:

  KeyPointsFilter包含5个功能函数:分别为runByImageBorder()、runByKeyPointSzie()、runByPixelsMask()、removeDuplicated()、retainBest(),其每个函数主要功能已在注释中说明。

下面看一下源码实现KeyPoint::overlap()函数:

  overlap()函数主要计算keypoint矢量集中两个kp(点集)覆盖率为多少,其实就是计算两个特征点ovrl = 交集/并集。该函数可以用来进行特征点稳定评估、或者根据ovrl进行重复点判断也是可以的。基础IO接口功能read()与write()函数为静态函数只作用于该keypoint.cpp文件下:

  关于KeyPoint与Point2f功能结构矢量集转换模块已经在OpenCV学习之Data Structure Conversion写过,可以进行查看参考。

Ok,下面阅览一下KeyPointsFilter类附加的功能函数:

  根据KeyPoint存储的response响应值进行排序,retainBest()函数获取最佳的npoints个点。

  runByImageBorder()移除keypoints处于图像边缘的点,这里图像边缘指的是图像边界信息。将keypoint处于borderSize范围的点进行删除。

  KeyPoint检测到的size直径可能大小不一,设置[minSize maxSize]对其进行限制,超过范围的进行删除。好处在于大尺度下特征点在进行尺度归一化情况下会偏差较大(插值),同时尺度变化太大keypoints进行匹配难度较大。删除这些点集会提升提取keypoints点集的正确点占比率。

  根据输入mask矩阵来进行移除像素偏移超过0.5f的keypoints,主要应用在亚像素插值判断上面。

  KeyPointsFilter::removeDuplicate()函数主要移除keypoints距离相聚较近的情况下,一般尺度空间检测的keypoints在最后进行尺度归一化的时候,会出现大量的重复点(可能会有轻微坐标偏移)。这种情况下需要对位置很近的keypoints进行筛选,例如可以对其response进行排序来筛选等等。

小结

  今天简单总结一下keypoint.cpp下面的基础功能函数,其中许多函数貌似平常用到很少:比如runByImageSize()、retainBest()等等。其实,这些函数在SIFT、ORB源码下面都会有部分涉及。当然,平时我们使用最多的还是KeyPoint这个数据结构用来存储提取的特征信息。自己梳理一遍,清晰了不少!

  如有错误,还请指正,谢谢!

参考

OpenCV源码中Keypoint.cpp


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

相关文章

ubuntu引导删除+win10引导修复

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

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

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

ubuntu 双系统启动引导修复

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

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

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

Windows\Ubuntu修复UEFI引导

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

Ubuntu boot-repair系统修复引导

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

ubuntu修复启动引导

1. 解决步骤: 1:准备一个安装U盘,插入电脑->开机->选择试用Try ubuntu without install 2:打开终端(Open Terminal),获取root权限…

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

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

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

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

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

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

ubuntu启动盘修复grub引导

提示:点击关注作者,以获取其他的最新消息推送。 文章目录 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引导,看着不顺眼想要删除,结果失败,最终格式化了整个EFI分区,导致win10和ubu…

Ubuntu引导修复/Ubuntu的暴力安装方法

Linux操作系统拥有很多Windows系统所无法比拟的优势,并且深受专业人士的喜爱。在Linux的众多发行版中,Ubuntu是十分受欢迎一款。然而,很多朋友却因为无法正常安装Ubuntu而难以继续往下学习。当然我知道,装虚拟机是一个很不错的选择…

Ubuntu引导修复

转载自:https://blog.csdn.net/u012260238/article/details/52713724 安装完双系统,如果在使用过程中不小心删除了Ubuntu引导向,则会导致开机后无法选择进入Ubuntu系统。或者当我们重装了windows系统后,也会发现原来的Ubuntu引导不…

Ubuntu20.04.3引导修复(Boot Repair)

Ubuntu20.04引导修复(Boot Repair) 最近Ubuntu20.04时,出现了无法进入系统的问题。 第一时间用再生龙将系统盘备份,然后找一个新盘还原,发现还原后的硬盘是可以正常进入系统的。 现在对出问题的硬盘进行修复&#x…

修复ubuntu引导

1. 开机按F10或者向下箭头进入BIOS 2. 选择U盘引导,出现下面界面选择对应系统20.04 3.出现下面界面,选择try ubuntu 4. 出现下面界面,等待一段时间结束后进入ubuntu镜像系统 5. 打开终端,依次输入下面命令 sudo add-apt-reposit…

Ubuntu引导修复(Boot Repair)

第一步: 还是需要进入Ubuntu界面,但是并不需要安装(如果直接安装的话,以前在Ubuntu里面的文件可全部都没有了,所以万不得已,千万别这样做)。 如何进入Ubuntu界面呢,相信装过Ubuntu的…

多种ubuntu引导修复方法

引导异常 ubuntu经常由于各种原因导致系统引导异常,不能正常开机,不能进入到grub界面,或者不管选择任何一种内核和模式进入都出现error: attempt to read or write outside of disk hd0’错误。针对这个情况,我采取过两种方式。 …

Java设计模式之(十二)——观察者模式

1、什么是观察者模式? Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically. 观察者模式(Observer Design Pattern):在对象之间…

李喆:程序员到底怎么了

李喆:程序员到底怎么了 我们是这样的一群人:每天都在“努力”的工作着,每天都和计算机打交道,泡在网上,打游戏,查资料,发微博。可是有一天,突然意识到,我们的未来在哪里&…