-
2018-03-27 02:07:20SIFT(Scale-invariant feature transform) 是一种提取局部特征的技术。它将图片中的较为稳定的特征点提取出来,进行处理后生成描述符,形成独特的SIFT特征。这些特征具有尺度,旋转不变性,可以利用这些SIFT特征对图像进行匹配,识别。越是感受到SIFT在计算机视觉领域的应用之广,越是能够受到这篇论文的优美。
SIFT特征提取主要包括四个步骤:
1.使用DoG寻找候选兴趣点
2.精确定位兴趣点的位置
3.根据梯度方向,分配兴趣点的方向
4.使用128维向量描述兴趣点
1.使用DoG寻找候选兴趣点
首先介绍DoG函数
定义对图像做高斯卷积:
其中,
就是我们常用的高斯函数。σ代表的就是尺度,参数不同,对应不同的尺度
DoG(Difference of Gaussian)就是不同尺度的高斯核相减的差值。
这个函数是这篇论文的第一个创新点,采用DoG函数近似LoG函数,LoG函数已经被证明能够用来提取多尺度的特征点,参考博文https://blog.csdn.net/ghost__2011/article/details/79588573
而LoG函数的定义是
又
而
可以考虑是用差分方法近似
移项,得到:
这就是我们的DoG函数,(k-1)是一个常数项,对极值点的位置不会造成影响,和DoG方法的计算量要小于LoG,从而实现了计算量上的优化。
从图中可以看出,LoG函数和DoG函数是比较近似的。DoG检测的目的就是采用近似LoG方法在图像中寻找尺度不变得兴趣点。
接下来就是这篇论文的第二个创新点,建立高斯金字塔,建立高斯的目的,是为了给兴趣点增加尺度信息。
建立高斯金字塔的步骤是:
1.先将原始图片升采样,长宽均为原始图像的两倍
2.将原始图像不断做降采样,每次长宽都为上一次的二分之一(降采样可以先对图像进行高斯模糊后进行)
3.固定一个值s,这是我们希望两个降采样尺度间的尺度间隔,(因为完全的连续是不可能的,我们只能使它近似连续)DoG函数的运算就是讲两个经过不同高斯核卷积过的图像求出差积,而高斯金字塔的目的,是为了让图像在尺度上产生连续,从而计算出兴趣点响应最大的尺度。降采样其实就是改变了原始图像的尺度,这个地方的s就是我们在两个降采样尺度中又细分了s份,考虑DoG会减掉一层,而头尾的两层在采集极值的算法中(第5步)不能用,如果我们希望DoG的到的金字塔有s个间隔,那在模糊的金字塔就应该有s+3层。
也就是说,我们需要对每一个1,2步得到的图片进行s+3次高斯模糊运算,得到高斯金字塔,尺度的选取如上图所示,用σ,kσ一次模糊。
k这样定义的原因是每次降采样的尺度为尺度的两倍。
4.第三步构建了高斯金字塔后,再相邻相减就可以的到DoG金字塔。
5.我们选取的候选兴趣点就是差分金字塔在相邻尺度,中26个相邻值中的极大极小值。
最后得到的候选特征点就包括了三个信息,x,y坐标,σ所在的尺度
2.精确定位兴趣点的位置
空间尺度函数的泰勒展开式为:
对上式求导并让他等于零得到
带回泰勒级数
舍弃
这样做的目的是舍弃那些不明显的关键点
接下来是消除边缘响应,这样做的目的是因为DoG对边缘点的检测也相当敏感,容易受到噪声影响,为了提高兴趣点的可靠性,需要排除掉这些边缘的点。
主要思路是,计算关键点的主曲率,对于在边上的关键点而言,穿过边缘方向的主曲率会远远大于沿着边缘方向上的主曲率,因此其主曲率的远大于位于角点的比值。
其中,
假设
则
判断主曲率考虑用(r+1)²和r的比值,SIFT建议使用r=10,实际上这就是对
的优化。
3.根据梯度方向,分配兴趣点的方向
排除掉一些不好的点后,我们考虑给每个兴趣点添加方向信息,从而达到旋转不变的性质。
采用兴趣点对应尺度作为模板计算
以特征点为中心,r=3*1.5σ为半径,方向分解为10度一个柱,共36个柱,采用高斯加权对窗口内的梯度量进行加权,形成36个柱的直方图,以最高的柱为兴趣点的方向,为描述符增加方向信息。
如果有别的柱值达到最大柱值的80%,则认为这个方向同样为兴趣点的方向,复制出一个兴趣点。
这样每一个兴趣点就拥有了坐标(算两个),尺度,方向四个信息。
4.使用128维向量描述兴趣点
在介绍SIFT最酷的一步之前我先介绍一个图
我们进过3的计算,会得到每个点的梯度量,以及梯度方向。
这个图中箭头方向就代表梯度方向,而箭头的长度就代表了梯度量。
考虑刚才我们为每一个兴趣点添加了方向信息,现在我们要对方向进行归一化,使兴趣点拥有方向不变性。
我们要做的就是一个范围内的方向,都随着主方向一起旋转,而主方向旋转到x轴的方向。
这个范围可以简化定义为16*16的像素,实际SIFT考虑于尺度等有关系。
计算公式为
接下来将范围内的每一个方向,梯度量信息分为4*4个部分,如果简化为16*16个像素,就对应每个部分为4*4个像素。
接着,对每一个部分中的方向,以45度为一个柱,共八个柱,对梯度量进行高斯加权后生成直方图。
这个图中一个小格子对应上面描述的一个部分。方向代表的45度一个的柱方向,箭头长度对应的是加权后的梯度量,4*4个部分,在乘上8个方向,得到了一个128维的向量
这个向量就是SIFT的特征点描述符。匹配两个特征点就是对两个向量进行距离运算。
SIFT的应用非常广泛,也非常酷,考虑以后会对应用写一篇博客。
更多相关内容 -
sift(matlab)_sift特征提取_siftmatlab_SIFT特征_人脸识别提取SIFT特征_人脸特征提取
2021-09-11 13:38:48实现人脸识别的特征提取特征,使用SIFT算法,可运行。Matlab环境。 -
matlabsift特征提取代码-LFDA:FDA
2021-05-21 16:15:08sift特征提取代码 基于RGB颜色空间的颜色特征与SIFT特征提取 ##目录 ##背景介绍 本项目是我参加大学生创新项目的一部分,我们将要创建一个旅游推荐系统,通过用户输入的图片进行相关的图像处理,最后得到与输入图片... -
sift特征提取与匹配C++范例(基于opencv、VS17)
2020-05-21 22:58:08sift特征提取与匹配C++代码,1000行完整代码,超详细注释,基本每五...1.提取特征点算法(包括尺度空间的极值探测、关键点的精确定位、确定关键点的主方向、关键点的描述); 2.匹配算法 3.运行需要调用openCV3.4.0库。 -
python利用opencv实现SIFT特征提取与匹配
2020-12-20 11:59:15本文实例为大家分享了利用opencv实现SIFT特征提取与匹配的具体代码,供大家参考,具体内容如下 1、SIFT 1.1、sift的定义 SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域... -
Sift特征提取——python代码实现
2018-12-27 17:00:42sift提取特征描述子,对图像进行处理,利用os.system()函数执行sift.exe文件 -
opencv实现的sift算法源码,包含了图像的SIFT特征提取,详细讲解SIFT关键点的提取过程,图像间的基于SIFT...
2018-11-06 22:43:43opencv实现的SIFT算法源码,包含图像的SIFT特征提取算法,以及图像之间的基于SIFT特征的匹配算法 -
MATLAB实现图像的SIFT特征提取,并做在不同光照、不同视角下的特征匹配-
2019-05-01 18:40:34matlab版本的源码,有详细的sift特征提取和匹配的步骤介绍,具体sift是什么我就不多说了。这个matlab版本的源码就是供初学者学习之用。本人也是刚刚学习,代码亲字试过,希望对大家有帮助,大家一起学习 -
sift特征提取,摄像头实时图像检测代码
2021-02-07 09:46:49sift特征提取,摄像头实时图像检测代码 -
matlabsift特征提取代码-colour-and-SIFT-feature-:获得图片色彩和SIFT功能的方法
2021-05-21 16:15:18sift特征提取代码 基于RGB颜色空间的颜色特征与SIFT特征提取 ##目录 ##背景介绍 本项目是我参加大学生创新项目的一部分,我们将要创建一个旅游推荐系统,通过用户输入的图片进行相关的图像处理,最后得到与输入图片... -
SIFT特征提取+匹配
2018-10-20 14:31:35该程序调用opencv库函数实现的SIFT特征点提取及匹配,其中有两组图片以供测试。程序配置库为opencv2.4.9+vs2013。 -
MATLAB实现SIFT特征提取算法
2022-05-08 11:37:511.基于MATLAB实现的SIFT特征提取算法 2.简单易用,有详细的实现过程 3.加入了Image Visualizer函数 -
计算机视觉第三次实验——SIFT特征提取与检索
2020-12-22 07:26:07文章目录计算机视觉第三次实验——SIFT特征提取与检索一,安装VLfeat1.1 下载地址1.2 注意二,获取像素集三,描述子代码了实现3.1 代码3.2 结果四,匹配描述子代码实现4.1代码4.2 结果五,给定一张输入的图片,在... -
SIFT特征提取
2018-10-24 22:46:55SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),“尺度”的直观第一印象就是大小,尺度不变就是和图片的大小没有关系,简单的SIFT的理解是最后检测出来的特征点匹配适用于所有尺寸的图像 -
opencv实现的SIFT特征提取与匹配算法
2015-06-18 22:21:37用opencv+VS2012实现的SIFT特征提取与匹配算法,已编译通过,直接打开就能运行 -
一个很赞的sift特征提取的matlab程序
2019-01-17 14:12:50一个很赞的sift特征提取的matlab程序,这里面的函数都是自定义的,可以实现两幅图像的对应相同点的连接,下通过sift特征匹配的 -
matlab sift特征提取
2015-10-21 11:00:50本人也是刚刚学习,代码亲字试过,希望对大家有帮助,大家一起学习交流,我也是从别人那考来的代码 -
利用MATLAB实现SIFT特征提取.zip
2020-04-12 10:29:11在MATLAB上实现SIFT特征提取,内含MATLAB源代码,以及文档使用说明,帮助你快速进行相关开发 -
matlab实现sift提取特征点代码程序
2021-12-06 21:01:55matlab实现sift提取特征点代码程序 SIFT算法的相关实现 自己用matlab写的sift特征点检测与匹配程序,运行能通过 -
经典SIFT特征点提取MATLAB代码
2021-04-22 14:30:18MATLAB源码,SIFT图像拼接特征点匹配 MATLAB源码,SIFT图像拼接特征点匹配 MATLAB源码,SIFT图像拼接特征点匹配 MATLAB源码,SIFT图像拼接特征点匹配 -
OpenCV3.0实现SIFT特征提取+RANSAC剔除误匹配点
2018-11-21 16:22:10OpenCV3.0实现SIFT特征提取+RANSAC剔除误匹配点,首先进行提取SIFT特征点。然后再通过RANSAC剔除误匹配点 -
SIFT特征提取算法的FPGA实时实现.pdf
2021-07-13 12:38:44SIFT特征提取算法的FPGA实时实现.pdf -
SIFT特征提取算法实验
2021-01-06 11:19:31SIFT特征提取算法实验 SIFT特征提取算法 1.1 算法定义 1.2 SIFT特征提取算法实验: 1.3 构造数据集 检测提取感兴趣点 2.1代码实现: 2.2.绘制特征点代码分析: 提取数据集中每张图片的SIFT特征并展示 3.1实现对比: ... -
Sift特征提取
2018-05-18 11:21:43Sift特征提取代码 C++实现 包括Ransac拟合算法 可以用于全景图像拼接或者其他需要特征提取的地方 -
SIFT特征提取C++
2011-10-31 22:14:28Sift是David Lowe于1999年提出的局部特征描述子,可以处理两幅图像之间发生平移、旋转、...SIFT算法是一种提取局部特征的算法,也是一种模式识别技术,其基本思想是在尺度空间寻找极值点,提取位置,尺度,旋转不变量