# Scale-invariant feature transform

尺度不变性特征变换

# 步骤

# 建立高斯金字塔

利用不同高斯核参数对图片卷积,得到第一组图片;然后对第一组图片进行降采样;再用不同尺度的高斯核卷积,采样...,建立一个高斯金字塔。同一组的尺寸是一样的,将相邻两层相减,就得到差分的高斯金字塔

# 关键点位置确定

# 阈值化

abs(val)>0.5T/nabs(val) > 0.5*T/n

# 在差分金字塔中找极值

一幅DoG图像,从左到右,从上到下依次轮询每个点,让目标点跟它周围的8邻域的8个点比较,除此之外,每一层不是还生成了5幅DoG图像,同时也让目标点跟它相邻Scale的DoG图像做三维的空间比较

如果一个点经过如此比较后,确实是这26个点中的极大或极小值,就认为该点是图像在该尺寸下的极值点。

可以想象,如果一个空间有6张图,那么产生5张DoG,到这里就只有3张可供选择的特征点了。

# 调整极值点的位置

因为实际上尺度是连续的,这里从三个相邻的尺度层提取的可能不正好是极值,因此用一下插值,或者泰勒展开,计算真正的极值

# 舍去低对比度的点

得到极值点的值小于某个值,则认为对比度太低了,可以删除

# 边缘效应的去除

利用海森矩阵消除边缘效应,点在x、y方向上的曲率应该差不多

# 为关键点赋予方向

以特征点为圆心,以该特征点所在高斯图像尺度为1.5倍为半径圆内的所有像素的梯度方向以及梯度的幅值进行统计,然后做高斯滤波,然后统计得到周围像素属于某个梯度最多的作为这个特征点的主方向

下面这图就是提取的特征点,圈的大小代表尺度大小,线代表主梯度的方向,有的有辅方向

# 构建关键点描述符

关键点的四个参数,位置、尺度和主方向:x,y,\sigma,d,但是目的是对两张图片的关键点进行匹配,因此需要对每个图的关键点进行描述,所以需要构建关键点的描述符,在SIFT中是一个128维的向量,是用k近邻算法进行分类

关键点描述符:将关键点周围的像素分成4x4的子区域,在每个子区域统计8个方向的梯度长度,每个格子有8个方向,一共4x4个格子,因此一共有128个数,就是描述符

一般还会对关键点周围的点进行旋转,对齐主方向,从而实现旋转不变性

最终得到关键点和关键点描述符!!