理解SIFT

首先看这个,理解很舒服
https://blog.csdn.net/kyu_saku/article/details/52804265

最近看ORB-SLAM2源代码,构造Frame类部分出现了很多图像金字塔的内容,加上想起师兄和我讲的:图像算法岗的 SIFT、SURF、FAST、ORB 特征子肯定要会的呀,所以花了一晚上对SIFT特征子深入探究了下,期间感谢kyu_saku

Brook@CV
以及zddhub
Rachel-Zhang
的博客,根据上述博客对SITF由浅入深的进行理解。
天涯路清晨
对SIFT的介绍更清晰。

目录:

SIFT概述
尺度空间的极值检测
去除对比度低、不稳定的边缘响应点
关键点方向分配
描述子

————————————————

一、SIFT概述

SIFT的全称是Scale Invariant Feature Transform,尺度不变特征变换,由加拿大教授David G.Lowe提出的。SIFT特征对旋转、尺度缩放、亮度变化等保持不变性,是一种图像局部特征的提取算法。
实质: 不同尺度空间上查找特征点,并计算特征点的方向。
基本步骤:
1.尺度空间极值检测:搜索所有尺度上的图像位置,通过高斯微分函数识别潜在的对于尺度和旋转不变的兴趣点。
2.关键点定位:
3.方向分配:基于图像局部的梯度方向
4.描述子:特征点周围的邻域内。
————————————————

二、尺度空间的极值检测

对于一个局部区域,若是采用相同的窗口对图片进行观察,左边的小角到右边就不是一个角了,于是,需要提出具有尺度不变性的特征,这样才能保证物体大小发生变化后,依然能正确匹配。这就是尺度空间的由来。
在这里插入图片描述
上述最简单的解决方法就是对于不同尺度的图像都能用合适的窗口尺度Scale,观察窗口小了,那么把窗口放大点或者把图像缩小点不就好了。然后将不同尺度窗口下检测到的特征点都输入进去,就能得到最终的特征点了。尺度空间在实现时使用高斯金字塔表示。
PS:高斯核是唯一可以产生多尺度空间的核
1、高斯金字塔的构建分为两部分:

  1. 对图像做不同尺度scale 的高斯模糊;
  2. 对图像做降采样(隔点采样)。
    ————————————————
    在这里插入图片描述
    将原始图像不断降阶采样,得到一系列大小不一的图像,由大到小,从下到上构成的塔状模型。原图像为金子塔的第一层,每次降采样所得到的新图像为金字塔的一层(每层一张图像),每个金字塔共O组,每组有S层。

2、DOG高斯差分金字塔
高斯金字塔每组中相邻上下两层图像相减,得到高斯差分图像。
在这里插入图片描述
使用DOG的原因在于,对于边缘和拐角有明显变化,而没变化区域接近0;
重点关注下绿色这条线,0.0000 0.0011 0.0505 -0.0516 -0.0516 0.0505 0.0011 0.0000
这些数值直接相加,其和约等于0,这意味着具有同样大小的8个数值,与绿色线对应相乘后求和的值依旧会约等于0。
在这里插入图片描述
对左边图像经过DOG后结果如右图所示。
在这里插入图片描述
3、DoG空间极值检测
中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点,需要3层高斯差分图像。
在这里插入图片描述
在这里插入图片描述
但是,每组图像的第一层和最后一层是无法进行比较取得极值的。为了满足尺度变换的连续性,在每一组图像的顶层继续使用高斯模糊生成3幅图像,高斯金字塔每组有S+3层图像,DoG金字塔的每组有S+2组图像。
4、尺度变换连续性
声明:
1.我们讨论的空间是DOG空间,特征点正是在DOG空间上需要三层高斯差分图像得到的。
2.下一个octave的图像大小是上一个octave图像大小的1/2。这样,使得高斯函数sigma的取值,能够连续覆盖整个尺度空间。
如下所示:每组(Octave)能够得到S=3个特征点,红框部分。这里的DOG图像有S+2=5张,高斯图像有S+3=6张。
在这里插入图片描述
在这里插入图片描述

三、删除不好的特征点

通过比较检测得到的DoG的局部极值点实在离散的空间搜索得到的,由于离散空间是对连续空间采样得到的结果,因此在离散空间找到的极值点不一定是真正意义上的极值点,因此要设法将不满足条件的点剔除掉。

方法:通过尺度空间DOG函数进行曲线拟合寻找极值点。
在这里插入图片描述
要剔除掉的不符合要求的点主要有两种:
1、低对比度的特征点
2、不稳定的边缘响应点
在这里插入图片描述
4.2 删除边缘效应
由于DoG对图像中的边缘有比较强的响应值,而一旦特征点落在图像的边缘上,这些点就是不稳定的点。
在这里插入图片描述

四、求取特征点的主方向

目的:为了实现图像旋转不变性,需要给特征点的方向进行赋值。
上一步精确定位关键点后找到该特征点的尺度Scale,根据这一尺度得到最接近这一尺度值得高斯图像。
1、使用有限差分,计算以关键点为中心,以3×1.5σ为半径的区域内图像梯度的幅角和幅值,公式如下:
2、再利用图像的梯度直方图统计邻域内像素对应的梯度方向和幅值,求取关键点局部结构的稳定方向。

**具体做法是:**对于以关键点为中心的一个局部区域,计算其中每个位置的边缘的梯度方向(orientation)及其幅值(magnitude),梯度方向划分为36个bin进行统计,相当于每个bin的区间为10度;随后使用高斯权值,将局部区域中每个位置上的直方图,进行高斯加权的幅值相加,得到最终该关键点的梯度方向直方图。随后,选择最大和80%的次大值为该关键点的方向。最后,对于每个关键点,有三个信息:位置、所处尺度(半径)、方向。
————————————————
在这里插入图片描述
通常使用一个带箭头的圆或直接使用箭头表示SIFT区域的三个值:中心表示特征点位置,半径表示关键点尺度(r=2.5σ),箭头表示主方向。

五、描述子

这个描述符不只包含特征点,也含有特征点周围对其有贡献的像素点。描述子应具有较高的独立性,以保证匹配率。
特征描述符的生成大致有三个步骤:
1、 区域坐标轴旋转
为了保证特征矢量具有旋转不变性,要以特征点为中心,在附近邻域内旋转θ角,即旋转为特征点的方向。
旋转后区域内采样点新的坐标为:
2、计算采样区域梯度直方图
将旋转后区域划分为4*4子区域,每一个子区域内计算8个方向的梯度直方图,所以最终共有4×4×8=128个数据,形成128维SIFT特征矢量。
————————————————
在这里插入图片描述
1、校正旋转主方向,确保旋转不变性。
2、生成描述子,最终形成一个128维的特征向量
3、归一化处理,将特征向量长度进行归一化处理,进一步去除光照的影响。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值