1.SIFT算法
1.1 图像尺度空间
尺度空间是让计算机能够对物体在不同尺度下有一个统一的认知,尺度空间的获取通常使用高斯模糊。
![在这里插入图片描述](https://img-blog.csdnimg.cn/5fe6b9ced4894d0db39042b9ffacab84.png)
σ决定了对图像的平滑程度,越大的σ值对应的 图像越模糊
多分辨率金字塔: 每层都要做高斯滤波
1.2高斯拆分金字塔(DOG)
如图所示:左侧是间隔的尺度空间图片,右侧是相邻的两层相减产生高斯差分图像 (找到重要特征)(寻找关键点)
DoG公式:
1.3 DoG空间极值检测
为了寻找尺度空间(z 轴)的极值点,每个像素点要和其图像域(同一尺度空间)和尺度域(相邻的尺度空间)的所有相邻点进行比较,当其大于(或者小于)所有相邻点时,该点就是极值点。如下图所示,中间的检测点要和其所在图像的3×3邻域8个像素点,以及其相邻的上下两层的3×3领域18个像素点,共26个像素点进行比较
1.4 关键点的精确定位
这些候选关键点是DOG空间的局部极值点,而且这些极值点均为离散的点,精确定位极值点的一种方法是,对尺度空间DoG函数进行曲线拟合,计算其极值点,从而实现关键点的精确定位。用的是用泰勒公式进行修正。
利用泰勒进行展开:
1.5消除边界影响
描述 函数的局部的曲率,a大,b小。 a/b>10 特征大的太多。我们认为是一个边界。
1.6特征点的主方向 (把点转化成向量,让计算机认识)
例如一个图片,不管两张图片怎么摆放,都可以得到相应的特征向量
1.7构建关键点的描述符
统计以特征点为圆心,以该特征点所在的高斯图像的尺度为1.5倍为半径的圆内的所有的像素方向和梯度幅值,并做1.5\sigma的高斯滤波。 在关键点的梯度计算后,使用直方图统计邻域内像素的梯度和方向
为保证特征矢量的旋转不变性(图像不同角度都确定是一个特征点) ,要以特征为中心,在附近邻域内将坐标轴旋转 \theta 角度,即将坐标轴旋转为主方向。
![在这里插入图片描述](https://img-blog.csdnimg.cn/c4cb2121c77f4c94b2d9428a695220d2.png)
旋转之后的主方向为中心取8x8的窗口,求每个像素的梯度幅值和方向,箭头方向代表梯度方向,长度代表梯度幅值,然后利用高斯窗口对其进行加权运算,最后在每个4x4的小块上绘制8个方向的梯度直方图,计算每个梯度方向的累加值,即可形成一个种子点,即每个特征的由4个种子点组成,每个种子点有8个方向的向量信息。
![在这里插入图片描述](https://img-blog.csdnimg.cn/0480543abad8476795cc05628ddb1e9d.png)
论文中建议对每个关键点使用4x4共16个种子点来描述,这样一个关键点就会产生128维的SIFT特征向量
论文引用:
Lowe D G. Object recognition from local scale-invariant features[C]//Proceedings of the seventh IEEE international conference on computer vision. Ieee, 1999, 2: 1150-1157.