学习心得:SIFT特征

      本文主要记录自己对SIFT特征的一些理解。

SIFT特征

      SIFT特征是图像的一种具有旋转、缩放、平移不变性的特征。对于一幅图像,SIFT算法经过一系列复杂运算,输出若干个特征点,并为每个特征点构建一个128维的特征向量,这个特征向量对旋转、缩放、平移不敏感。

SIFT的常见应用:

      在两幅图像中都有同一个目标,但它们的姿态不同(如经过了旋转、缩放、光照变化、部分遮挡等)。对两幅图像分别提取SIFT特征,根据SIFT特征的不变性,该目标同一个位置的特征点在两幅图像中的特征向量具有很高的相似度,因此通过特征向量的匹配,我们可以在两幅图像中找到特征点的对应关系,进而实现目标在不同图像中的匹配。

算法原理

尺度空间

      构建尺度空间的方法是通过高斯模糊和下采样,最终构建一个高斯金字塔和DOG空间下的金字塔。

高斯金字塔

      包含S组图像,每组包含n+3层图像(n为DOG空间下的每组层数)。每组图像尺寸相同,但具有不同的σ值;下一组的第一幅图像是由上一组的倒数第三幅图像下采样得到,尺寸缩小到原来的四分之一,但具有相同的σ值。构建方法如下:
      1、设定一个初始尺度σ,代入二维高斯核函数对图像进行高斯模糊
      2、从第一层开始往上,每一层的尺度是逐渐增加的,依照该层的尺度对图像进行高斯模糊。按照算法的公式,倒数第三层的尺度为2σ。
      3、下一组的第一层由上一组的倒数第三层降采样得到,因此其初始尺度为2σ,尺寸是上一层的四分之一。
      4、重复2、3这样的过程,直到图像组数达到S组结束。

DOG空间

      每组高斯金字塔图像,相邻两层进行差分运算得到DOG空间的差分图像,由于高斯金字塔每组有n+3层,因此DOG空间每组有n+2层图像。值得注意的是,DOG空间同样有S组,也形成了一个图像金字塔。

极值检测

      针对每组的n+2层图像,除去第一层和最后一层,中间的n层图像,对每一层图像进行极值点检测,方法是比较待检测点和本层的8邻域点、上层的9邻域点、下层的9邻域点的大小,确定待检测点是否是极值点。
      所有n层图像的极值点检测完成之后,我们初步得到了一批关键点,后续需要对这些点进一步处理。

关键点定位

      离散空间的极值点不是真正的极值点,所以需要通过拟合三维二次函数来精确确定关键点的位置和尺度。对候选关键点x,其偏移量为∆x,通过对D(x)求极值得到∆x的取值,并计算出此时的D(x)。要注意的是当偏移量大于0.5时,要在更加接近的邻近点上重新插值直到收敛。对于|D(x)|小于一定阈值的点,易受噪声的干扰而变得不稳定,所以直接删除。

去除边缘点

      高斯差分算子会产生较强的边缘响应,需要剔除不稳定的边缘响应点。根据DOG算子在垂直边缘的方向有较大的主曲率,在横跨边缘的方向有较小的主曲率的性质,构建关键点处的2x2的Hessian矩阵,Tr代表矩阵对角线元素之和,Det代表矩阵行列式,Tr^2/Det表征了该关键点是边缘响应点的程度,其值越大,越接近于边缘响应点。因此我们设定一个阈值,剔除Tr ^2/Det大于该阈值的关键点。

关键点方向计算

      有了关键点之后要为每个关键点生成一个特征向量,这就是特征描述,为了使描述符具有旋转不变性,要计算每个关键点的基准方向。首先对于每个关键点,计算以其为中心半径为3×1.5σ邻域内的所有点的梯度幅值和方向;然后计算梯度直方图,即将0到360度的方向范围等间隔分为若干个柱,累计落到每个方向内的梯度幅值;最后将累计值最大的方向作为当前关键点的主方向,若存在超过主方向80%能量的峰值,则作为辅方向。

生成关键点特殊描述符

      得到关键点的方向之后,通过坐标系旋转将x轴旋转到关键点主方向上;然后在关键点尺度空间内44的窗口中计算8个方向的梯度信息,具体而言即:每个窗口包含44的像素,对每个像素点计算梯度幅值和方向,利用高斯窗口对其进行加权运算,最后在该窗口上生成8个方向的梯度直方图,其结果可以作为1个8维向量;每个窗口都经过这样的计算之后,形成448维的关键点特征描述符

Opencv实现

      opencv中可以通过cv.xfeatures2d.SIFT_create方法来创建一个SIFT特征检测器。这个方法有一个参数sigma,要注意的是该参数有默认值,一般不同设置。但是某些情况下可能特征提取结果不好,需要酌情调整该参数的值。
sigma参数代表第一组第一层图像的高斯模糊尺度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值