SIFT 特征提取

SIFT(Scale-invariant feature transform) 是一种提取局部特征的技术。它将图片中的较为稳定的特征点提取出来,进行处理后生成描述符,形成独特的SIFT特征。这些特征具有尺度,旋转不变性,可以利用这些SIFT特征对图像进行匹配,识别。越是感受到SIFT在计算机视觉领域的应用之广,越是能够受到这篇论文的优美。


SIFT特征提取主要包括四个步骤:
1.使用DoG寻找候选兴趣点
2.精确定位兴趣点的位置
3.根据梯度方向,分配兴趣点的方向
4.使用128维向量描述兴趣点


1.使用DoG寻找候选兴趣点


首先介绍DoG函数

定义对图像做高斯卷积:

其中,


就是我们常用的高斯函数。σ代表的就是尺度,参数不同,对应不同的尺度


DoG(Difference of Gaussian)就是不同尺度的高斯核相减的差值。


这个函数是这篇论文的第一个创新点,采用DoG函数近似LoG函数,LoG函数已经被证明能够用来提取多尺度的特征点,参考博文https://blog.csdn.net/ghost__2011/article/details/79588573
而LoG函数的定义是





可以考虑是用差分方法近似

移项,得到:


这就是我们的DoG函数,(k-1)是一个常数项,对极值点的位置不会造成影响,和DoG方法的计算量要小于LoG,从而实现了计算量上的优化。


从图中可以看出,LoG函数和DoG函数是比较近似的。DoG检测的目的就是采用近似LoG方法在图像中寻找尺度不变得兴趣点。

接下来就是这篇论文的第二个创新点,建立高斯金字塔,建立高斯的目的,是为了给兴趣点增加尺度信息。

建立高斯金字塔的步骤是:
1.先将原始图片升采样,长宽均为原始图像的两倍
2.将原始图像不断做降采样,每次长宽都为上一次的二分之一(降采样可以先对图像进行高斯模糊后进行)
3.固定一个值s,这是我们希望两个降采样尺度间的尺度间隔,(因为完全的连续是不可能的,我们只能使它近似连续)DoG函数的运算就是讲两个经过不同高斯核卷积过的图像求出差积,而高斯金字塔的目的,是为了让图像在尺度上产生连续,从而计算出兴趣点响应最大的尺度。降采样其实就是改变了原始图像的尺度,这个地方的s就是我们在两个降采样尺度中又细分了s份,考虑DoG会减掉一层,而头尾的两层在采集极值的算法中(第5步)不能用,如果我们希望DoG的到的金字塔有s个间隔,那在模糊的金字塔就应该有s+3层。

也就是说,我们需要对每一个1,2步得到的图片进行s+3次高斯模糊运算,得到高斯金字塔,尺度的选取如上图所示,用σ,kσ一次模糊。

k这样定义的原因是每次降采样的尺度为尺度的两倍。
4.第三步构建了高斯金字塔后,再相邻相减就可以的到DoG金字塔。
5.我们选取的候选兴趣点就是差分金字塔在相邻尺度,中26个相邻值中的极大极小值。

最后得到的候选特征点就包括了三个信息,x,y坐标,σ所在的尺度

2.精确定位兴趣点的位置

空间尺度函数的泰勒展开式为:

对上式求导并让他等于零得到

带回泰勒级数


舍弃

这样做的目的是舍弃那些不明显的关键点

接下来是消除边缘响应,这样做的目的是因为DoG对边缘点的检测也相当敏感,容易受到噪声影响,为了提高兴趣点的可靠性,需要排除掉这些边缘的点。
主要思路是,计算关键点的主曲率,对于在边上的关键点而言,穿过边缘方向的主曲率会远远大于沿着边缘方向上的主曲率,因此其主曲率的远大于位于角点的比值。

其中,

假设


判断主曲率考虑用(r+1)²和r的比值,SIFT建议使用r=10,实际上这就是对


的优化。

3.根据梯度方向,分配兴趣点的方向

排除掉一些不好的点后,我们考虑给每个兴趣点添加方向信息,从而达到旋转不变的性质。
采用兴趣点对应尺度作为模板计算

以特征点为中心,r=3*1.5σ为半径,方向分解为10度一个柱,共36个柱,采用高斯加权对窗口内的梯度量进行加权,形成36个柱的直方图,以最高的柱为兴趣点的方向,为描述符增加方向信息。
如果有别的柱值达到最大柱值的80%,则认为这个方向同样为兴趣点的方向,复制出一个兴趣点。
这样每一个兴趣点就拥有了坐标(算两个),尺度,方向四个信息。

4.使用128维向量描述兴趣点

在介绍SIFT最酷的一步之前我先介绍一个图

我们进过3的计算,会得到每个点的梯度量,以及梯度方向。
这个图中箭头方向就代表梯度方向,而箭头的长度就代表了梯度量。
考虑刚才我们为每一个兴趣点添加了方向信息,现在我们要对方向进行归一化,使兴趣点拥有方向不变性。

我们要做的就是一个范围内的方向,都随着主方向一起旋转,而主方向旋转到x轴的方向。
这个范围可以简化定义为16*16的像素,实际SIFT考虑于尺度等有关系。
计算公式为

接下来将范围内的每一个方向,梯度量信息分为4*4个部分,如果简化为16*16个像素,就对应每个部分为4*4个像素。
接着,对每一个部分中的方向,以45度为一个柱,共八个柱,对梯度量进行高斯加权后生成直方图。


这个图中一个小格子对应上面描述的一个部分。方向代表的45度一个的柱方向,箭头长度对应的是加权后的梯度量,4*4个部分,在乘上8个方向,得到了一个128维的向量
这个向量就是SIFT的特征点描述符。匹配两个特征点就是对两个向量进行距离运算。
SIFT的应用非常广泛,也非常酷,考虑以后会对应用写一篇博客。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值