关于SIFT的一些总结

近来一直在研究SIFT算法,参考了一些资料之后自己总结了一下,防止之后忘记,也希望可以帮到对SIFT感到头疼的人

SIFT算法的特点:
1.SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性;
2.独特性(Distinctiveness)好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配;
3.多量性,即使少数的几个物体也可以产生大量的SIFT特征向量;
4.高速性,经优化的SIFT匹配算法甚至可以达到实时的要求;
5.可扩展性,可以很方便的与其他形式的特征向量进行联合。

步骤:
1.构建尺度空间
这里的尺度指的是各种模糊程度,也就是高斯模糊的程度。大尺度对应图像的概貌特征,小尺度对应图像的细节特征。大的σ值对应粗糙尺度(低分辨率),反之,对应精细尺度(高分辨率)。
具体实现:金字塔形式:首先是图片的不同尺寸,每一塔大概是上一塔的1/4,其中每一层按照不同的高斯模糊程度进行模糊。
关于SIFT的一些总结_第1张图片
此时划分为左边的金字塔
在实际计算时,使用高斯金字塔(上图左)每组中相邻上下两层图像相减,得到高斯差分图像(上图右),进行极值检测。

2.空间极值点检测
每一个像素都要和周围的相似进行对比,也就是检测点(中间点)要和同一塔同一层的8个点和同一塔相邻上下层的18个点,总计26个点进行比较,若该监测点为极值点(最大值或者最小值,那么他就是关键点)
关于SIFT的一些总结_第2张图片
DOG空间极值检测

在极值比较的过程中,每一组图像的首末两层是无法进行极值比较的,为了满足尺度变化的连续性,我们在每一组图像的顶层继续用高斯模糊生成了 3 幅图像,高斯金字塔有每组S+3层图像。DOG金字塔每组有S+2层图像.(这里我们来理解一下这个S+2是怎么来的,根据上图,检测一个关键点需要自己这一层和上下两层,也就是说总共需要三层,所以假设我们只是检测一层,那么就需要额外两层,而高斯金字塔总比高斯差分图像多一层(见上上图),所以当高斯差分图像检测一层的时候,需要高斯金字塔多出三层)

3.去除掉不好的特征点
(这一步本质上要去掉DoG局部曲率非常不对称的像素)
4.给特征点赋值128纬的方向参数(特征点重要的三个参数:位置,所在尺度,方向,满足这三点也称为描述子)
位置我们在步骤2中已经可以确定了,确认方向的目的是为了使关键点拥有旋转不变性。具体算法是如下公式

M是所在尺度,也就是模值,θ是角度,有了角度就能确定方向,三者聚齐就能确定一个SIFT特征区域
关于SIFT的一些总结_第3张图片
具体解释一下上面这一张图,首先我们找到了一个关键点,如下图
关于SIFT的一些总结_第4张图片
之后我们便可以计算这个关键点周围的每一个点的尺度以及方向,在这张图中具体表现出来就是箭头的长度代表尺度大小,所指方向自然就是这个点的方向。
接着把各个角度归类,这里按照45度为一类,所以分为八类,直方图中的峰值就是主方向,其他的达到最大值80%的方向可作为辅助方向。上图的维数是2*2*8 = 32维,一般是计算128维的
关于SIFT的一些总结_第5张图片
上图这个是128维,也就是每4*4就可以构建一个直方图,每一个直方图会有8个方向,所以16*16也就可以分成4*4(右图)个小的直方图,所以4*4*8 = 128纬
5.根据SIFT进行Match(也就是根据一张图的描述子和下一张图的描述子进行匹配啦)
这里需要涉及一个概念,也就是欧式距离,简单点来说就是两点间的距离公式
关于SIFT的一些总结_第6张图片
此时我们每一个描述子上都是128维的SIFT特征向量,此时SIFT已经具有去除掉尺度,旋转等因素的影响了,此时继续将特征向量归一化,可以去除掉光照变化的影响。 当两幅图像的SIFT特征向量生成后,下一步我们采用关键点特征向量的欧式距离来作为两幅图像中关键点的相似性判定度量。取图像1中的某个关键点,并找出其与图像2中欧式距离最近的前两个关键点,在这两个关键点中,如果最近的距离除以次近的距离少于某个比例阈值,则接受这一对匹配点。降低这个比例阈值,SIFT匹配点数目会减少,但更加稳定。
参考内容
https://blog.csdn.net/abcjennifer/article/details/7639681/?ticket=ST-64237-u9VDdWSajz2iJXCDI06E-passport.csdn.net
https://blog.csdn.net/chezhai/article/details/66044054

你可能感兴趣的:(图像领域,SIFT)