SIFT算法原理

SIFT算法原理

- 1 min

本文转载自https://blog.csdn.net/zddblog/article/details/7521424,此处为本人学习笔记,删除了原文中部分内容。原文有更为详细的介绍与推导。

SIFT作为一种图像局部特征描述被广泛用于各类图像处理任务。在三维人体重建中,SIFT特征常被用于寻找各视角之间的匹配点,进而实现多视角的三维重建。

一、算法特点

1、具有较好的稳定性和不变性,能够适应旋转、尺度缩放、亮度的变化,能在一定程度上不受视角变化、仿射变换、噪声的干扰。
2、区分性好,能够在海量特征数据库中进行快速准确的区分信息进行匹配。
3、多量性,就算只有单个物体,也能产生大量特征向量。
4、高速性,能够快速的进行特征向量匹配。
5、可扩展性,能够与其它形式的特征向量进行联合。

二、算法实质

在不同的尺度空间上查找关键点,并计算出关键点的方向。

三、算法流程

1、提取关键点:此步骤是搜索所有尺度空间上的图像位置。通过高斯微分函数来识别潜在的具有尺度和旋转不变的兴趣点。
2、定位关键点并确定特征方向:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定程度。然后基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。
3、通过各关键点的特征向量,进行两两比较找出相互匹配的若干对特征点,建立景物间的对应关系。

四、尺度空间

SIFT具有尺度不变性,生活中也有从不同尺度来观察图像。如观察一棵树,从小尺度观察可以观察树叶、树皮的特征,从大的尺度,可以观察树的整体形状等。
基本思想:在图像信息处理模型中引入一个被视为尺度的参数,通过连续变化尺度参数获得多尺度下的尺度空间表示序列,对这些序列进行尺度空间主轮廓的提取,并以该主轮廓作为一种特征向量,实现边缘、角点检测和不同分辨率上的特征提取等。尺度空间方法将传统的单尺度图像信息处理技术纳入尺度不断变化的动态分析框架中,更容易获取图像的本质特征。尺度空间中各尺度图像的模糊程度逐渐变大,能够模拟人在距离目标由近到远时目标在视网膜上的形成过程。

SIFT利用高斯模糊来模拟尺度的增大(图像越模糊,包含的细节信息越少,整体信息越多),从而能够在不同尺度来寻找特征。并且高斯核函数是唯一的尺度不变核函数。

σ为尺度因子,越大图像越模糊,模拟尺度越大。*为卷积操作。

由不同大小高斯核卷积后的图像可以组成一个高斯金字塔。

五、极值检测

差分高斯函数DOG(Difference of Gaussian)用于提取图像像素的变化(如果没有变化也就没有特征)。

做完差分后在图像中寻找极值点。

当然这样产生的极值点并不全都是稳定的特征点,因为某些极值点响应较弱,而且DOG算子会产生较强的边缘响应。所以通过拟合曲线来精确确定关键点的位置和尺度,同时去除低对比度的关键点和不稳定的边缘响应点(因为DoG算子会产生较强的边缘响应),以增强匹配稳定性、提高抗噪声能力。

六、关键点方向匹配

为了使描述符具有旋转不变性,需要利用图像的局部特征为给每一个关键点分配一个基准方向。使用图像梯度的方法求取局部结构的稳定方向。对于在DOG金字塔中检测出的关键点点,采集其所在高斯金字塔图像3σ邻域窗口内像素的梯度和方向分布特征。梯度的模值和方向如下:

本算法采用梯度直方图统计法,统计以关键点为原点,一定区域内的图像像素点确定关键点方向。在完成关键点的梯度计算后,使用直方图统计邻域内像素的梯度和方向。梯度直方图将0~360度的方向范围分为36个柱,其中每柱10度。如下图所示,直方图的峰值方向代表了关键点的主方向,方向直方图的峰值则代表了该特征点处邻域梯度的方向,以直方图中最大值作为该关键点的主方向。为了增强匹配的鲁棒性,只保留峰值大于主方向峰值80%的方向作为该关键点的辅方向。

七、关键点描述

Lowe建议描述子使用在关键点尺度空间内44的窗口中计算的8个方向的梯度信息,共448=128维向量表征。
将关键点附近的邻域划分为d
d(Lowe建议d=4)个子区域,每个子区域做为一个种子点,每个种子点有8个方向。

将坐标轴旋转为关键点的方向,以确保旋转不变性

以这个向量来表示一个SIFT特征。

八、关键点匹配

以当前图像和目标图像中各个特征向量的欧氏距离。最接近的认为是匹配点。

九、缺点

SIFT在图像的不变特征提取方面拥有无与伦比的优势,但并不完美,仍然存在:

  1. 实时性不高。
  2. 有时特征点较少。
  3. 对边缘光滑的目标无法准确提取特征点。

rss facebook twitter github gitlab youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora