SIFT特征提取分析算法

原文链接

一、SIFT介绍

1 简介

SIFT 算法是在一幅图片不同的尺度空间上检测图像关键点的局部特征算法。SIFT算法通过关键点进行匹配,检测图片中物体的位置尺度和旋转不变量,使得分类器有良好的效果。该算法的应用范围很广,在图像导航、追踪、动作识别等方面都有较深刻的应用。

2 知识点

  • 卷积模糊概念
  • 高斯卷积模糊
  • 图像金字塔
  • 关键点选取
  • 描述子生成

二、步骤

  1. 图像卷积运算
  2. 高斯模糊
    • 高斯函数卷积核:高斯函数的 “3delta” 原则(delta为标准差),当距离中心点的距离大于 “3delta” 之后,其效果可以忽略在。进行高斯核的确定时,仅选用距离中心点小于3delta 的点进行模板选取,模板大小为 “(6delta+1)(6*delta+1)”。
    • 分离高斯模糊:当使用二维模板进行图像处理时损失的图像信息由模板大小决定。模板无法匹配到的点将丢失。经验证二维高斯模糊可以由水平方向上的一维高斯模糊和竖直方向上的一维高斯模糊相加得到,这也称作是高斯函数的分离性。
  3. 高斯金字塔
    • 降维采样:对于每层的图进行隔点采样
    • 高斯采样:高斯金字塔的建立与简单的降维采样不同的是:高斯金字塔采样出的每一层实际上是一组数据,而简单降维采样每一层仅仅是一幅图像。
    • 高斯差分金字塔采样:将每一组图片中的相邻两幅图片进行相减,将原高斯金字塔生成新的每组含有N−1幅图像的高斯差分金字塔。
  4. 关键点检测
    • 寻找关键点
      • 粗略搜索:找到某一点,将其和相邻的两个尺度空间内的两个相同坐标点及这三个坐标点在同尺度空间相邻的八个一共26个(3×8+2)坐标点进行比较。若该点大于或小于其他所有点,那么这个点可能是我们要寻找的关键点。所判断点的邻域可以理解成为一个三阶魔方的形状。
      • 定位关键点:对DOG金字塔函数使用泰勒展开,带入候选关键点。
      • 去除边缘效应:使用Hessian矩阵计算主曲率,主曲率与矩阵的迹的平方与行列式之比成正比,当矩阵的迹的平方与行列式之比大于某个值时,忽略该点
    • 求关键点方向
      • 求梯度方向直方图:梯度方向直方图的横轴为梯度方向,纵轴为在该方向上的梯度幅值累加值。将邻域中的点的幅值进行分解,将其分解到每隔45度一个横轴方向的坐标中,最终得到一个横轴为八个方向的坐标系。
      • 确定关键点主方向:在直方图中,选取梯度幅度累加值最大的对应方向为该关键点的主方向,若有其他方向的累加值大于主方向累加值的80%时,将该方向认定为该关键点的辅方向。
  5. 描述子生成
    • 采样区域
    • 计算直方图描述子生成:将每一个图像块中的方向进行类似之前计算关键点的步骤,将其分解到八个方向上。在一个描述子中有16个图像块,每一个图像块中有 88 维特征值,这样在一个描述子中即可获得128维的描述。
  6. 生成描述子的流程解释
    • 在高斯差分金字塔中寻找某一点,该点为其尺度空间间隔为1的邻域中的最大值或者最小值。
    • 将该点的DOG函数用泰勒展开式进行展开并将极值点带入
    • 删除其边缘效应,得到准确的关键点。
    • 求出关键点的梯度分布直方图,将其分解到间隔为45度的梯度方向上,将最大的方向设置为该点的主方向。
    • 在关键点周围选取采样区域,并将坐标系旋转至该点的主方向上。
    • 计算直方图,得出128维特征向量,并进行归一化处理。