SIFT算子总结

来源:互联网 发布:java如何发送短信 编辑:程序博客网 时间:2024/05/20 21:46

一. SITF基本原理

SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、放射变换、噪声也保持一定

度的稳定性。SIFT算法实现步骤,如下所示:

1. 尺度空间极值检测:搜索所有尺度上的图像位置。通过高斯微分函数来识别潜在的对于尺度和旋转不变的兴趣点。

2. 关键点定位:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定

程度。

3. 方向确定:基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相

对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。

4. 关键点描述:在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。这些梯度被变换成一种表示,这

些表示允许比较大的局部形状的变形和光照变化。

说明:高斯函数的可分离性是指使用二维矩阵变换得到的效果也可以通过在水平方向进行一维高斯矩阵变换加上竖直

方向的一维高斯矩阵变换得到。


二. 尺度空间极值检测

1. 尺度空间理论

高斯卷积核是唯一可以产生多尺度空间的核。LoG(Laplacion of Gaussian)算子具有真正的尺度不变性,但可使用

高斯差分算子(Difference of Gaussian,DoG)近似LoG算子。度空间理论的基本思想:在图像信息处理模型中引入

一个被视为尺度的参数,通过连续变化尺度参数获得多尺度下的尺度空间表示序列,对这些序列进行尺度空间主轮廓

的提取,并以该主轮廓作为一种特征向量,实现边缘、角点检测和不同分辨率上的特征提取等。

2. 尺度空间的表示

一个图像的尺度空间定位为一个变化尺度的高斯函数与原图像的卷积。大尺度对应于图像的概貌特征,小尺度对应于

图像的细节特征。

3. 高斯金字塔的构建


尺度空间使用高斯金字塔表示,高斯金字塔的构建如下所示:

(1)对图像做不同尺度的高斯模糊。

(2)对图像做降采样(隔点采样)。

为了让尺度体现其连续性,在简单下采样的基础上加了高斯滤波,这样一幅图像可以产生几组(Octave)图像,一组

图像包括几层(Interval)图像。

LoG算子与高斯核函数的差有直接关系,如下所示:


其中,是高斯梯度算法(GoG),是高斯拉普拉斯算子(LoG)。

使用更高效的高斯差分算子(DoG)代替LoG进行极值检测,如下所示:


在实际计算时,使用高斯金字塔每组中相邻上下两层图像相减,得到高斯差分图像,进行极值检测。高斯差分金字塔

(DoG金字塔),如下所示:


4. DoG空间极值检测

关键点是由DoG空间的局部极值点组成的。为了寻找DoG函数的极值点,每一个像素点要和它所有的相邻点比较,看

其是否比它的图像域和尺度域的相邻点大或者小。如下所示:


如果在每组中检测S个尺度的极值点,那么DoG金字塔每组需S+2层图像,高斯金字塔每组需S+3层图像,实际计算时

S在3到5之间。


三. 关键点定位

1. 关键点精确定位

由于DoG值对噪声和边缘较敏感,因此在DoG尺度空间中检测到局部极值点还要经过进一步的检测才能精确定位为特

征点。为了提高关键点的稳定性,需要对尺度空间DoG函数进行曲线拟合,DoG函数在尺度空间的Taylor展开式,如

下所示:


其中,,求导让方程等于0,得到极值点如下所示:


对应极值点,方程的值如下所示:


根据方程去除掉那些对比度较低的不稳定极值点。

2. 消除边缘响应

DoG函数在图像边缘有较强的边缘响应,因此需要排除边缘响应,更进一步提高关键点的稳定性。DoG算子(欠佳

的)的极值在横跨边缘的地方有较大的主曲率,而在垂直边缘的方向有较小的主曲率。主曲率通过计算在该点位置尺

度的的Hessian矩阵得到,导数由采样点相邻差来估计,如下所示:


假设是H较大的特征值,而是H较小的特征值,令,如下所示:



相等时方程达最小,随的增大而增大。值越大说明两个特征值的比值越大,即在某一个方向的梯度值越大,

而在另一个方向的梯度值越小,而边缘恰恰就是这种情况。为了剔除边缘响应点,需要让该比值小于一定的阈值,如

下所示:


将满足条件的关键点保留,反之剔除。


四. 关键点方向分配

利用关键点邻域像素的梯度方向分布特性,可以为每个关键点指定方向参数,从而使描述子对图像旋转具有不变

性。梯度的模值和方向,如下所示:


确定关键点的方向采用梯度直方图统计法,统计以关键点为原点,一定区域内的图像像素点对于关键点方向生成所作

的贡献。至此检测出的含有位置、尺度和方向的关键点即该图像的SIFT特征点,同时关键点具有平移、旋转和缩放不变性。


五. 关键点描述子

接下来为每个关键点建立一个描述子,用一组向量将这个关键点描述出来,使其不随各种变化而改变。SIFT描述子的

思路:通过对关键点周围图像区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息

的一种抽象,具有唯一性。Lowe建议描述子使用在关键点尺度空间内的窗口中计算的8个方向的梯度信息,共

维向量表征。SIFT的缺点是实时性不高,有时特征点较少,对边缘光滑的目标无法准确提取特征点。


六. 关键点匹配和消除错配点

1. 关键点匹配

关键点匹配通常采用KD树(平衡二叉树)的数据结构来完成搜索。搜索的内容是以目标图像的关键点为基准,搜索与

目标图像的特征点最近邻的原图像特征点和次邻近的原图像特征点。

2. 消除错配点

在关键点匹配的过程中存在着大量的错配点,使用RANSAC(Random Sample Consensus,随机抽样一致)算法来

解决这个问题。它是一种鲁棒性的参数估计方法,本质就是一个反复测试、不断迭代的过程。


六. OpenCV中的SIFT算子

import cv2import numpy as npimg = cv2.imread('home.jpg')gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)sift = cv2.SIFT()kp = sift.detect(gray,None)img=cv2.drawKeypoints(gray,kp)cv2.imwrite('sift_keypoints.jpg',img)

计算关键点描述子,OpenCV提供了2种方法:sift.compute()和sift.detectAndCompute()。


参考文献:

[1] 尺度不变特征变换匹配算法详解:http://www.doc88.com/p-3758093643565.html

[2] SIFT算法详解及应用:https://wenku.baidu.com/view/5465f1bba417866fb94a8e12.html?pn=51