Sift特征点提取

news/2024/7/21 5:04:14 标签: 计算机视觉, 算法, 图像处理

Sift特征点提取

  • Sift算法
  • 算法简介
  • 算法操作步骤
    • 图像金字塔
      • 高斯金字塔
        • 高斯函数与图像卷积
        • 分离高斯卷积
        • 高斯金子塔源码分析
      • 高斯差分金字塔
        • 差分金字塔的建立
        • 差分金字塔源码分析
    • 空间极值点(关键点)检测(最关键一步)
      • 极值点检测过程
        • 极值点检测示意
        • 极值点检测源码分析
      • 关键点定位
        • 关键点精确定位
        • 消除边缘响应
        • 精确定位中的泰勒插值源码分析
    • 为关键点方向分配
    • 特征点描述符
  • 本章疑问

Sift算法

算法简介

尺度不变特征转换即SIFT (Scale-invariant feature transform)。
1.它⽤来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量。

2.局部影像特征的描述与侦测可以帮助辨识物体,SIFT特征是基于物体上的⼀些局部外观的兴趣点⽽与影像的⼤⼩和旋转⽆关。

3.SIFT算法的实质是在不同的尺度空间上查找关键点(特征点),并计算出关键点的⽅向。SIFT所查找到的关键点是⼀些⼗分突出,不会因光照,仿射变换和噪⾳等因素⽽变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。
在这里插入图片描述

算法操作步骤

图像金字塔

高斯金字塔

1.图像⾼斯⾦字塔(Gaussian Pyramid)是采⽤⾼斯函数对图像进⾏模糊以及降采样处理得到。
在这里插入图片描述
将一张图片处理成每组6张,每组的尺寸相同但模糊系数不同。模糊系数取值如下:
在这里插入图片描述降采样:
sigma 全取点 卷积
2sigma 隔点取点 卷积
当sigma的系数为2,4,8……时,开始降采样
上图第二个公式的含义:先用0.5的高斯核卷积,再用1.52的高斯核卷积与直接用1.6的高斯核卷积的效果相同!!
在这里插入图片描述
S:层数
n:欲提前特征的图片张数
在这里插入图片描述
竖直方向:尺度方向

高斯函数与图像卷积

根据3σ原则,使⽤NxN的模板在图像每⼀个像素点处操作,其中N=[(6σ+1)]且向上取最邻近奇数。
在这里插入图片描述

二维高斯卷积

分离高斯卷积

1.直接与图像卷积,速度⽐较慢,同时图像边缘信息也会损失严重。可以使⽤分离的⾼斯卷积(即先⽤1xN的模板沿着X⽅向对图像卷积⼀次,然后⽤Nx1的模板沿着Y⽅向对图像再卷积⼀次,其中N=[(6σ+1)]且向上取最邻近奇数),这样既省时也减⼩了直接卷积对图像边缘信息的严重损失。
在这里插入图片描述

高斯金子塔源码分析

在这里插入图片描述

高斯差分金字塔

图像平移尺度归一化就是指通过变换消除平移和比例缩放对图像的影响。

差分金字塔的建立

差分⾦字塔的是在⾼斯⾦字塔的基础上操作的,其建⽴过程是:在⾼斯⾦⼦塔中的每组中相邻两层相减(下⼀层减上⼀层)就⽣成⾼斯差分⾦字塔。

同一组每层相减,得到高斯差分金字塔。

疑问:差分前面每组有六层,为什么变成5层了?
在这里插入图片描述

差分金字塔源码分析

在这里插入图片描述

空间极值点(关键点)检测(最关键一步)

关键点是由DOG空间的局部极值点组成的,关键点的初步探查是通过同⼀组内各DoG相邻两层图像之间⽐较完成的。

极值点检测过程

极值点检测示意

在这里插入图片描述
n:欲提前特征的图片张数
绝对值太小有可能是噪声,所以不保留这些点
在这里插入图片描述

极值点检测源码分析

在这里插入图片描述

关键点定位

以上⽅法检测到的极值点是离散空间的极值点。
以下通过拟合三维⼆次函数来精确确定关键点的位置和尺度,同时去除低对⽐度的关键点和不稳定的边缘响应点(因为DoG算⼦(边缘提取)会产⽣较强的边缘响应),以增强匹配稳定性、提⾼抗噪声能⼒。

关键点精确定位

离散空间的极值点并不是真正的极值点。利⽤已知的离散空间点插值得到的连续空间极值点的⽅法叫做⼦像素插值。

在这里插入图片描述
为了提⾼关键点的稳定性,需要对尺度空间DoG函数进⾏曲线插值。利⽤DoG函数在尺度空间的Taylor展开式(插值函数)为:(接下来看不懂了)
(泰勒在此处的作用大概是无限趋近减小误差)
在这里插入图片描述

在这里插入图片描述
求得极值点处的偏移量,当它在任⼀维度上的偏移量⼤于0.5时(即x或y或 σ),意味着插值中⼼已经偏移到它的邻近点上,所以必须改变当前关键点的位置。同时在新的位置上反复插值直到收敛;也有可能超出所设定的迭代次数或者超出图像边界的范围,此时这样的点应该删除。
在这里插入图片描述
因为很可能也是噪声。

消除边缘响应

对边缘响应找到的一些理解:
在这里插入图片描述

在这里插入图片描述

⼀个定义不好的⾼斯差分算⼦的极值在横跨边缘的地⽅有较⼤的主曲率,⽽在垂直边缘的⽅向有较⼩的主曲率。DOG算⼦会产⽣较强的边缘响应,需要剔除不稳定的边缘响应点。
在这里插入图片描述
上式最后一步少写了一个平方。
α、β是行列式的特征值

精确定位中的泰勒插值源码分析

在这里插入图片描述

为关键点方向分配

为了使描述符具有旋转不变性,需要利⽤图像的局部特征为给每⼀个关键点分配⼀个基准⽅向。使⽤图像梯度的方法求取局部结构的稳定方向。
在这里插入图片描述
在高斯金字塔中找!!
在这里插入图片描述

统计梯度方向和梯度幅值,之后在梯度区域内投票。(实际上,每10°算一个方向,共36个幅角值,投票最高是主方向,其次是辅方向,辅方向要求大于主方向的80%,否则没有)
有两个方向的特征点按照:两个特征点处理。
在这里插入图片描述

特征点描述符

对于每⼀个关键点,拥有三个信息:位置、尺度以及⽅向。接下来就是为每个关键点建⽴⼀个描述符,使其不随各种变化⽽改变,⽐如光照变化、视⾓变化等等。并且描述符应该有较⾼的独特性,以便于提⾼特征点正确匹配的概率。

匹配关键点算法:KNN。
关键点的匹配需要描述符来匹配。
在这里插入图片描述

128维向量:
在这里插入图片描述
在这里插入图片描述

插值计算每个种⼦点⼋个⽅向的梯度
Sift描述符具有旋转不变形:所以要把关键点的坐标轴旋转到主方向,之后再统计稳定的描述符。
同学给我的解释::
在这里插入图片描述

在这里插入图片描述

本章疑问

疑问1:差分前面每组有六层,为什么变成5层了?
疑问2:向量的泰勒变换运算看不懂。
疑问3:三线性插值


http://www.niftyadmin.cn/n/947197.html

相关文章

【C#】重载(overload)与重写(override)

【前言】 重载和重写,他们其实是实现类型多态(同一种方法,不同的对象会产生不同的结果)特性的基本技术之一,两种技术貌似而实质截然不同 【重载】 1、什么是重载 重载其实是一种编译时多态技术,就是说在编…

Flutter高德定位定位权限管理

Flutter高德定位&&定位权限管理Flutter获取定位1 . 去高德开放平台申请API获取key值2 . 获取项目的ApplicationID3 . 获取本机电脑的sha1值4. 配置build.grade和AndroidMainifest.xml文件5.引入高德地图插件(本人使用amap_location)6.写函数代码…

【设计模式】六大原则之一(单一职责与开闭原则)

【前言】 最近在学习设计模式,设计模式是面向对象编程的。设计模式有6大原则,而实际上都是互补的,也就是说一些原则需要利用另一些原则来实现自己。下面来简单的介绍一下六大原则其中之二 【单一职责原则】 1、单一职责原则的由来 初学者在…

【设计模式】六大原则之二(依赖倒转原则与里氏代换原则)

【前言】 上一篇博客中介绍了六大原则其中之二,这篇博客中将会再给大家介绍两个原则--依赖倒转原则和里氏代换原则 【依赖倒转原则】 1、问题由来 类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下&#…

【设计模式】六大原则之三(迪米特法则与合成/聚合复用原则)

引言 前面两篇博客介绍了设计模式中六大原则其中之四,下面这篇博客中将会再给大家介绍六大原则最后两个原则 【迪米特法则】 1、问题由来 类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大 那么如…

【设计模式】全局观之为什么分三大类

引言 距离设计模式敲完也有差不多一周多了,但是对于为什么要分为三大类还是不太理解,于是就出来了这篇博客 全局观 大家都知道设计模式可以根据目的分为三大类,分别是创建型模式、结构型模式、行为型模式 那么为什么这么分呢?下面…

【设计模式】C#版三大工厂之简单工厂、工厂方法与抽象工厂

引言 简单工厂、工厂方法、抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽象取了出来,优化了系统的架构,并且增强了系统的扩展性。此篇博客是笔者对学完这三种模式之后一个小小的总结 简单工厂 简单工厂模式的工厂…

【设计模式】C#版单例模式实例讲解

引言 单例模式是最常用到的设计模式之一。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服…