【计算机视觉03】SIFT特征提取与检索

回眸只為那壹抹淺笑 提交于 2020-03-09 00:35:42

本文参考博客:https://blog.csdn.net/fangjian1204/article/details/10522455

一、建立高斯差分金字塔

1.基本概念

高斯金字塔里有两个概念:组(Octave)和层(Level);
不同大小的图片是组;同样大小的图片,在内部是层;
在同一组内,不同层图像的尺寸是一样的;

2.构建高斯金字塔

高斯金字塔每层中的多幅图像,是通过对同一幅输入图像进行不同尺度的高斯卷积得来的。
高斯金字塔的组数为:
在这里插入图片描述
计算高斯模糊的系数σ:
在这里插入图片描述
σ为尺度空间坐标,s为每组中层坐标,σ0为初始尺度,S为每组层数(一般层数为3~5)。
根据公式推理可以得到,金字塔组内各层尺度以及组间各图像尺度关系:相邻两组的同一层尺度为2倍的关系

3.构建Dog金字塔

高斯金字塔相邻两层相减,便可以得到 DoG (Difference of Gaussian)金字塔。
后面Sift特征点的提取都是在DOG金字塔上进行的。
在这里插入图片描述

二、关键点位置确定

1.基本概念

如上图的金字塔,高斯尺度空间金字塔中每组有五层不同尺度图像,相邻两层相减得到四层DoG金字塔。关键点搜索就是在这四层DoG图像上寻找局部极值点。

2.DoG局部极值点

在这里插入图片描述
以中心点进行3X3X3的相邻点比较,就是和它同尺度的8个相邻点和上下相邻尺度对应的点进行比较;以确保在尺度空间和二维图像空间都检测到极值点。

3.去除边缘响应

除了DoG响应较低的点,DoG对图像中的边缘有较强的响应值,一些响应较强的点也不是稳定的特征点。我们需要剔除不稳定的边缘响应点。

三、关键点方向分配

为了实现图像旋转不变性,为每个关键点指定方向参数;
使用图像的梯度直方图法求关键点局部结构的稳定方向。
3.1 使用直方图统计邻域内像素对应的梯度方向和幅值
3.2 梯度方向直方图的横轴是梯度方向角,纵轴是剃度方向角对应的梯度幅值累加值。梯度方向直方图将0°~360°的范围分为36个柱,每10°为一个柱。下图是从高斯图像上求取梯度,再由梯度得到梯度方向直方图的例图。
在这里插入图片描述
3.3 直方图峰值代表该关键点的主方向,另一个相当于主峰值80%的峰值时,将这个方向认为是该关键点的辅方向;可以看出一个关键点可能检测得到多个方向,这可以增强匹配的鲁棒性.

四、关键点描述

4.1 现在已经为关键点赋予了图像位置、尺度以及方向,这三个参数称为一个特征区域。根据关键点周围的局部特性计算一个特征描述子,即一个特征向量。
4.2 首先将坐标轴旋转为特征点的方向,以保证旋转不变性。
在这里插入图片描述
旋转后区域内采样点新的坐标为:
在这里插入图片描述
4.3 对每个特征点使用4x4共16个种子点来描述,每个种子点有8个方向向量信息,每个特征点就有4x4x8=128个数据,即形成128维特征向量的特征描述符。
在这里插入图片描述
4.4 SIFT特征向量已去除了尺度变化、旋转等几何变形因素的影响。接下去对特征向量的长度归一化,可以去除光照变化的影响。
4.5 对于图像亮度的变化,每个像素值都会加上一个数值,这对计算的梯度是没有影响的。对于非线性的光线变化,梯度大小会受影响,但是梯度的方向不会有大的变化.在 128 维的单位向量中,滤除梯度大于某个值(经验值0.2)的梯度值,然后重新归一化。这样梯度大小的作用被虚弱了,而方向信息的作用被强化了。

五、匹配

以两个特征点描述符之间的欧式距离作为特征点匹配的相似度准则。

5.1 数据集

针对自己所处的环境,拍摄多张图片(注意要来自不同场景),构造出一个小的数据集
在这里插入图片描述

5.2 图片的SIFT特征提取

实现数据集中,每张图片的SIFT特征提取,并展示特征点
在这里插入图片描述
在这里插入图片描述
(这里不一一展示结果)

5.3 计算两张图片SIFT特征匹配结果

在这里插入图片描述

5.4 检索匹配

给定一张输入的图片,在数据集内部进行检索,输出与其匹配最多的三张图片

六、实验总结

-错误分析

实验之前要准备一个 VLFeat工具包,没有这个工具包的时候,程序会报错
No such file or directory: ‘*.sift’

.在解压之后的这个文件中:
在这里插入图片描述
将这两个文件复制到项目的文件夹中在这里插入图片描述
3.
修改PCV/localdescriptors的sift.py文件
cmmd
在这里插入图片描述

-算法分析

  1. SIFT特征是图像的局部特征,对旋转、尺度缩放、亮度变化保持不变性,对视角变化、噪声也保持一定程度的稳定性。
  2. 图片匹配:给定的图片是👇在这里插入图片描述
    匹配出的图片:
    在这里插入图片描述
  3. 求主方向的时候依赖局部区域像素的梯度方向,可能就会使找到的主方向不准确,后面的特征向量提取以及匹配又都依赖于主方向,即使偏差角度不大,也可能会造成后面特征匹配的误差,从而匹配不成功。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!