SIFT 算法有三个重要概念,分别是:(1)尺度空间极值检测(2)关键点定位(3)关键点特征描述

(1)尺度空间的极值检测

尺度空间可以理解为计算机像人一样看到的图片是有多层的,SIFT模仿动物视觉特征,将物体不同尺度下图像提供给机器,让机器在不同尺度下综合信息。具体操作是:使用二维高斯函数与原图像卷积,然后进行下采样,最后建立原始图像尺度空间模型

二维高斯函数工作原理如下:高斯模板是中心对称的,与原图像做卷积。

Opencv(九):SIFT

经过二维高斯模板作用的图像如图所示:高斯函数方差越大,图像信息丢失越严重。

Opencv(九):SIFT

分离高斯模糊:因为高斯函数本身数学性质具有可分离性,所以在计算是可以分离计算,这样讲减少卷积计算的次数,示意图如下:

Opencv(九):SIFT

在SIFT中,将原图像为二维的信息,加入一个尺度的维度,可视为三维信息,但是此三维非xyz的三维性质。通过尺度变化获取多尺度信息,对多尺度的图像信息进行主轮廓提取,将轮廓作为特征向量,实现边缘提取,角点检测等。类似于人眼晶状体过得远近物体在视网膜上成像。

搭建高斯金字塔,通过不同尺度的高斯模糊,然后降阶采样,得到大小不一的塔状图像,如下图所示:图像是越来越小的,并且每个图片的清晰程度是不一样的,因为经过高斯模糊处理。

Opencv(九):SIFT  Opencv(九):SIFT

金字塔层数计算公式:

Opencv(九):SIFT

图像不是单张图像组成的金字塔,而是每个降采样的图片都进行了 不同参数的高斯模糊处理,如下图所示:

Opencv(九):SIFT

然后使用差分高斯函数计算,如下所示:

Opencv(九):SIFT

实际计算中,上下两层相减得到下一层图像,如下图所示:

Opencv(九):SIFT

由于加入了尺度的信息,原来一个卷积核共有 3*3 = 9个像素,现在再乘以3,共有27个,所以,每个检测点需要与26个点比较。

建立了尺度空间,下面需要定位关键点,由于像素是离散的,所以检测得到的极值点可能不是真正的极值点,所以需要关键点定位,方法是子像素插值。最终要设定一个经验值,偏移量,一般设置为 0.04。

由于在计算过程中,采用的是二维高斯函数代替LOG算子,即DOG算子,但是DOG算子本身数学上分析得到其对边缘不稳定,所以需要消除边缘响应,消除边缘响应的步骤如下:

(1)获取特征点处 hessian矩阵:

Opencv(九):SIFT

(2)得到 α和β分别作为x与y的方向上的梯度,定义:

Opencv(九):SIFT

(3)简化,令 α = r*β, r为主检测曲率

Opencv(九):SIFT  Opencv(九):SIFT

得到关键点定位以后,需要进行关键点的特征描述,这里用到灰度直方图的信息,将灰度分为36个柱,得到最终梯度直方图,如下所示:

Opencv(九):SIFT

每次计算 4*4 = 16个小格子内关键点的位置、尺度、方向。如下图所示:特征向量旋转,是SIFT具有旋转不变性最重要的原因。
Opencv(九):SIFT

相关文章:

  • 2022-12-23
  • 2021-10-30
  • 2021-12-11
  • 2021-10-12
  • 2021-10-30
  • 2021-06-20
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-29
  • 2021-10-22
  • 2021-11-23
  • 2021-12-01
  • 2021-05-11
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案