计算机视觉基础(5)——特征点及其描述子

news2024/11/19 0:24:59

前言

本文我们将学习到特征点及其描述子。在特征点检测中,我们将学习角点检测和SIFT关键点检测器,角点检测以哈里斯角点检测器为例进行说明,SIFT将从高斯拉普拉斯算子和高斯差分算子展开。在描述子部分,我们将分别学习SIFT描述子和二进制描述子的概念、基本计算流程以及优劣评价,并给出实例进行说明。

一、特征点检测

首先,让我们来了解一下特征点的定义及其性质。

特征点:图像中具有独特局部性质的点。

特征点应用:

  • 图像对其配准
  • 3D重建
  • 运动跟踪
  • 机器人导航
  • 图像检索
  • ···

 特征点有如下性质:

  • 局部性:特征是局部的,对遮挡和混乱场景鲁棒
  • 数量:一幅图像中可以产生足够数量的特征点,比如成百上千
  • 独特性:可以和其他图像中大多数点相区分
  • 高效:能够进行实时的检测和比较
  • 可重复性:对图像进行旋转平移等操作后,仍能被检测到 

1.1  角点检测器

1.1.1  角点

角点的定义:在一个以角点为中心的局部窗口内沿着,任意方向移动都会给亮度带来显著变化

1.1.2  角点检测

某个以( 𝑥, 𝑦 ) 为中心的局部窗口𝑊经过(𝑢, 𝑣)的微小偏移后,窗口内部亮度发生的变化量,可以用SSD表示为:

 

【举例说明】

我们不妨设:

【水平方向边缘】

 【竖直方向边缘】

【重点:需要理解】

 【举例说明】

用二阶矩矩阵的特征值对图像中的点进行分类:

【举例说明】

1.1.3  哈里斯角点检测器

用Harris角点响应函数对图像中的点进行分类:

1.1.4  小结 

 【流程总结】

 【特点】

1.2  SIFT关键点检测器

基本思想:用一个突出区域滤波器(blob filter)对图像在多个尺度上进行卷积并在尺度空间寻找滤波器响应的极值

blob定义:图像等信号内出现”灰度突变”的区域

1.2.1  高斯拉普拉斯算子

Laplacian of Gaussian,LOG

定义:将拉普拉斯算子作用到高斯平滑过的图像上来检测Blob

拉普拉斯算子运算结果如图所示:

 接下来,我们对高斯拉普拉斯算子进行详细的分析:

通过对上图的分析,我们不难得到如下结论:在信号中blob尺度和LoG中高斯平滑尺度接近时,其响应最大。

但是拉普拉斯算子出现了如下问题:响应随着其LoG中高斯平滑尺度的增加而减小。如下所示:

解决方案是进行尺度归一化(Scale Normalization),即× 𝜎²。如下所示:

使用高斯拉普拉斯算子进行计算的实例如下:

1.2.2  高斯差分算子

Difference of Gaussian, DoG

高斯拉普拉斯算子(LoG)需要计算二阶导数,计算复杂度会比计算一阶高,因此考虑可以用一阶高斯差分来近似。由此引出高斯差分算子的概念:

高斯差分算子 (Difference of Gaussian, DoG)具有如下特点:

  1. 高斯模糊过的图像可以去除噪声的影响;
  2. 高斯差分操作可以只保留相邻层模糊水平之间的频率,即类似一种带通滤波;
  3. 可以突显图像中的角、边和其他细节;

使用高斯差分算子进行关键点检测的结果,展示如下:

二、特征描述子

在正式进入特征描述子的学习之前,我们需要知道什么样的特征描述子是好的、优秀的。

好的特征描述子应该具有如下性质:

  • 鲁棒性:对多种几何变换和光照变换具有一定的不变性
  • 独特性:一个区域的特征描述子和其他区域能很好的区分
  • 紧致性:仅用较低维的向量就可以对该特征进行鲁棒和独特的描述
  • 计算高效:可以快速的计算特征描述子并进行高效的比较

 常用的特征描述子如下:

  • HOG: Histogram of Oriented Gradients
  • SIFT: Scale Invariant Feature Transform
  • SURF: Speeded-Up Robust Features
  • GLOH: Gradient Location and Orientation Histogram
  • BRIEF: Binary Robust Independent Elementary Features
  • ORB: Oriented FAST and rotated BRIEF
  • BRISK: Binary Robust Invariant Scalable Keypoints
  • FREAK: Fast REtinA Keypoint 

2.1  SIFT描述子

2.1.1  概念

Scale-Invariant Feature Transform, SIFT

SIFT描述子是根据尺度空间中局部极值所在的位置和尺度,以及其所在的邻域范围内的梯度计算得到的一个向量。

2.1.2  SIFT基本计算流程 

1. 根据兴趣点的尺度和位置,在邻域计算36bin的梯度方向直方图,并选择其中最大计数的桶对应的方向作为描述子主方向

2. 根据描述子的主方向和兴趣点的尺度和位置,确定相应的16 × 16邻域并计算梯度,之后将梯度图划分成4×4个小块

 3. 对每个小块计算8bin的梯度方向直方图

 4. 把每个小块的梯度方向直方图都拼接起来,得到16 × 8 = 128 维的特征向量

2.1.3  举例说明

基本计算流程示例:

 两幅图像中SIFT兴趣点匹配:

兴趣匹配的原则:

2.2  二进制描述子

2.2.1  概念

二进制描述子:生成可以高效计算且易于比较的二进制串

比较两个二进制描述子的注意事项

  • 邻域内像素对要用同样的选择方式
  • 像素对的选择顺序也要保持一致

不同二进制描述子主要区别在于选择像素对的策略

2.2.2  Brief 描述子

Binary robust independent elementary features

2.2.3  ORB 描述子

对于其他的描述子,大家感兴趣的可以去网上查找资源自行进行学习噢~ 

总结

本文我们主要学习了特征点检测与特征描述子,为图像处理中的特征点检测和特征描述打下了坚实的基础。希望大家能将本文所有算法的流程熟悉一遍,然后能自己总结复述出来,最好结合公式进行推导。本章的重点在于哈里斯角点检测、SIFT关键点检测(高斯拉普拉斯算子和高斯差分算子),以及SIFT描述子和二进制描述子。

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

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

相关文章

49数码论坛系统设计与实现

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路…

浅析限流式保护器在低压配电系统中电气火灾的应用

安科瑞 华楠 【摘要】文章分析了低压配电系统短路的类型、原因及火灾危险性,并提出改善措施。 【关键词】:低压配电系统; 短路; 措施 0引言 随着人类进入现代文明社会,电气的普及深入千家万户,广泛应用于…

npm ERR! exited with error code: 128

1.遇到的问题 报错信息:npm ERR! E:\tools\Gitt\Git\cmd\git.EXE ls-remote -h -t https://github.com/nhn/raphael.git npm ERR! npm ERR! fatal: unable to access https://github.com/nhn/raphael.git/: OpenSSL SSL_read: Connection was reset, errno 10054 …

FPGA project : IIC_wr_eeprom

简介: 简单双向二线制,同步串行总线。 scl:串行时钟线,用于同步通讯数据。 sda:双向串行数据线。 物理层: 1,支持挂载多设备。 2,二线制。 3,每个设备有其单独的地…

【已解决】java的gradle项目报错org.gradle .api.plugins .MavenPlugin

我的java的gradle项目经常报错org.gradle .api.plugins .MavenPlugin。报错这个问题是因为依赖起冲突了,我在网上试了很多方法都没有效果,折让小编我很是苦恼,不过还好到最后问题还是解决了。 首先要知道你的项目所使用的gradle版本&#xf…

Webpack十大缺点:当过度工程化遇上简单的静态页面

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

React-Router路由

1.React Router的基本使用 安装:安装时,选择react-router-dom,react-router会包含一些react-native的内容,web开发并不需要; npm install react-router-dom 路径模式 BrowserRouter使用history模式; Hash…

【六:(mock数据)spring boot+mybatis+yml】

目录 1.1、代码编写Demo类User类启动类 APplication 1.2、配置类查询语句的配置 mysql.ymlspringboot的配置 application.yml日志的配置 logback.xml数据库的配置 mybatis-config.xml 1.3、测试:1.3.1、测试获取用户数1.3.2、添加用户1.3.3、数据的更新1.3.4、数据的…

【八:(调springboot+testng+mybatis+数据校验】

目录 1、代码结构configcontrollermodelspringboot启动类 2、配置资源mysql.xmlapplication.ymllogback.xmlmybatis-config.xml数据库配置 3、测试验证 1、代码结构 config package com.course.config; import org.springframework.context.annotation.Bean; import org.sprin…

Linux 进程操作

文章目录 进程的基本知识进程pid进程常用的函数 forkwait和waitpidexec函数簇system函数信号处理signal函数Linux的SIGUSR1SIGUSR2 讨论 进程的基本知识 一个程序的执行称为一个进程,所有的代码都是在进程中执行的,进程是操作系统资源分配的基本单位。 在…

在启智平台上安装anconda(启智平台中新建调试任务,选的基础镜像中有conda的,就无需安装)

安装Anaconda3-5.0.1-Linux-x86_64.sh python版本是3.6 在下面的网站上找到要下载的anaconda版本,把对应的.sh文件下载下来 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 把sh文件压缩成.zip文件,拖到启智平台的调试页面 上传到平台上 un…

tlaplus-vscode插件使用记录

参考官方教程Getting Started 和油管视频A gentle intro to TLA 入门和命令 首先在vscode的扩展里面下载 然后新建一个squares.tla文件 在代码区域先输入module生成上下的分隔符,然后输入pluscal来调用模版,生成一堆预设代码 小改一下,编写一…

WGBS项目文章 | 在缺氮情况下,细胞自噬对植物DNA甲基化会产生怎样的影响?

发表单位:中国科学院江西省庐山植物园 发表日期:2023年9月13日 研究期刊:International Journal of Molecular Sciences(IF: 5.6) 研究材料:拟南芥 2023年9月13日,中国科学院江西省庐山植物…

【二:Spring-AOP】

目录 一 、AOP1、什么是AOP2、AOP的类型3、AOP(底层原理)(1)第一种有接口情况,使用JDK 动态代理(2)第二种没有接口情况,使用[CGLIB](https://so.csdn.net/so/search?qCGLIB&spm…

【MyBatis进阶】mybatis-config.xml分析以及try-catch新用法

目录 尝试在mybatis项目中书写增删改查 遇见问题:使用mybaties向数据库中插入数据,idea显示插入成功,但是数据库中并没有数据变化? MyBatis核心配置文件剖析 细节剖析: try-catch新用法 截至目前我的项目存在的问题&#xf…

Milk-V Duo快速上手

前言 (1)此系列文章是跟着汪辰老师的RISC-V课程所记录的学习笔记。 (2)该课程相关代码gitee链接; (3)PLCT实验室实习生长期招聘:招聘信息链接 (4)最近实习需要…

Linux下shell编写脚本指南

文章目录 🌟 Linux下Shell编写脚本🍊 为什么要使用Shell编写脚本🍊 Shell脚本的基础知识🎉 基本语法🎉 常用命令🎉 脚本文件的执行 🍊 Shell脚本的编写技巧🎉 脚本文件的注释&#x…

我总结了3个做好事情的万能动作,简单高效!

01 最近做公众号爆文项目,将用GPT写的文章发布在公众号赚取收益,爆了一篇之后,其他文章的数据并不理想。 同期做的闲鱼小项目很快出单,复盘出单经验,并将这些经验用到公众号爆文项目上,文章的数据又在逐渐好…

彩虹商城知识付费程序

1,下载程序, 2.宝塔新建站点,,自己的域名直接用(别忘记解析了)教程直接用IP测试。。 3.上传你下载的压缩包(这里暂停一下,传好了继续)有点慢等不了了, 4.上传…

基础MySQL的语法练习

基础MySQL的语法练习 create table DEPT(DEPTNO int(2) not null,DNAME VARCHAR(14),LOC VARCHAR(13) );alter table DEPTadd constraint PK_DEPT primary key (DEPTNO);create table EMP (EMPNO int(4) primary key,ENAME VARCHAR(10),JOB VARCHAR(9),MGR …