首页 > 编程知识 正文

sift特征提取算法,sift算法适用于什么情况

时间:2023-05-03 07:02:45 阅读:39623 作者:3342

前言1、jwdqc差分金字塔构建1、jwdqc差分金字塔构建2、jwdqc差分金字塔构建3、塔建设中参数设置及相关细节问题2、关键点位置确定1、阈值化2、在jwdqc差分金字塔中查找极值点3、调整极值点位置去除边缘效应(给关键点赋予方向1、子像素点比例,找到离散点比例2、统计3、主方向4,构建关键点描述符1,使其向主方向所在的方向2旋转,决定关键点附近区域的大小。 3、在规定领域做128维描述符的统计总结

前言sift (scaleinvariantfeaturetransform )是一种尺度不变特征变换算法,对图像的缩放、平移和旋转具有不变的特征。 在对图像进行特征提取和匹配时,光照、仿射、投影变换也有一定的不变性,是一种鲁棒性很强的特征提取和匹配算法。 以下是SIFT特征提取和匹配算法的处理流程。

一、构建jwdqc差分金字塔1,构建jwdqc金字塔。 可见,对于jwdqc核来说,通过不同的方差计算可以得到不同的jwdqc核。 用不同尺度的jwdqc比对原图像进行卷积,卷积后得到最下面的Octave1图群。 jwdqc金字塔上方的Octave2图群是通过抽取Ovtave1图群对Octave1图群进行下采样,然后用不同尺度的jwdqc核进行卷积而得到的。 也就是说:

通过对Octave1图群中的图像进行稀疏下采样,对下采样后的图群进行不同尺度的jwdqc核卷积以上两个步骤,得到Octave2图群。 从这个顺序类推,就是Octave3是在Octave2中进行下采样,然后进行卷积而得到的…。 这样,如下图所示,得到了jwdqc金字塔。

2、创建jwdqc差分金字塔。 我们现在得到了图像的jwdqc金字塔。 还不能结束。 我们的最终目的是得到jwdqc差分金字塔。

由于同一图像组中的图像大小相同,因此可以通过减去两个相邻层的图像像素点来创建差异图层。 这里的减法是传统的负号。 这样,对各种Octave层进行了此操作,得到了jwdqc差分金字塔,如下图所示。

3、塔建设中参数的设置及相关细节问题这里的参数主要有两个。

O:jwdqc金字塔有多少个Octave图组S:jwdqc金字塔? 每个Octave组有多个上图中第一个表达式的层次结构? 选择多少组实际上可以自己设定。 但是,在原来的SIFT论文中给出了建议值。

对o的选择: m,n是指原图像的长度和宽度,求出最小值后,加上log后减去3对s的选择: n是指我们想从几张图像中提取特征。 一般两个的话n即取2,再加上3,s为5 现在萌生了第一个问题,3是怎么来的呢?为什么两个公式中都有3?

答:针对这个问题,从结果分析原因。 可知,如果对原始jwdqc金字塔中的5个图进行像素点减法操作,则上述图2的jwdqc差分金字塔只能得到4个图。 为4张图像寻找特征点。 我们在尺度空间(上述方差即尺度)中寻找极值点。 它除了x、y两个平面方向外,还有另一个比例方向,可以理解为z轴。 那对于最上面的差阶层来说,其上已经没有图像了,所以我们不能在z方向上引导它。 也就是说,我们在最上面的差层次中找不到极值点。 同样,最底层的差层次也找不到极值点。

其最上层和最下层都找不到极值点,减去2。 请注意,从jwdqc金字塔到jwdqc差分金字塔的转换过程中也丢失了一个阶段。 再加上损失,就会有2 1,也就是3的由来。第二个疑问,SIFT为什么要建立jwdqc金字塔这样的一种结构?

答:因为jwdqc金字塔是分段采样得到的金字塔状。 该算法在处理图像时,希望对不同拍摄距离得到的图像具有远近特性的不变性。 可以对同一物体进行识别,而与照相机所拥有的距离无关。 那个jwdqc金字塔这样下面的大结构也模拟了这个构想。 同样,用jwdqc核卷积实际上是模拟近清晰、远模糊。 并且数学证明,jwdqc核是唯一能够模拟近清晰、远模糊线性核的。 这就是为什么我们只能使用jwdqc核。

第三个疑问,建塔过程中的如何配置的呢?

a )如下图所示,用k=2除以n次方。 对于Octave1的第一层,原样使用,第二层乘以,即k,依此类推。 对于Octave2的第一层,使用Octave1倒数第三层。 倒数第三层的为k^n,也就是说,为了收集2,可以得到一个稀疏点的下采样效果。

第四个疑问,0又是如何设置的呢?

因为我们一张接一张自己拍的照片也不是完全清楚,而且有模糊的尺度。 论文认为模糊尺度为0.5,期望第一次jwdqc核卷积后的尺度达到1.6。 那么,用1.52的方差0进行卷积,可以得到1.6的比例。 实际上,这个过程利用了jwdqc核的类梯度株数的性质,如图的右下式所示。

注意:用0.5尺度的jwdqc核进行解卷积,然后再用1.52尺度的jwdqc核对进行解卷积。 上述操作具有与通过直接在1.6比例的jwdqc内核中进行卷积而获得的图像相同的效果。

二、关键点(key points)位置确定 1、阈值化 abs(val) > 0.5*T/nT=0.04

以上公式,通过阈值化去掉噪声点。

2、在jwdqc差分金字塔中找极值点

由于我们是在尺度空间中进行极值点的查找的,除了平面x、y轴外还有个尺度的σ轴,所以我们要在26个点(三层)中找到极大值点或极小值点,如下图所示。

我们通过这种方式,实际上是在离散空间中找到极值点的。实际上,真实极值点存在的位置可能并不是在这些个离散点上的,而是在离散空间中我们找到的极值点附近的点。所以我们通过一些方式找到一个精确的亚像素位置的真正极值点。
那么,用什么方式来进行这个真实极值点寻找呢?体贴的铅笔展开。

3、调整极值点位置

在检测到的极值点X0附近做三元二阶体贴的铅笔展开,也就是做一个X0处函数的近似,如下图。

得到f(X)后,我们对f(X)求导,如下:

此处,我们得到的X一帽,相当于是我们得到的X0相对于真实极值点的位移量。我们将这个值反代入f(X)中,就得到了真实极值点的值,如下。

当然,在算法实现时,我们求得真实极值点是一个迭代的过程。有三种情况:

设置的迭代条件:X一帽的三个分量x、y、σ均小于0.5时,方可成立。此时位移量已经足够小了,我们就认为已经收敛了。出现函数不收敛的情况,那我们将这么点直接舍去。函数已经收敛,但解超出了一定范围,舍去。 4、舍去低对比度的点 若|f(X)| < T/n,则舍去X

通过以上公式,舍去对比度较低的点,很可能是个噪声点。

5、边缘效应的去除(难点)

首先,我们引入一个海参矩阵,如下:

矩阵中的值,实际上就是上文求真实极值点过程中,框选的四个值。

海参矩阵可以描述函数的局部的曲率。我们希望某个点在x、y两个方向的曲率差不多,否则的话它很可能是一个边缘点。根据数学上的概念,海参矩阵的特征值和曲率是呈正比的。
此处我们不去算它的特征值,太麻烦了。通过引入迹和行列式来代替特征值α和β的关系,如下:

若Det(H)<0,说明两个特征值已经异号了,也就是曲率肯定是不接近的,存在边缘效应,直接舍去X点。

若Det(H)>0且α>β,说明γ>1,如下:

由于(γ+1)^2/γ化简后是一个对勾函数,γ>1,也就变成了一个单增函数。那么在γ=1时就是他的最小值。由于γ=α/β,γ的值越小则曲率越低,我们为γ设置一个阈值,建议取10。也就是:

三、为关键点赋予方向

此时我们已经确定了关键点,下面要做的就是为关键点赋予方向。假设我们找到的关键点如下图,红点是关键点。

1、亚像素点尺度去对应离散点尺度

首先,我们在jwdqc金字塔上找到和关键点的σ值最接近的某个jwdqc图层所对应的尺度σx。(也就是从亚像素点尺度去对应离散点的尺度)

2、统计

统计 以该特征点为圆心,以1.5倍的σx为半径的圆内的所有梯度方向及其梯度幅值,并做1.5σ的jwdqc滤波。(此处做jwdqc滤波的意义就是为了加权,使得离中心越近的点权值越高)

3、找到主方向

通过统计结果找到该特征点的主方向,也可能存在辅方向(>80%则有)。对于有两个方向的特征点,实际上我们是以两个特征点去处理的。

四、构建关键点的描述符

通过上文操作,我们已经确定了关键点的xy位置信息、尺度σ以及方向。为了方便后续关键点匹配,我们最后一步要做的就是构建关键点的描述符。在SIFT算法中,描述符其实是一个128维的向量。在特征点匹配过程中,通过k近邻等方式对特征点进行匹配。

1、旋转至主方向所在方向

将特征点周围的区域旋转至主方向所对应的方向。这也是SIFT算法具有旋转不变性的原因所在。

2、确定关键点附近区域的大小。

如下图所示,论文中的区域大小是这样设置的。m取3,mσ是指每个小区域的边长大小。d是指所确定的区域中在x、y方向上有多少个小区域,论文中取4。

3、在确定的区域上做128维描述符统计

在4×4个子区域中,包含了很多梯度方向。经过jwdqc加权后,在每个子区域中统计8个方向的梯度长度。128维向量是怎么来的呢?16*8。16是指16个子区域,8是指8个方向。那么我们按照顺序将128个梯度长度标记即可得到关键点的描述符。

完成关键点进行描述后,我们就可以用K近邻等方式对最接近的两个关键点进行匹配。这样也就完成了特征点的匹配工作啦!

总结

本文具体介绍了SIFT算法的原理及流程。之前用SIFT、SURF、ORB等算法做过相关项目,但仅仅是跑了代码,算法原理也没有很理解。这次终于把SIFT部分梳理通透啦!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。