版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、SIFT特征分析与源码解读分类:机器视觉与模式识别2013-11-1922:2810人阅读评论(0)收藏举报目录(?)+sift(Scale-invariantfeaturetransform)是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interestpoints,orcornerpoints)及其有关scale和orientation的描述子得到特征并进行图像特征点匹配,获得了良好效果,详细解析如下:算法描述SIFT特征不只具有尺度不变性,即使改变旋转角度,图像亮度或拍摄视角,仍然能够得到好的检测效果。整个算法分为以下几个部分:构建尺度空间这是一个初始化操作,尺度空间理论目的是
2、模拟图像数据的多尺度特征。高斯卷积核是实现尺度变换的唯一线性核,于是一副二维图像的尺度空间定义为:G(其中G(x,y,。)是尺度可变高斯函数(x,y)是空间坐标,是尺度坐标。o大小决定图像的平滑程度,大尺度对应图像的概貌特征,小尺度对应图像的细节特征。大的o值对应粗糙尺度(低分辨率),反之,对应Dy.o=(G(耳4辰T)一G(足J(巧讷=L(x.y,k(j)一y,a).精细尺度(高分辨率)。为了有效的在尺度空间检测到稳定的关键点,提出了高斯差分尺度空间(DOGscale-space)。利用不同尺度的高斯差分核与图像卷积生成。G(2ktjyAGCTG(2b)*下图所示不同o下图像尺度空间:G(2
3、it2cr)*7Gikal:心M二G(/b)忖关于尺度空间的理解说明:2k”中的2是必须的,尺度空间是连续的。在Lowe的论文中,将第0层的初始尺度定为1.6(最模糊),图片的初始尺度定为0.5(最清晰).在检测极值点前对原始图像的高斯平滑以致图像丢失高频信息,所以Lowe建议在建立尺度空间前首先对原始图像长宽扩展一倍,以保留原始图像信息,增加特征点数量。尺度越大图像越模糊。图像金字塔的建立:对于一幅图像I,建立其在不同尺度(scale)的图像,也成为子八度(octave),这是为了scale-invariant,也就是在任何尺度都能够有对应的特征点,第一个子八度的scale为原图大小,后面每
4、个octave为上一个octave降采样的结果,即原图的1/4(长宽分别减半),构成下一个子八度(高一层金字塔)。*(next抽It(first;iDifferenceofSaurian(DOG)Gaussian宀)尺度空间的所有取值,i为octave的塔数(第几个塔),s为每塔层数由图片size决定建几个塔,每塔几层图像S般为3-5层)。0塔的第0层是原始图像(或你double后的图像),往上每一层是对其下一层进行Laplacian变换(高斯卷积,其中O值渐大,例如可以是6k9,k*k*6),直观上看来越往上图片越模糊。塔间的图片是降采样关系,例如1塔的第0层可以由0塔的第3层downsam
5、ple得到,然后进行与0塔类似的高斯卷积操作。2.LoG近似DoG找到关键点检测DOG尺度空间极值点为了寻找尺度空间的极值点,每一个采样点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。如图所示,中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9x2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。一个点如果在DOG尺度空间本层以及上下两层的26个领域中是最大或最小值时,就认为该点是图像在该尺度下的一个特征点,如图所示。同一组中的相邻尺度(由于k的取值关系,肯定是上下层)之间进行寻找s=3的情况在极值比较的过程中,每一组图像的首末两层是无法进行极值比
6、较的,为了满足尺度变化的连续性(下面有详解),我们在每一组图像的顶层继续用高斯模糊生成了3幅图像,高斯金字塔有每组S+3层图像。DOG金字塔每组有S+2层图像.这里有的童鞋不理解什么叫为了满足尺度变化的连续性,现在做仔细阐述:k=i/s=2i/3,假设s=3,也就是每个塔里有3层,贝卩2那么按照上图可得GaussSpace和DoGspace分别有3个(s个)和2个(s-1个)分量,在DoGspace中,1st-octave两项分别是CT,ko;2nd-octave两项分别是2o,2ko;由于无法比较极值,我们必须在高斯空间继续添加高斯模糊项,使律形成o,ko,k26k3o,k4o这样就可以选择
7、DoGspace中的中间三项ko,k2o,k3o(只有左右都有才能有极值),那么下一octave中(由上一层降采样获得)所得三项即为2ko,2k2o,2k3o,其首项2ko=24/3。刚好与上一octave末项k3o=23/3尺度变化连续起来,所以每次要在Gaussianspace添加3项,每组(塔)共S+3层图像,相应的DoG金字塔有S+2层图像。使用LaplacianofGaussian能够很好地找到找到图像中的兴趣点,但是需要大量的计算量,所以使用DifferenceofGaussian图像的极大极小值近似寻找特征点.DOG算子计算简单,是尺度归一化的LoG算子的近似,有关DOG寻找特征
8、点的介绍及方法详见/abcjennifer/article/details/7639488,极值点检测用的Nn-MaximaiSuppressi。除去不好的特征点通过拟和三维二次函数以精确确定关键点的位置和尺度(达到亚像素精度),同时去除低对比度的关键点和不稳定的边缘响应点(因为DoG算子会产生较强的边缘响应),以增强匹配稳定性、提高抗噪声能力,在这里使用近似HarrisCorner检测器。空间尺度函数泰勒展开式如下x)cQDt1t&2D=D+X+2X而xd2DdD,对上式求导,并令其为o,得到精确的在己经检测到的特征点中,要去掉低对比度的特征点和不稳定的边缘响应点。去除低对比度的点:把公式(
9、2)代入公式,即在DoGSpace的极值点处D(x)取值,只取前两项可得:D十2麻位置,得。主曲率通过一个2x2的Hessian矩阵H求出:Tt(H)二+D辣二*厲Det(H)=DDyy(Dry)=D对(H)Tt(H)2(a+.i)3(r/J+i)2(r+l)2(r+1)21的值在两个特征值相等的时候最小,随着r的增大而增大,因此,为了检测主曲率是否在某域值r下,只需检测0.03,该特征点就保留下来,否则丢弃。边缘响应的去除一个定义不好的高斯差分算子的极值在横跨边缘的地方有较大的主曲率,而在垂直边缘的方向有较小的主曲率导数由采样点相邻差估计得到。D的主曲率和H的特征值成正比,令a为较大特征值,
10、p为较小的特征值,则if(a+P)/ap(r+1)2/r,throwitout.在的文章中,取一似给特征点赋值一个128维方向参数上一步中确定了每幅图中的特征点,为每个特征点计算一个方向,依照这个方向做进一步的计算,利用关键点邻域像素的梯度方向分布特性为每个关键点指定方向参数,使算子具备旋转不变性。懦亿力二j卩(兀十i丿)一(兀一十卩(兀丁十1)丄(工丿or悉、沪atan2(L(x,7+l)-匸诙一(址十1)-L(x-l,y)为(x,y)处梯度的模值和方向公式。其中L所用的尺度为每个关键点各自所在的尺度。至此,图像的关键点已经检测完毕,每个关键点有三个信息:位置,所处尺度、方向,由此可以确定一
11、个SIFT特征区域。梯度直方图的范围是0-360度,其中每10度一个柱,总共36个柱。随着距中心点越远的领域其对直方图的贡献也响应减小.Lowe论文中还提到要使用高斯函数对直方图进行平滑,减少突变的影响。在实际计算时,我们在以关键点为中心的邻域窗口内采样,并用直方图统计邻域像素的梯度方向。梯度直方图的范围是0360度,其中每45度一个柱,总共8个柱,或者每10度一个柱,总共36个柱。Lowe论文中还提到要使用高斯函数对直方图进行平滑,减少突变的影响。直方图的峰值则代表了该关键点处邻域梯度的主方向,即作为该关键点的方向。直方图中的峰值就是主方向,其他的达到最大值80%的方向可作为辅助方向由梯度方
12、向直方图确定主梯度方向该步中将建立所有scale中特征点的描述子(128维)IdentifypeakandassignorientationandsumofmagnitudetokeypointTheusermaychooseathresholdtoexcludekeypointsbasedontheirassignedsumofmagnitudes.关键点描述子的生成步骤錠转主方问将坐标轴旋转为关键点西方向,以确保旋转不变性生成描述子对于一个关琏点产生也8个数据,即最终形成佢吕维丙FT特征向量归一化烙特征向量苗长度归一化:则可顷进址理步去除光照变化鬥影响J通过对关键点周围图像区域分块,计算块
13、内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象,具有唯一性。关键点描述子的生成首先将坐标轴旋转为关键点的方向,以确保旋转不变性。以关键点为中心取8x8的窗口。LinagegradientsK&ypointdescriptorFigure.16*16的图中其中1/4的特征点梯度方向及scale,右图为其加权到8个主方向后的效果。图左部分的中央为当前关键点的位置,每个小格代表关键点邻域所在尺度空间的一个像素,利用公式求得每个像素的梯度幅值与梯度方向,箭头方向代表该像素的梯度方向,箭头长度代表梯度模值,然后用高斯窗口对其进行加权运算。图中蓝色的圈代表高斯加权的范围(越靠近关键
14、点的像素梯度方向信息贡献越大)。然后在每4x4的小块上计算8个方向的梯度方向直方图,绘制每个梯度方向的累加值,即可形成一个种子点,如图右部分示。此图中一个关键点由2x2共4个种子点组成,每个种子点有8个方向向量信息。这种邻域方向性信息联合的思想增强了算法抗噪声的能力,同时对于含有定位误差的特征匹配也提供了较好的容错性。计算keypoint周围的16*16的window中每一个像素的梯度,而且使用高斯下降函数降低远离中心的权重。window128dimens-icnaIv&ctorKeypoint在每个4*4的1/16象限中,通过加权梯度值加到直方图8个方向区间中的一个,计算出一个梯度方向直方图
15、。这样就可以对每个feature形成一个4*4*8=128维的描述子,每一维都可以表示4*4个格子中一个的scale/orientation.将这个向量归一化之后,就进一步去除了光照的影响。5.根据SIFT进行Match生成了A、B两幅图的描述子,(分别是k1*128维和k2*128维),就将两图中各个scale(所有scale)的描述子进行匹配,匹配上128维即可表示两个特征点match上了。实际计算过程中,为了增强匹配的稳健性,Lowe建议对每个关键点使用4x4共16个种子点来描述,这样对于一个关键点就可以产生128个数据,即最终形成128维的SIFT特征向量。此时SIFT特征向量已经去除
16、了尺度变化、旋转等几何变形因素的影响,再继续将特征向量的长度归一化,则可以进一步去除光照变化的影响。当两幅图像的SIFT特征向量生成后,下一步我们采用关键点特征向量的欧式距离来作为两幅图像中关键点的相似性判定度量。取图像1中的某个关键点,并找出其与图像2中欧式距离最近的前两个关键点,在这两个关键点中,如果最近的距离除以次近的距离少于某个比例阈值,则接受这一对匹配点。降低这个比例阈值,SIFT匹配点数目会减少,但更加稳定。为了排除因为图像遮挡和背景混乱而产生的无匹配关系的关键点丄owe提出了比较最近邻距离与次近邻距离的方法,距离比率ratio小于某个阈值的认为是正确匹配。因为对于错误匹配,由于特
17、征空间的高维性,相似的距离可能有大量其他的错误匹配,从而它的ratio值比较高。Lowe推荐ratio的阈值为0.8。但作者对大量任意存在尺度、旋转和亮度变化的两幅图片进行匹配,结果表明ratio取值在0.40.6之间最佳,小于0.4的很少有匹配点,大于0.6的则存在大量错误匹配点。(如果这个地方你要改进,最好给出一个匹配率和ration之间的关系图,这样才有说服力)作者建议ratio的取值原则如下:ratio=0.4对于准确度要求高的匹配;ratio=0.6对于匹配点数目要求比较多的匹配;ratio=0.5一般情况下。也可按如下原则:当最近邻距离200时ratio=0.6,反之ratio=0
18、.4。ratio的取值策略能排分错误匹配点。当两幅图像的SIFT特征向量生成后,下一步我们采用关键点特征向量的欧式距离来作为两幅图像中关键点的相似性判定度量。取图像1中的某个关键点,并找出其与图像2中欧式距离最近的前两个关键点,在这两个关键点中,如果最近的距离除以次近的距离少于某个比例阈值,则接受这一对匹配点。降低这个比例阈值,SIFT匹配点数目会减少,但更加稳定。实验结果:50100150200250300360i50100150200250300350400450500O5OO002O52OO50-1O2=0O6OOOO300502O2S0基本概念及一些补充什么是局部特征?局部特征从总体上
19、说是图像或在视觉领域中一些有别于其周围的地方局部特征通常是描述一块区域,使其能具有高可区分度局部特征的好坏直接会决定着后面分类、识别是否会得到一个好的结果局部特征需具备的特性重复性可区分性准确性数量以及效率不变性局部特征提取算法siftSIFT算法由D.G丄owe1999年提出,2004年完善总结。后来Y.Ke将其描述子部分用PCA代替直方图的方式,对其进行改进。SIFT算法是一种提取局部特征的算法,在尺度空间寻找极值点,提取位置,尺度,旋转不变量SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性。独特性好,信息量丰富,适用于
20、在海量特征数据库中进行快速、准确的匹配。多量性,即使少数的几个物体也可以产生大量SIFT特征向量。可扩展性,可以很方便的与其他形式的特征向量进行联合。尺度空间理论尺度空间理论目的是模拟图像数据的多尺度特征其基本思想是在视觉信息图像信息处理模型中引入一个被视为尺度的参数,通过连续变化尺度参数获得不同尺度下的视觉处理信息,然后综合这些信息以深入地挖掘图像的本质特征。描述子生成的细节以极值点为中心点,并且以此点所处于的高斯尺度sigma值作为半径因子。对于远离中心点的梯度值降低对其所处区域的直方图的贡献,防止一些突变的影响。每个极值点对其进行三线性插值,这样可以把此极值点的贡献均衡的分到直方图中相邻
21、的柱子上归一化处理.在求出4*4*8的128维特征向量后,此时SIFT特征向量已经去除了尺度变化、旋转等几何变形因素的影响。而图像的对比度变化相当于每个像素点乘上一个因子,光照变化是每个像素点加上一个值,但这些对图像归一化的梯度没有影响。因此将特征向量的长度归一化,则可以进一步去除光照变化的影响。.对于一些非线性的光照变化,SIFT并不具备不变性,但由于这类变化影响的主要是梯度的幅值变化,对梯度的方向影响较小,因此作者通过限制梯度幅值的值来减少这类变化造成的影响。PCASIFT算法PCA-SIFT与标准SIFT有相同的亚像素位置,尺度和主方向。但在第4步计算描述子的设计,采用的主成分分析的技术
22、。下面介绍一下其特征描述子计算的部分:用特征点周围的41x41的像斑计算它的主元,并用PCA-SIFT将原来的2x39x39维的向量降成20维,以达到更精确的表示方式。它的主要步骤为,对每一个关键点:在关键点周围提取一个41x41的像斑于给定的尺度,旋转到它的主方向;计算39x39水平和垂直的梯度,形成一个大小为3042的矢量;用预先计算好的投影矩阵nx3042与此矢量相乘;这样生成一个大小为n的PCA-SIFT描述子。辅助资料:1己吕维关键点描述子生成步骤1-确定计算汹述子所需的图像区域温述子梯產方向直芳图由关建点所在尺產的濮祷图像计算产生.图像区域的半径通过下式计算:如嘶耳血也十1)十1a
23、i是关键点所在组(octave)的组内尺度d-4己-将坐标移圭关键点主方向-r-r-4l_那么莢转角度后新坐标为:rcos6?sin-sin力cosflr:?在图像半径区域内对每个像養磴求其梯度幅值和方向,然后对每个梯度幅值乗以高斯权重参数,生成方向直方囲。、喩ghf=冒血?(打(兀J)|&exp-环:该点与关镀点的列距离;耳:该点与关键点的行距离;C7:等于描述子窗口宽度勺b*直方图列数(耽4)的一半;T44.在窗声宽度为2X2的区域內计算&个方向的梯度方向直方图,绘制每个梯度方向的累加值,即可形成一个种子点。然后再在下一个2X2的区域内进行直方图统计,形成下一个种子,点,拱生成16个种子点
24、.5,描述子向量元素门限化及门限牝后的描述子向量规葩化。描述子向量元素门限化:方向直方图每个方向上梯度幅值限制在一定门限值以下(门限一般取(12。描述子向量元素规范化:疔=(叫叫,五)为得到的12碍述子向曇E=G仏:血)为純范化后的向量Reference:LoweSIFT原文: HYPERLINK http:/www.cs.ubc.ca/Towe/papers/ijcv04.pdf http:/www.cs.ubc.ca/Towe/papers/ijcv04.pdfSIFT的C实现:/robwhess/opensift/blob/master/srcmatlab应用Sift算子的模式识别方法:
25、/abcjennifer/article/details/7372880 HYPERLINK /abcjennifer/article/details/7365882 /abcjennifer/article/details/7365882hllp:/7/vviki/Scale-invarianl_fealure_lransform#David_Lovve.27s_melhodhllp:/blog-613779-475881.hlmlhllp:/ HYPERLINK /linyunzju/archive/2011/06/14/2080950.hlml /linyunzju/archive/20
26、11/06/14/2080950.hlmlhllp:/ HYPERLINK /linyunzju/archive/2011/06/14/2080951.hlml /linyunzju/archive/2011/06/14/2080951.hlmlhllp:/blog.csdn.nel/ijuliel/arlicle/delails/4640624hllp:/ HYPERLINK /cfanlaisie/aichive/2011/06/14/2080917.hlml /cfanlaisie/aichive/2011/06/14/2080917.hlml(部分图片有误,以本文中的图片为准)SIFT
27、解析(一)建立高斯金字塔SIFT(Scale-InvariantFeatureTransform,尺度不变特征转换)在目标识别、图像配准领域具有广泛的应用,下面按照SIFT特征的算法流程对其进行简要介绍对SIFT特征做简要介绍。高斯金字塔是SIFT特征提取的第一步,之后特征空间中极值点的确定,都是基于高斯金字塔,因此SIFT特征学习的第一步是如何建立的高斯金字J.-W-塔。明白几个定义:高斯金字塔对于高斯金字塔,很容易直观地理解为对同一尺寸的图像,然后进行不同程度的高斯平滑,这些图像构成高斯金字塔,这种是不对的,这描述的图像集合叫做一个八度。金字塔总要有个变“尖”的过程,真正的高斯金字塔要有个
28、平滑以及下采样的过程,因此整个图像平滑以及下采样再平滑,构成的所有图像集合才构成了图像的高斯金字塔。具有一个6尺度八度(octave)简单地说八度就是在特定尺寸(长宽)下,经不同高斯核模糊的图像的集合。八度的集合是高斯金字塔。为什么要构建高斯金字塔:整个高斯金字塔,或者说是差分高斯金字塔是我们确定SIFT特征的基础,让我们首先想想高斯金字塔到底干了一件什么事情,他到底模仿的是什么?答案很容易确定,高斯金字塔模仿的是图像的不同的尺度,尺度应该怎样理解?对于一副图像,你近距离观察图像,与你在一米之外观察,看到的图像效果是不同的,前者比较清晰,后者比较模糊,前者比较大,后者比较小,通过前者能看到图像
29、的一些细节信息,通过后者能看到图像的一些轮廓的信息,这就是图像的尺度,图像的尺度是自然存在的,并不是人为创造的。好了,到这里我们明白了,其实以前对一幅图像的处理还是比较单调的,因为我们的关注点只落在二维空间,并没有考虑到“图像的纵深”这样一个概念,如果将这些内容考虑进去我们是不是会得到更多以前在二维空间中没有得到的信息呢?于是高斯金字塔横空出世了,它就是为了在二维图像的基础之上,榨取出图像中自然存在的另一个维度:尺度。因为高斯核是唯一的线性核,也就是说使用高斯核对图像模糊不会引入其他噪声,因此就选用了高斯核来构建图像的尺度。下图两幅图像是典型的一幅一定大小的图像使用高斯滤波后将得到一个高斯平滑
30、图像,注意图像的大小未发生变化。现在把这样一幅一定大小的图像分别使用不同尺度的高斯(核)滤波平滑后,就得到一个图像集合,那么这个集合就称为一个八度(octave),其中这个图像就称为这个八度的原图像。那么如果原图像不同,所得的八度也不同,原图像不同包括其大小、灰度值,注意高斯滤波会改变图像的灰度值。假设有一组八度,如果原图像都是有一定规律的,那么这些八度一定存在一定联系现在IV中的原图像是经过降采样生成的,那么这些八度便构成了金字塔形状图像高斯金字塔,这就是模仿的图像离你远去时在你视网膜上的成像,图像分别以动态方式表示。高斯金字塔的构建步骤:根据Lowe的论文,高斯金字塔的构建还是比较简单的,
31、高斯卷积和是尺度变换的唯一的线性核。高斯金字塔构建过程中,一般首先将图像扩大一倍,在扩大的图像的基础之上构建高斯金字塔,然后对该尺寸下图像进行高斯模糊,几幅模糊之后的图像集合构成了一个八度,然后对该八度下的最模糊的一幅图像进行下采样的过程,长和宽分别缩短一倍,图像面积变为原来四分之一。这幅图像就是下一个八度的初始图像,在初始图像图像的基础上完成属于这个八度的高斯模糊处理,以此类推完成整个算法所需要的所有八度构建,这样这个高斯金字塔就构建出来了。构建出的金字塔如下图所示:GaussianScale(firstcjctawejScale(netctdvej什么是尺度空间:以上已经从人视觉感知的角度
32、让大家感性认识了“尺度”,上文也提到使用高斯核来实现尺度的变换,那么具体实现过程中,尺度体现在哪里?是如何量化的呢?怎么在高斯金字塔中,两个变量很重要,即第几个八度(0)和八度中的第几层(S),这两个量合起来(0,S)就构成了高斯金字塔的尺度空间。尺度空间也不难理解,首先一个八度中图像的长和宽是相等的,即变量0控制的是塔中尺寸这个尺度;区分同一个尺寸尺度下的图像,就需要S了,S控制了一个八度中不同的模糊程度。这样(0,S)就能够确定高斯金字塔中的唯一一幅图像了,这是个三维空间,两维坐标,一维是图像。根据lowe的论文,(o,s)作用于一幅图像是通过公式确定的。通过公式也可以看出,尺度空间是连续
33、的,两个变量控制着6的值,其中在第一个八度中有1(o+s/S)=2,同理在第二个八度中有2(o+s/S)=3,以此类推,6中的关键部分(o+s/S)部分是逐渐增大的(具体实现时,有些高斯金字塔中这个值是增大,但不是逐渐均匀增大,只能说是连续的)。上图中第一个八度的中图像的尺度分别是6,k6,26.,第二个八度的尺度分别是26,2k6,2326.,同理第三个八度的尺度分别是46,4k6,4326。这个序列是通过下式来确定的:所以每增加一级八度,6都要扩大2倍,在一个八度中,k的上标s来区分不同的高斯核。至此,高斯金字塔中的尺度空间已经说得差不多了,包括尺度是什么,包括高斯金字塔中尺度的连续性,后
34、文将详细说明尺度空间的连续性。下图形象说明了什么是尺度空间:构建差分高斯金字塔构建高斯金字塔是为了后续构建差分高斯金字塔。对同一个八度的两幅相邻的图像做差得到插值图像,所有八度的这些插值图像的集合,就构成了差分高斯金字塔。过程如下图所示,差分高斯金字塔的好处是为后续的特征点的提取提供了方便。Scale(firstoctave)Scale(nextoctaveGaussianDifferenceofGaussianfDOG)到这里,高斯金字塔构建的主要部分、关键点都弄好了,一些非常重要的认知就要呼之欲出了,下面解释整个空间的尺度连续性!这是差分高斯金字塔的重中之重!尺度空间的连续性这里注意,连续
35、性的主语既不是高斯金字塔,也不是差分高斯金字塔,而是尺度空间。在弄清楚这个问题之前,我们还需要解决一个问题,即为什么高斯金字塔中每个八度有s+3幅高斯图像?s的意思是将来我们在差分高斯金字塔中求极值点的时候,我们要在每个八度中求s层点,通过lowe论文可知,每一层极值点是在三维空间(图像二维,尺度一维)中比较获得,因此为了获得s层点,那么在差分高斯金字塔中需要有s+2图像,好了,继续上溯,如果差分高斯金字塔中有s+2幅图像,那么高斯金字塔中就必须要有s+3幅图像了,因为差分高斯金字塔是由高斯金字塔相邻两层相减得到的。好了,到了这里似乎真相大白,但是我们上面的推导有一个致命的问题,我们上来就假设
36、“我们要在每个八度中求s层点”,为什么要s层点呢?这才是这个小节的主题:是为了保持尺度的连续性!下面进行详细的分析:以一个八度中的图像为例说明(此处最好结合OpenCV中金字塔构建部分的源码下文已列出,可以参照)高斯金字塔和差分高斯金字塔那几个公式还要在这里贴出来一下:高斯函数G对图像I的模糊函数:er)=G(x?jj.7(x=j)高斯差分函数:DXy.ta)二(G(兀y.(ka)-(兀耳cr)O心为=ZCx:yktj)匸gy:cr)通过以上这两个公式,可以确定一个八度中(以第一个八度为例)高斯图像和差分高斯图像的尺度如下(以lowe论文为例,s=3,所以每个八度中会有3+3=6幅图像),每一
37、幅图像的尺度也在图像标示了出来。在lowe的论文中s=3,因此有因此,当前八度中各高斯图像的尺度依次为:62A(1/3)o,2A(2/3)o,2A(3/3)o,2A(4/3)o,2A(5/3)o;当前八度中各差分高斯图像的尺度依次为:62A(1/3)o,2A(2/3)6,2A(3/3)6,2人(4/3)6。同理,我们可以推断出,下一个八度中各高斯图像的尺度依次为:2xo,2x2A(1/3)o,2x2A(2/3)o,2x2A(3/3)o,2x2A(4/3)o,2x2A(5/3)o;下一个八度中各差分高斯图像的尺度依次为:2x6,2x2A(1/3)o,2x2A(2/3)o,2x2A(3/3)o,2
38、乂2人(4/3)6可以观察到,其中红色标注数据所代表的层,是差分高斯金字塔中获得极值点的层,也就是说只有在这些层上才发生与上下两层比较获得极值点的操作。下面将这些红色数据连成一串:2A(1/3)o,2A(2/3)o,2A(3/3)o,2乂2人(1/3)62乂2人(2/3)62乂2人(3/3)6。发现了什么?对了,这些数据时连续的,我们通过在每个八度中多构造三幅高斯图像,达到了尺度空间连续的效果,这一效果带来的直接的好处是在尺度空间的极值点确定过程中,我们不会漏掉任何一个尺度上的极值点,而是能够综合考虑量化的尺度因子所确定的每一个尺度!下一个八度的第一幅图像如何确定这个问题,是上面问题(尺度空间
39、的连续性)的延伸,我们可以通过反OpenCV中这一部分的源代码,来理解这个问题。当前八度中的第一幅图像是通过前一个八度的倒数第三幅图像得到。OpenCV这段源码有个很重要的问题:不同的八度间的尺度不是会有一个2的差异吗?为什么本部分源码并没有体现这一点,而是在对每一个八度处理中都是用相同的数组sig。首先明确一下sig数组内.存储的并不是一个绝对的模糊核,而是相对的模糊核,这一点很重要,既然是相对的模糊核,那么第一幅图像的核就很重要了,所以尺度的连续就看每个八度的第一幅图像了。对于以下列出的高斯金字塔的构建过程来看,每个八度中的第一幅图像并没有一个2倍的尺度跃进过程。但是,这个2倍的跃进式隐含
40、在整个高斯金字塔的构建过程中了!再看倒数第三幅图像,这幅图像的尺度是2人(3/3)*6,3/3=1,也就是说,在这个八度中,第一幅图像的尺度是6,而倒数第三幅图像的尺度是2*6,正好发生了一个2的跃进!这就是以这幅图像作为基准进行下采样的原因,如此的话,下一个八度的第一幅图像的初始尺度就是2*6了。这就是真相,这就是为什么选用倒数第三幅图像进行下采样的原因。cppviewplaincopyvoidSIFT:buildGaussianPyramid(constMat&base,vector&pyr,intnOctaves)constvectorsig(nOctaveLayers+3);pyr.r
41、esize(nOctaves*(nOctaveLayers+3);/precomputeGaussiansigmasusingthefollowingformula:/sigma_totalA2=sigma_iA2+sigma_i-1八2sig0=sigma;doublek=pow(2,1/nOctaveLayers);for(inti=1;inOctaveLayers+3;i+)doublesig_prev=pow(k,(double)(i-1)*sigma;doublesig_total=sig_prev*k;sigi=std:sqrt(sig_total*sig_total-sig_pr
42、ev*sig_prev);for(into=0;onOctaves;o+)for(inti=0;inOctaveLayers+3;i+)Mat&dst=pyro*(nOctaveLayers+3)+i;if(o=0&i=0)dst=base;/baseofnewoctaveishalvedimagefromendofpreviousoctaveelseif(i=0)/*每一个八度中第一幅图像的确定过程*/constMat&src=pyr(o-1)*(nOctaveLayers+3)+nOctaveLayers;resize(src,dst,Size(srccols/2,src.rows/2),
43、0,0,INTER_NEAREST);elseconstMat&src=pyro*(nOctaveLayers+3)+i-1;GaussianBlur(src,dst,Size(),sigi,sigi);voidSIFT:buildDoGPyramid(constvector&gpyr,vector&dogpyr)constintnOctaves=(int)gpyr.size()/(nOctaveLayers+3);dogpyr.resize(nOctaves*(nOctaveLayers+2);for(into=0;onOctaves;o+)..10.11.12
44、.0.41.42.for(inti=0;inOctaveLayers+2;i+)43.448.constMat&srcl=gpyro*(nOctaveLayers+3)+i;constMat&src2=gpyro*(nOctaveLayers+3)+i+1;Mat&dst=dogpyro*(nOctaveLayers+2)+i;subtract(src2,srcl,dst,noArray(),DataType:t
45、ype);4950.以上SIFT源码均摘自OpenCVnonfree模块,lowe对SIFT拥有版权。SIFT金字塔构建完毕,需要在金字塔中寻找特征点了,请关注本博客SIFT系列下一篇文章:SIFT解析(二)特征点位置确定SIFT解析(二)特征点位置确定最近微博上有人发起投票那篇论文是自己最受益匪浅的论文,不少人说是lowe的这篇介绍SIFT的论文。确实,在图像特征识别领域,SIFT的出现是具有重大意义的,SIFT特征以其稳定的存在,较高的区分度推进了诸多领域的发展,比如识别和配准。上一篇文章,解析了SIFT特征提取的第一步高斯金字塔的构建,并详细分析了高斯金字塔以及差分高斯金字塔如何完成一个
46、连续的尺度空间的构建。构建高斯金字塔不是目的,目的是如何利用高斯金字塔找到极值点。lowe在论文中阐述了为什么使用差分高斯金字塔:1)差分高斯图像可以直接由高斯图像相减获得,简单高效2)差分高斯函数是尺度规范化的高斯拉普拉斯函数的近以,而高斯拉普拉斯函数的极大值和极小值点是一种非常稳定的特征点(与梯度特征、Hessian特征和Harris角点相比)有了这些基础,我们就可以放开手脚从差分高斯金字塔中找点了。特征点的确定主要包括两个过程:确定潜在特征点,精确确定特征点的位置和去除不稳定特征点。确定潜在特征点上文已经阐述,高斯拉普拉斯函数的极大值和极小值点是一种非常稳定的特征点,因此我们从差分高斯金
47、字塔中寻找这些潜在特征点。差分高斯金字塔是一个三维空间(平面图像二维,尺度一维),因此我们在三维空间中在寻找极大值点和极小值点。具体方法是比较当前特征点的灰度值和其他26个点的灰度值的大小,这26个点包括:当前尺度下该点的8邻域以及前一尺度和后一尺度下与该点最近的9个点(9*2+8=26),如下图所示:OpenCV该部分源码:cppviewplaincopy1.voidSIFT:findScaleSpaceExtrema(constvector&gauss_pyr,constvector&dog_pyr,.9.
48、1.42.vector&keypoints)constfor(into=0;onOctaves;o+)/每一个八度for(inti=1;i=nOctaveLayers;i+)/对八度中的存在具有第1至第nOctaveLayers层高斯差分图像提取特征点for(intr=SIFT_IMG_BORDER;rrows-SIFT_IMG_BORDER;r+)/图像二维空间行for(intc=SIFT_IMG_BORDER;cthreshold&(val0&val=currpt
49、rc-1&val=currptrc+1&TOC o 1-5 h zval=currptrc-step-1&val=currptrc-step&val=currptrc-step+1&val=currptrc+step-1&val=currptrc+step&val=currptrc+step+1&val=nextptrc&val=nextptrc-1&val=nextptrc+1&val=nextptrc-step-1&val=nextptrc-step&val=nextptrc-step+1&val=nextptrc+step-1&val=nextptrc+step&val=nextptrc
50、+step+1&val=prevptrc&val=prevptrc-1&val=prevptrc+1&val=prevptrc-step-1&val=prevptrc-step&val=prevptrc-step+1&val=prevptrc+step-1&val=prevptrc+step&val=prevptrc+step+1)|(val0&val=currptrc-1&val=currptrc+1&TOC o 1-5 h zval=currptrc-step-1&val=currptrc-step&val=currptrc-step+1&val=currptrc+step-1&val=c
51、urrptrc+step&val=currptrc+step+1&val=nextptrc&val=nextptrc-1&val=nextptrc+1&val=nextptrc-step-1&val=nextptrc-step&val=nextptrc-step+1&val=nextptrc+step-1&val=nextptrc+step&val=nextptrc+step+1&val=prevptrc&val=prevptrc-1&val=prevptrc+1&val=prevptrc-step-1&val=prevptrc-step&val=prevptrc-step+1&val=pre
52、vptrc+step-1&val=prevptrc+step&val=prevptrc+step+1)尺度空间中的极值点已经确定出来了,下面有两个问题需要解决:(1)这些点是最终我们确定的SIFT特征点集的超集,该超集里包含许多“间谍”-不稳定的特征点,因此必须去掉这些不稳定的特征点。这些不稳定的特征点主要包含两类:低对比度的点(对噪声敏感)和边缘点。(2)这一步骤中极值点的坐标还是离散的整数值,如何精确确定特征点的位置。由于在计算上(2)问题的解决可以捎带解决(1)中低对比度点的问题,因此我们先讨论问题(2)。本部分的OpenCV源码位于sift.cpp文件的adjustLocalExtre
53、ma函数中,本文最后会贴出此部分源码,下面首先分析如何解决以上两个问题。精确确定特征点的位置:由于图像是一个离散的空间,特征点的位置的坐标都是整数,但是极值点的坐标并不一定就是整数,如下图所示。因此,如何从离散空间中估计出极值点的精确位置是重要的。为了精确确定极值点坐标,Brown和Lowe使用了三元二次函数,通过迭代确定极值点的位置,具有良好的效果。主要是根据泰勒公式,泰勒公式作用:用值已知的点A估计点A附近的某点B的值。D(x)=D-cif1丁a2n十宁茁x其中工=是日点相对于A点的偏移求上式极值,对其求导,导数等于0,得到”沁&D工二=CXQJC如何;有任何一堆大干0.55说明根值点更靠
54、近另一个点匚了,此时将点更新为点C,维坝迭代过程,如果每一个堆度的偏移都小于為那么雄代过程结束,將;(三堆小数)追加到当前点(整数坐标人以此得到特征点的精确坐标。去除不稳定特征点去除对比度低的点以上求出了极值点的精确的位置,将求出的x带入原式,得:我们就利用这个函数去除对比度低的点,lowe文中,当D(x)=0.03时,去除这个特征点。去除边缘点差分高斯金字塔中的极值点会有许多边缘点,边缘点对一些噪声不稳定,因此需要去除这些边缘相应点。差分高斯金字塔中会有一些不是很好的极值点,这些点的特征是:在跨越边缘的方向有较大的主曲率,在与边缘相切的方向主曲率较小。在本步骤中,需要去除这些不好的边缘相应。
55、主曲率可以通过2阶Hessian方阵获得:其中,D讥均可以通过当前像秦点及其周围懷素点差分得到h的行列式D函数中某点的主曲率和该点的H矩阵的特征值是成比例的,因此我们可以通过H矩阵的特征值来确定某点在差分高斯金字塔中的主曲率。设矩阵H的特征值分别为a(较大)和B(较小),有如下公式:Tr(H):矩阵h的迹p通过以上两式,a和B就可以计算出来了,但是,不急!如上文所述,那些不好的边缘点:跨越边缘的方向有较大的主曲率,与边缘相切的方向主曲率较小。因此,我们通过a/卩的比率函数并确定阈值来体现表征那些不好的边缘点,a/p越大,说明这个点就越糟糕,就越应该被删掉,但是这样就要真真切切计算a和B的值,前
56、面让大家不急了,是的,先不用着急计算,设定r=a/p(即a=rp),使用如下公式:以上函数是关于r的增函数(已经假设a是特征值中较大的一个),r越大,以上函数值就越大,反之,以上函数值越大,r就是越大的,因此我们可以通过已知的Tr(H)和Det(H)“曲线地”去判断r的大小!所以在本步骤中,去除不好的边缘点的阈值是:lowe论文中设定r=10。到这里,在差分高斯金字塔中提取的特征点就完成了提纯的步骤。下面是OpenCV源码中特征点精确位置的确定过程以及特征点提纯过程,主要实现函数为sift.cpp中adjustLocalExtrema函数:cppviewplaincopy1./Interpol
57、atesascale-spaceextremumslocationandscaletosubpixel2./accuracytoformanimagefeatureRejectsfeatureswithlowcontrast3./BasedonSection4ofLowespaper4.staticbooladjustLocalExtrema(constvector&dog_pyr,KeyPoint&kpt,intoctv,5.int&layer,int&r,int&c,intnOctaveLayers,floatcontrastThreshold,floatedgeThreshold,flo
58、atsigma)constfloatimg_scale=1f/(255*SIFT_FIXPT_SCALE);constfloatderiv_scale=img_scale*05f;constfloatsecond_deriv_scale=img_scale;constfloatcross_deriv_scale=img_scale*025f;floatxi=0,xr=0,xc=0,contr=0;0.
59、0.inti=0;/如上文所述,迭代计算特征点的精确位置for(;iSIFT_MAX_INTERP_STEPS;i+)intidx=octv*(nOctaveLayers+2)+layer;constMat&img=dog_pyridx;constMat&prev=dog_pyridx-1;constMat&next=dog_pyridx+1;Vec3fdD(imgat(r,c+1)-imgat(r,c-1)*deriv_scale,(img.at(r+1,c)-img.at(r-1,c)*deriv_scale,(next.at(r,c
60、)-prev.at(r,c)*deriv_scale);floatv2=(float)imgat(r,c)*2;floatdxx=(img.at(r,c+1)+img.at(r,c-1)-v2)*second_deriv_scale;floatdyy=(img.at(r+1,c)+img.at(r-1,c)-v2)*second_deriv_scale;floatdss=(next.at(r,c)+prev.at(r,c)-v2)*second_deriv_scale;floatdxy=(imgat(r+1,c+1)-imgat(r+1,c-1)-imgat(r-1,c+1)+imgat(r-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年国家开发银行(陕西分行)人员招聘考试备考题库及答案详解
- 2026年邵阳市中医医院医护人员招聘笔试参考试题及答案详解
- 2026年青海省藏医院医护人员招聘考试备考试题及答案详解
- 2026年黑龙江省第四医院医护人员招聘笔试备考题库及答案详解
- 2026年淮安市第二人民医院医护人员招聘考试参考题库及答案详解
- 2026年中山大学附属汕头医院医护人员招聘笔试参考试题及答案详解
- 2026年廊坊市人民医院医护人员招聘考试参考题库及答案详解
- 2026年漳州市中医院医护人员招聘笔试参考试题及答案详解
- 2026年武汉市第四医院医护人员招聘考试备考试题及答案详解
- 2026年济宁市第一人民医院医护人员招聘笔试备考题库及答案详解
- 上海小区下水道施工方案
- DB11T 2423-2025 城市道路挖掘与修复技术规范
- T/CNFAGS 16-2024绿色甲醇分级标准(试行)
- 女性不孕症中西医结合诊疗指南
- 收押金协议书范本
- DBJ04∕T 258-2016 建筑地基基础勘察设计规范
- 人教版八年级下册物理期末考试试卷及答案
- 第十五届全国电力行业职业技能竞赛(碳排放管理员)考试题库(含答案)
- JT-T-810-2011集装箱涂料行业标准
- 偏光片不良分析报告
- 全套医疗器械设计和开发资料(模板可修改)
评论
0/150
提交评论