Sift特征点提取
- Sift算法
- 算法简介
- 算法操作步骤
- 图像金字塔
- 高斯金字塔
- 高斯函数与图像卷积
- 分离高斯卷积
- 高斯金子塔源码分析
- 高斯差分金字塔
- 差分金字塔的建立
- 差分金字塔源码分析
- 空间极值点(关键点)检测(最关键一步)
- 极值点检测过程
- 极值点检测示意
- 极值点检测源码分析
- 关键点定位
- 关键点精确定位
- 消除边缘响应
- 精确定位中的泰勒插值源码分析
- 为关键点方向分配
- 特征点描述符
- 本章疑问
Sift算法
算法简介
尺度不变特征转换即SIFT (Scale-invariant feature transform)。
1.它⽤来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量。
2.局部影像特征的描述与侦测可以帮助辨识物体,SIFT特征是基于物体上的⼀些局部外观的兴趣点⽽与影像的⼤⼩和旋转⽆关。
3.SIFT算法的实质是在不同的尺度空间上查找关键点(特征点),并计算出关键点的⽅向。SIFT所查找到的关键点是⼀些⼗分突出,不会因光照,仿射变换和噪⾳等因素⽽变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。
算法操作步骤
图像金字塔
高斯金字塔
1.图像⾼斯⾦字塔(Gaussian Pyramid)是采⽤⾼斯函数对图像进⾏模糊以及降采样处理得到。
将一张图片处理成每组6张,每组的尺寸相同但模糊系数不同。模糊系数取值如下:
降采样:
sigma 全取点 卷积
2sigma 隔点取点 卷积
当sigma的系数为2,4,8……时,开始降采样
上图第二个公式的含义:先用0.5的高斯核卷积,再用1.52的高斯核卷积与直接用1.6的高斯核卷积的效果相同!!
S:层数
n:欲提前特征的图片张数
竖直方向:尺度方向
高斯函数与图像卷积
根据3σ原则,使⽤NxN的模板在图像每⼀个像素点处操作,其中N=[(6σ+1)]且向上取最邻近奇数。
分离高斯卷积
1.直接与图像卷积,速度⽐较慢,同时图像边缘信息也会损失严重。可以使⽤分离的⾼斯卷积(即先⽤1xN的模板沿着X⽅向对图像卷积⼀次,然后⽤Nx1的模板沿着Y⽅向对图像再卷积⼀次,其中N=[(6σ+1)]且向上取最邻近奇数),这样既省时也减⼩了直接卷积对图像边缘信息的严重损失。
高斯金子塔源码分析
高斯差分金字塔
图像平移尺度归一化就是指通过变换消除平移和比例缩放对图像的影响。
差分金字塔的建立
差分⾦字塔的是在⾼斯⾦字塔的基础上操作的,其建⽴过程是:在⾼斯⾦⼦塔中的每组中相邻两层相减(下⼀层减上⼀层)就⽣成⾼斯差分⾦字塔。
同一组每层相减,得到高斯差分金字塔。
疑问:差分前面每组有六层,为什么变成5层了?
差分金字塔源码分析
空间极值点(关键点)检测(最关键一步)
关键点是由DOG空间的局部极值点组成的,关键点的初步探查是通过同⼀组内各DoG相邻两层图像之间⽐较完成的。
极值点检测过程
极值点检测示意
n:欲提前特征的图片张数
绝对值太小有可能是噪声,所以不保留这些点
极值点检测源码分析
关键点定位
以上⽅法检测到的极值点是离散空间的极值点。
以下通过拟合三维⼆次函数来精确确定关键点的位置和尺度,同时去除低对⽐度的关键点和不稳定的边缘响应点(因为DoG算⼦(边缘提取)会产⽣较强的边缘响应),以增强匹配稳定性、提⾼抗噪声能⼒。
关键点精确定位
离散空间的极值点并不是真正的极值点。利⽤已知的离散空间点插值得到的连续空间极值点的⽅法叫做⼦像素插值。
为了提⾼关键点的稳定性,需要对尺度空间DoG函数进⾏曲线插值。利⽤DoG函数在尺度空间的Taylor展开式(插值函数)为:(接下来看不懂了)
(泰勒在此处的作用大概是无限趋近减小误差)
求得极值点处的偏移量,当它在任⼀维度上的偏移量⼤于0.5时(即x或y或 σ),意味着插值中⼼已经偏移到它的邻近点上,所以必须改变当前关键点的位置。同时在新的位置上反复插值直到收敛;也有可能超出所设定的迭代次数或者超出图像边界的范围,此时这样的点应该删除。
因为很可能也是噪声。
消除边缘响应
对边缘响应找到的一些理解:
⼀个定义不好的⾼斯差分算⼦的极值在横跨边缘的地⽅有较⼤的主曲率,⽽在垂直边缘的⽅向有较⼩的主曲率。DOG算⼦会产⽣较强的边缘响应,需要剔除不稳定的边缘响应点。
上式最后一步少写了一个平方。
α、β是行列式的特征值
精确定位中的泰勒插值源码分析
为关键点方向分配
为了使描述符具有旋转不变性,需要利⽤图像的局部特征为给每⼀个关键点分配⼀个基准⽅向。使⽤图像梯度的方法求取局部结构的稳定方向。
在高斯金字塔中找!!
统计梯度方向和梯度幅值,之后在梯度区域内投票。(实际上,每10°算一个方向,共36个幅角值,投票最高是主方向,其次是辅方向,辅方向要求大于主方向的80%,否则没有)
有两个方向的特征点按照:两个特征点处理。
特征点描述符
对于每⼀个关键点,拥有三个信息:位置、尺度以及⽅向。接下来就是为每个关键点建⽴⼀个描述符,使其不随各种变化⽽改变,⽐如光照变化、视⾓变化等等。并且描述符应该有较⾼的独特性,以便于提⾼特征点正确匹配的概率。
匹配关键点算法:KNN。
关键点的匹配需要描述符来匹配。
128维向量:
插值计算每个种⼦点⼋个⽅向的梯度
Sift描述符具有旋转不变形:所以要把关键点的坐标轴旋转到主方向,之后再统计稳定的描述符。
同学给我的解释::
本章疑问
疑问1:差分前面每组有六层,为什么变成5层了?
疑问2:向量的泰勒变换运算看不懂。
疑问3:三线性插值