图像的特征点描述与提取

news2025/4/21 4:48:46

一、说明

        特征点算法是图像处理中主要算法之一,它是图像物体匹配的关键步骤,因此,是个极其重要的题目,至今依旧研究不断,本篇讲述历年来学者在领域研究的突出贡献,即六种不同的特征点提取办法,供学习者参考学习。

内容

1 FAST(加速分段测试的特点)

2.BRIEF (二元鲁棒独立基本特征)

3. SIFT(尺度不变特征变换)

4. SURF(加速鲁棒功能)

5. ORB(快速定向和旋转BRIEF)

二、FAST(加速分段测试的特点)

        FAST 是一种用于识别图像中兴趣点的算法。兴趣点具有较高的局部信息内容,并且它们应该在不同图像之间理想地可重复。FAST 算法工作背后的原因是开发一种兴趣点检测器,用于实时帧速率应用(例如移动机器人上的 SLAM),这些应用的计算资源有限。

算法如下:

  • 在强度 IP 的图像中选择像素“p”。这是要被识别为兴趣点或不是兴趣点的像素。
  • 设置阈值强度值 T。
  • 考虑围绕像素 p 的 16 个像素的圆。
  • 如果需要将像素检测为兴趣点,则 16 个像素中的“N”个连续像素需要高于或低于 IP 值 T。
  • 为了使算法更快,首先将圆的像素1、5、9和13的强度与IP进行比较。从上图可以看出,这四个像素中至少有三个满足阈值标准,兴趣点才会存在。
  • 如果四个像素值中的至少三个——I1、I5、I9、I13不高于或低于IP+T,则P不是兴趣点(角点)。在这种情况下,我们拒绝将像素 p 作为可能的兴趣点。否则,如果至少有 3 个像素高于或低于 Ip + T,则检查所有 16 个像素。
  • 对图像中的所有像素重复该过程。

机器学习方法

  • 选择一组图像进行训练,运行FAST算法检测兴趣点

  • 对于每个像素“p”,将其周围的 16 个像素存储为向量,并对所有像素重复此操作
  • 现在这是向量 P,其中包含用于训练的所有数据。
  • 向量中的每个值可以采用三种状态。比 p 深、比 p 浅或与 p 相似。
  • 根据状态,整个向量 P 将被细分为三个子集:Pd、Ps、Pb。
  • 定义一个变量 Kp,如果 p 是兴趣点,则为 true;如果 p 不是兴趣点,则为 false。
  • 使用 ID3 算法(决策树分类器)使用变量 Kp 查询每个子集,以获得有关真实类别的知识。
  • ID3算法的工作原理是熵最小化。以这样的方式查询 16 个像素,即以最少的查询次数找到真正的类别(是否感兴趣点)。或者换句话说,选择具有最多像素信息的像素x

  • 将此熵最小化递归地应用于所有三个子集。
  • 当子集的熵为零时终止该过程。
  • 决策树学习到的这种查询顺序也可以用于其他图像中的更快检测。

用于移除相邻角点的非极大值抑制

        检测彼此相邻的多个兴趣点是该算法初始版本的其他问题之一。这可以通过在检测兴趣点后应用非极大值抑制来解决。我们为每个检测到的点计算一个得分函数 V。得分函数定义为:“连续弧内的像素与中心像素之间的绝对差之和”。我们比较两个相邻的值并丢弃较低的值。

三、Brief(二元鲁棒独立基本特征)

        Brief提供了一种直接查找二进制字符串而不需要查找描述符的快捷方式。它采用平滑的图像块并以独特的方式选择一组 n𝒹(x,y) 位置对(在论文中进行了解释)。然后对这些位置对进行一些像素强度比较。例如,令第一位置对为p和q。如果 I(p) <I(q) ,则其结果为 1,否则为 0。这适用于所有 n𝒹 位置对,以获得 n𝒹 维位串。这个n𝒹可以是128、256或512。所以一旦我们得到这个,我们就可以使用汉明距离来匹配这些描述符。

OpenCV 简介

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('simple.jpg',0)

# Initiate STAR detector
star = cv2.FeatureDetector_create("STAR")

# Initiate BRIEF extractor
brief = cv2.DescriptorExtractor_create("BRIEF")

# find the keypoints with STAR
kp = star.detect(img,None)

# compute the descriptors with BRIEF
kp, des = brief.compute(img, kp)

print brief.getInt('bytes')
print des.shape

四、SIFT(尺度不变特征变换)

        它是一种用于检测图像中显着、稳定的特征点的技术。对于每个这样的点,它提供一组对旋转和缩放不变的特征。

SIFT算法有四个步骤:

•确定显着特征点(也称为关键点)的大致位置和规模

•完善其位置和规模

•确定每个关键点的方向。

•确定每个关键点的描述符。

4.1 大概位置

        SIFT 算法使用高斯差分,它是 LoG 的近似值。这个过程是针对高斯金字塔中图像的不同八度音程完成的。一旦找到这个 DoG,就会在图像上搜索尺度和空间上的局部极值。它基本上意味着关键点在该比例中得到了最好的体现。

        关键点定位

        一旦找到潜在的关键点位置,就必须对其进行细化以获得更准确的结果。他们使用尺度空间的泰勒级数展开来获得更准确的极值位置,如果该极值处的强度小于阈值(论文中为 0.03),则将其拒绝。这个阈值在OpenCV中称为contrastThreshold

        DoG对边缘的响应较高,因此也需要去除边缘。为此,使用了类似于 Harris 角点检测器的概念。他们使用 2x2 Hessian 矩阵 (H) 来计算主曲率。所以这里我们使用一个简单的函数:如果这个比率大于阈值,则该关键点被丢弃。因此,它消除了任何低对比度关键点和边缘关键点,剩下的是强烈兴趣点。

        指定方向

        现在,为每个关键点分配一个方向,以实现图像旋转的不变性。根据比例在关键点位置周围获取邻域,并计算该区域中的梯度大小和方向。创建包含 36 个箱、覆盖 360 度的方向直方图。它通过梯度幅值和高斯加权圆形窗口进行加权,其中 σ 等于关键点尺度的 1.5 倍。取直方图中的最高峰值,并且任何高于 80% 的峰值也被视为计算方向。它创建具有相同位置和比例但方向不同的关键点。它有助于匹配的稳定性。

        每个关键点的描述符

        现在关键点描述符已创建。选取关键点周围的 16x16 邻域。它被分为 16 个 4x4 大小的子块。对于每个子块,都会创建一个 8 bin 方向直方图。它被表示为向量以形成关键点描述符。除此之外,还采取了多种措施来实现对光照变化、旋转等的鲁棒性。

4.2 应用:匹配SIFT描述符

        通过识别最近的邻居来匹配两个图像之间的关键点。但在某些情况下,第二个最接近的匹配可能非常接近第一个。这可能是由于噪音或其他原因造成的。在这种情况下,将采用最近距离与次近距离的比率。如果大于0.8,则被拒绝。它消除了大约 90% 的错误匹配,而仅丢弃 5% 的正确匹配。

SIFT 用于创建全景视图

OpenCV 中的 SIFT

import cv2
import numpy as np

img = cv2.imread('home.jpg')
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

sift = cv2.SIFT()
kp = sift.detect(gray,None)

img=cv2.drawKeypoints(gray,kp)

cv2.imwrite('sift_keypoints.jpg',img)

五、SURF(加速鲁棒功能)

        获取SURF描述符有两个阶段,首先检测SURF点,然后提取SURF点处的描述符。SURF点的检测利用尺度空间理论。为了检测 SURF 点,使用 Fast-Hessian 矩阵。Hessian矩阵的行列式用于决定一个点是否可以被选为兴趣点。在图像 I 中,点 X 处的 Hessian 矩阵定义为:

        在与图像进行卷积之前需要对高斯二阶导数进行离散化。Dxx 、 Dyy 和 Dxy 表示盒式滤波器与图像的卷积。这些近似二阶高斯导数计算可以通过使用积分图像来快速完成。

        通过改变盒式滤波器的大小来分析图像的尺度空间。一般来说,盒式滤波器以默认大小 9x9 开始,对应于 σ= 1.2 的高斯导数。滤波器尺寸随后放大至 15x15、21x21、27x27 等尺寸。在每个尺寸下计算 Hessian 矩阵的近似行列式,并应用 333 个邻域中的非极大值抑制来查找最大值。SURF点的位置和尺度s是通过最大值获得的。

        使用哈尔小波响应指定获得的 SURF 点的方向。在SURF点附近,即半径6s内,在x和y方向上计算Haar小波响应。使用这些响应,可以确定主导方向。在主导方向上,构造一个以 SURF 点为中心、大小为 20s 的正方形。这分为 44 个子区域。在每个子区域中,在 55 个规则放置的样本点处计算水平和垂直 Haar 小波响应 dx 和 dy。这些响应在特定区间内求和,得到 Σdx 、 Σdy 。此外,这些响应的绝对值在特定区间内求和,得出 Σ|dx| ,Σ|dy|。使用这些值,为每个子区域构建 4 维特征向量 V = (Σdx , Σdy, Σ|dx| , Σ|dy|)。因此,每个提取的 SURF 点都与一个 4x(4x4) 描述符相关联,这是一个 64 维描述符。该64维描述符用于执行匹配操作。

六、 ORB(快速定向和旋转BRIEF)

        ORB 基本上是 FAST 关键点检测器和 Brief 描述符的融合,并进行了许多修改以增强性能。首先它使用 FAST 来查找关键点,然后应用 Harris 角点度量来查找其中的前 N ​​个点。它还使用金字塔来生成多尺度特征。

ORB算法:

        它计算角位于中心的补丁的强度加权质心。从该角点到质心的矢量方向给出了方向。为了提高旋转不变性,用 x 和 y 计算矩,它们应该位于半径为 r 的圆形区域中,其中 r 是面片的大小。现在对于描述符,ORB 使用 Brief 描述符。BRIEF 是旋转不变的,因此 ORB 根据关键点的方向来控制 Brief。对于位置 xᵢ,yᵢ 处的 n 个二进制测试的任何特征集,定义一个 2 xn 矩阵 S,其中包含这些像素的坐标。然后使用面片的方向 θ ,找到其旋转矩阵并旋转 S 以获得转向(旋转)版本 Sθ 。

        由于旋转不变,BRIEF 变得更加分布式。ORB 在所有可能的二元测试中运行贪心搜索,以找到方差高且均值接近 0.5 并且不相关的测试。结果称为rBRIEF。对于描述符匹配,使用了对传统 LSH 进行改进的多探针 LSH。

OpenCV 中的 ORB:

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('simple.jpg',0)

# Initiate STAR detector
orb = cv2.ORB()

# find the keypoints with ORB
kp = orb.detect(img,None)

# compute the descriptors with ORB
kp, des = orb.compute(img, kp)

# draw only keypoints location,not size and orientation
img2 = cv2.drawKeypoints(img,kp,color=(0,255,0), flags=0)
plt.imshow(img2),plt.show()

使用 ORB 进行图像匹配 

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

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

相关文章

Python------学生管理(文件txt处理)

项目&#xff1a;Python实现学生管理系统 注&#xff1a;免费源码下载 项目介绍&#xff1a; 功能描述&#xff1a;&#xff08;1&#xff09;添加学生信息&#xff08;2&#xff09;删除学生信息&#xff08;3&#xff09;修改学生信息&#xff08;4&#xff09;查询学生信息…

JVM(Java Virtual Machine)G1收集器篇

前言 本文参考《深入理解Java虚拟机》&#xff0c;本文主要介绍G1收集器的收集思想和具体过程&#xff08;填上一篇文章留下的坑&#xff09; 本系列其他文章链接&#xff1a; JVM&#xff08;Java Virtual Machine&#xff09;内存模型篇 JVM&#xff08;Java Virtual Machi…

绿米Aqara S1【妙控开关 S1E】的破解方法---续篇

概述 上接第一篇《绿米Aqara S1【妙控开关 S1E】的破解方法》。 链接地址如下: 绿米Aqara S1【妙控开关 S1E】的破解方法-CSDN博客 上篇主要讲述了,绿米S1E这款硬件的基本组成及TTL线的线序,并获取到了对应的串口打印信息。 此篇重点讲解,如何进入其系统,并开启访问权…

【经验分享】在WSL中使用USB设备

具体步骤&#xff1a; 首先在windows中安装 USBIP 工具&#xff0c;在GitHub上下载安装包并根据README文档的说明进行操作&#xff1a; 下载链接&#xff1a;https://github.com/dorssel/usbipd-win/releases 同时在 WSL Linux 端也需要安装编译内核所需的库和工具&#xff0c…

【微信小程序】实现投票功能(附源码)

一、Vant Weapp介绍 Vant Weapp 是一个基于微信小程序的组件库&#xff0c;它提供了丰富的 UI 组件和交互功能&#xff0c;能够帮助开发者快速构建出现代化的小程序应用。Vant Weapp 的设计理念注重简洁、易用和高效&#xff0c;同时提供灵活的定制化选项&#xff0c;以满足开发…

电动汽车租赁平台【EV Mobility】申请875万美元纳斯达克IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于美国的电动汽车租赁平台【EV Mobility】近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯达克IPO上市&#xff0c;股票代码为(EVMO) &#xff0c…

举个栗子!Quick BI 技巧(3):创建趋势分析表

上一期举个栗子为数据粉们分享了如何简单几步创建柱线图&#xff0c;有一些数据想了解如何在 Quick BI 中制作趋势分析表。 趋势分析表由趋势分析图和趋势分析明细表组成&#xff0c;可以通过趋势分析图查看指标的宏观趋势&#xff0c;通过趋势分析表查看指标详情&#xff0c;…

macOS Sonoma 14.1正式版(23B74)发布(可下载黑白苹果镜像)

系统介绍 黑果魏叔苹果今天为 macOS Sonoma 推出了 14.1 版本更新&#xff0c;魏叔发现&#xff0c;本更新主要改善了 Apple Music 界面&#xff0c;设置中新增保修状态&#xff0c;并修复了多项错误内容。 根据苹果的新说明&#xff0c;这次的 Mac 更新不仅提供了一系列的改善…

博睿数据亮相GOPS全球运维大会上海站!

10月26日&#xff0c;博睿数据携核心产品新一代一体化智能可观测平台 Bonree ONE 亮相第二十一届 GOPS 全球运维大会上海站&#xff0c;展示博睿数据在智能运维领域的科技实力与创新成果。同时&#xff0c;博睿数据AIOps首席专家兼产品总监贺安辉在AIOps最佳实践及解决方案专场…

User CSS 在性能优化方面的实践

目录 前言 1. 减少重绘和回流 1.1 用法 1.2 代码示例 1.3 理解 2. 使用CSS精灵 2.1 用法 2.2 代码示例 2.3 理解 3. 压缩CSS文件 3.1 用法 3.2 代码示例 3.3 理解 4. 使用媒体查询进行响应式设计 4.1 用法 4.2 代码示例 4.3 理解 5. 使用CSS预处理器和构建工…

物联网AI MicroPython传感器学习 之 MDL0025心率传感器

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 PulseSensor&#xff08;MDL0025&#xff09; 是一款用于脉搏心率测量的光电反射式模拟传感器。将其佩戴于手指或耳垂等处&#xff0c;通过导线连接可将采集到的模拟信号传输给HaaS开发版用来转…

[java进阶]——HashMap的底层实现原理和源码分析,另附几个高频面试题

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 一、底层数据结构 二、底层原理及源码分析 2.1 继承关系 2.2 成员变量 2.3 构造方法 2.4 重要的成员方法 2.4.1 put()方法 三、高频面试题 一、底层数据结构 JDK8以后底层使用 数组链表红黑树的数据结构&am…

贝锐花生壳内网穿透推出全新功能,远程业务连接更安全

贝锐旗下内网穿透兼动态域名解析品牌花生壳目前推出了全新的“访问控制”功能&#xff0c;可精确设置访问权限&#xff0c;充分保障信息安全&#xff0c;满足更多用户安全远程访问内网服务的需求。 通过这一功能&#xff0c;可实现指定时间、IP、地区等条件下才能远程访问映射的…

【C++】继承 ⑬ ( 虚继承原理 | 虚继承解决继承二义性问题 | 二义性产生的原因分析 )

文章目录 一、虚继承原理1、虚继承解决继承二义性问题2、二义性产生的原因分析3、虚继承原理 二、代码示例 - 虚继承原理1、完整代码示例2、执行结果 一、虚继承原理 1、虚继承解决继承二义性问题 继承的二义性 : 如果 一个 子类 ( 派生类 ) 继承多个 父类 ( 基类 ) , 这些父类…

【【萌新的FPGA学习之FIFO的介绍】】

萌新的FPGA学习之FIFO的介绍 FIFO first in first out FIFO 的作用更多的是 缓冲与缓存 或者FIFO 也常被用来使用为 FIFO 本质上是由 RAM 加读写控制逻辑构成的一种先进先出的数据缓冲器&#xff0c;其与普通存储器 RAM 的 区别在于 FIFO 没有外部读写地址线&#xff0c;使用起…

接口自动化测试方案

1、引言 1.1 文档版本 版本 作者 审批 备注 V1.0 XXXX 创建测试方案文档 1.2 项目情况 项目名称 XXX 项目版本 V1.0 项目经理 XX 测试人员 XXXXX&#xff0c;XXX 所属部门 XX 备注 1.3 文档目的 本文档主要用于指导XXX-YY项目常用接口自动化测试…

数据隐私保护与合规性:现代企业的数据安全策略

第一章&#xff1a;引言 在当今数字化时代&#xff0c;数据已经成为企业最宝贵的资源之一。然而&#xff0c;伴随着大规模数据收集和处理的增加&#xff0c;数据隐私保护和合规性问题也日益凸显。本文将深入探讨数据隐私保护和合规性对现代企业的重要性&#xff0c;并提供一些…

重大突破!国内首个ASIL D认证MCU在底盘域量产上车

中国本土车规级MCU再次实现了重要突破。 近日&#xff0c;芯驰科技的高性能车规MCU——E3搭载在明然科技悬架控制器&#xff08;CDC&#xff09;批量下线&#xff0c;并且成功在奇瑞瑞虎9、星途瑶光等车型上正式量产&#xff0c;成为了国内首个应用在主动悬架的车规控制芯片。…

行业追踪,2023-10-26

自动复盘 2023-10-26 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

干货很干:5个有效引流方法,让客户找上门

如何才能把用户引流到私域&#xff1f;是很多老板&#xff0c;店主&#xff0c;线上创业者的卡点&#xff0c;今天分享5个实用方法&#xff1a; ✅线下导流 ✅巧用搜索 ✅同行互推 ✅社群引流 ✅内容输出 所以引流不仅需要知道方法&#xff0c;还需要知道底层逻辑&#xff0c;也…