SIFT算法详解及应用(讲的很详细)(1)
- 格式:pdf
- 大小:2.85 MB
- 文档页数:69
SIFT算法详解Scale Invariant Feature Transform(SIFT)Just For Funzdd zddmail@对于初学者,从David G.Lowe的论文到实现,有许多鸿沟,本文帮你跨越。
1、SIFT综述尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由David Lowe在1999年所发表,2004年完善总结。
其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对。
此算法有其专利,专利拥有者为英属哥伦比亚大学。
局部影像特征的描述与侦测可以帮助辨识物体,SIFT 特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。
对于光线、噪声、些微视角改变的容忍度也相当高。
基于这些特性,它们是高度显著而且相对容易撷取,在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认。
使用SIFT特征描述对于部分物体遮蔽的侦测率也相当高,甚至只需要3个以上的SIFT物体特征就足以计算出位置与方位。
在现今的电脑硬件速度下和小型的特征数据库条件下,辨识速度可接近即时运算。
SIFT特征的信息量大,适合在海量数据库中快速准确匹配。
SIFT算法的特点有:1. SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性;2. 独特性(Distinctiveness)好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配;3. 多量性,即使少数的几个物体也可以产生大量的SIFT特征向量;4. 高速性,经优化的SIFT匹配算法甚至可以达到实时的要求;5. 可扩展性,可以很方便的与其他形式的特征向量进行联合。
SIFT算法可以解决的问题:目标的自身状态、场景所处的环境和成像器材的成像特性等因素影响图像配准/目标识别跟踪的性能。
图像识别中的SIFT算法实现与优化一、SIFT算法介绍SIFT算法(Scale-Invariant Feature Transform)是一种用于图像对比和匹配的局部特征提取算法,由David Lowe于1999年开发提出并持续改良。
SIFT算法可以检测出具有旋转、缩放、光照变化等不变性的图像特征点,被广泛应用于计算机视觉领域,如图像匹配、图像检索、物体识别等。
SIFT算法主要分为四步:尺度空间极值检测、关键点定位、关键点方向确定和描述子生成。
尺度空间极值检测:SIFT算法通过构建高斯金字塔来检测尺度下的极值点。
在高斯金字塔中,首先对原始图像进行下采样,生成一组不同尺度的图像。
然后在每个尺度上利用高斯差分来检测极值点,满足以下条件的点即为极值点:周围像素点中的最大值或最小值与当前像素点的差值达到一定阈值,而且是在尺度空间上达到极值。
关键点定位:对于极值点的定位,SIFT算法采用了一种基于拟合精细的方法来定位真实的关键点。
SIFT算法通过在尺度空间中计算极值点的DoG(高斯差分)的Hessian矩阵,来估计关键点的尺度和位置。
如果Hessian矩阵的行列式和迹符号都满足一定的条件,则认为该点为关键点。
关键点方向确定:在确定关键点的位置和尺度之后,SIFT算法还需要确定关键点的主方向。
该方向是通过计算关键点周围像素点的梯度方向和大小,并在组合后的梯度图像上寻找最大梯度方向得到的。
这个方向是在许多方向中确定的,而描述符是相对于主方向定义的。
描述子生成:最后,SIFT算法采用一个高维向量来描述关键点,并且具有不变性。
该向量的计算是在相对于关键点的周围图像区域内,采集图像梯度方向的统计信息来完成的。
描述符向量包含了关键点的位置、主方向,以及相对于主方向的相对性质。
二、SIFT算法优化思路尽管SIFT算法已经被广泛使用,但是由于算法复杂度和内存消耗等问题,使得在大数据和实时应用场景下,SIFT算法的运行速度和效果表现都有巨大限制。
SIFT特征提取算法总结⼀、综述Scale-invariant feature transform(简称SIFT)是⼀种图像特征提取与匹配算法。
SIFT算法由David.G.Lowe于1999年提出,2004年完善总结,后来Y.Ke(2004)将其描述⼦部分⽤PCA代替直⽅图的⽅式,对其进⾏改进。
SIFT算法可以处理两幅图像之间发⽣平移、旋转、尺度变化、光照变化情况下的特征匹配问题,并能在⼀定程度上对视⾓变化、仿射变化也具备较为稳定的特征匹配能⼒。
⼆、SIFT特征提取算法SIFT算法⾸先在尺度空间进⾏特征检测,并确定关键点的位置和关键点所处的尺度,然后使⽤关键点邻域梯度的主⽅向作为该点的⽅向特征,以实现算⼦对尺度和⽅向的⽆关性。
SIFT算法提取的SIFT特征向量具有如下特性:a) SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视⾓变化、仿射变换、噪声也保持⼀定程度的稳定性。
b) 独特性好,信息量丰富,适⽤于在海量特征数据库中进⾏快速、准确的匹配。
c) 多量性,即使少数的⼏个物体也可以产⽣⼤量SIFT特征向量。
d) ⾼速性,经优化的SIFT匹配算法甚⾄可以达到实时的要求。
e) 可扩展性,可以很⽅便的与其他形式的特征向量进⾏联合。
⼀幅图像SIFT特征向量的⽣成算法总共包括4步:尺度空间极值检测、关键点位置及尺度确定、关键点⽅向确定、特征向量⽣成。
最后通过特征向量完成特征点的匹配。
2.1尺度空间极值检测机器⼈在环境中⾛动时,摄像机和环境中物体的相对位置会发⽣变化,导致图像上物体的特征的尺度发⽣变换。
我们希望特征具有尺度不变性,即当特征尺度变化时,特征点检测器仍然能够准确的检测出特征点及其尺度。
为满⾜以上条件,特征检测需要在多尺度空间的框架下进⾏。
尺度空间理论是检测不变特征的基础。
Witkin(1983)提出了尺度空间理论,他主要讨论了⼀维信号平滑处理的问题。
Koenderink(1984)把这种理论扩展到⼆维图像,并证明⾼斯卷积核是实现尺度变换的唯⼀变换核。
SIFT算法详解及应用SIFT(Scale-Invariant Feature Transform)是一种图像处理算法,它能够在不同尺度、旋转、光照条件下进行特征点匹配。
SIFT算法是计算机视觉领域的一个重要算法,广泛应用于目标识别、图像拼接、图像检索等方面。
首先,尺度空间极值检测是指在不同尺度上检测图像中的极值点,即图像中的局部最大值或最小值。
这样可以使特征点能够对应不同尺度的目标,使算法对尺度变化有鲁棒性。
为了实现这一步骤,SIFT算法使用了高斯差分金字塔来检测尺度空间中的极值点。
接下来是关键点定位,即确定在尺度空间极值点的位置以及对应的尺度。
SIFT算法通过比较每个极值点与其周围点的响应值大小来判断其是否为关键点。
同时,为了提高关键点的稳定性和准确性,算法还会对关键点位置进行亚像素精确化。
然后是关键点方向的确定,即为每个关键点分配一个主方向。
SIFT算法使用图像梯度方向的直方图来确定关键点的方向。
这样可以使得特征描述子具有旋转不变性,使算法在目标旋转的情况下仍能进行匹配。
最后是关键点的描述。
SIFT算法使用局部图像的梯度信息来描述关键点,即构建关键点的特征向量。
特征向量的构建过程主要包括将关键点周围的图像划分为若干个子区域,计算每个子区域的梯度直方图,并将所有子区域的直方图拼接成一个特征向量。
这样可以使得特征向量具有局部不变性和对光照变化的鲁棒性。
SIFT算法的应用非常广泛。
首先,在目标识别领域,SIFT算法能够检测和匹配图像中的关键点,从而实现目标的识别和定位。
其次,在图像拼接方面,SIFT算法能够提取图像中的特征点,并通过匹配这些特征点来完成图像的拼接。
此外,SIFT算法还可以应用于图像检索、三维重建、行人检测等领域。
总结起来,SIFT算法是一种具有尺度不变性和旋转不变性的图像处理算法。
它通过提取图像中的关键点,并构建关键点的描述子,实现了对不同尺度、旋转、光照条件下的目标识别和图像匹配。
前面们介绍了Harris和Shi-Tomasi角检测算法,这两种算法具有旋转不变性,但不具有尺度不变性,以下图为例,在左侧小图中可以检测到角,但图像被放后,在使用同样的窗口,就检测不到角了。
所以,们来介绍一种计算机视觉的算法,尺度不变特征转换即SIFT(Scale-invariantfeaturetransform)。
它用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值,并提取出其位置、尺度、旋转不变量,此算法由DavidLowe在1999年所发表,2004年完善总结。
应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对等领域。
SIFT算法的实质在不同的尺度空间上查找关键(特征),并计算出关键的方向。
SIFT 所查找到的关键一些十分突出,不会因光照,仿变换和噪音等因素而变化的,如角、边缘、暗区的亮及亮区的暗等。
1.1基本流程Lowe将SIFT算法分解为如下四步:尺度空间极值检测:搜索所有尺度上的图像位置。
通过高斯差分函数来识别潜在的对于尺度和旋转不变的关键。
关键定位:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。
关键的选择依据于它们的稳定程度。
关键方向确定:基于图像局部的梯度方向,分配给每个关键位置一个或多个方向。
所有后面的对图像数据的操作都相对于关键的方向、尺度和位置进行变换,从而保证了对于这些变换的不变性。
关键描述:在每个关键周围的邻域内,在选定的尺度上测量图像局部的梯度。
这些梯度作为关键的描述符,它允许比较的局部形状的变形或光照变化。
们就沿着Lowe的步骤,对SIFT算法的实现过程进行介绍:1.2尺度空间极值检测在不同的尺度空间不能使用相同的窗口检测极值,对小的关键使用小的窗口,对的关键使用的窗口,为了达到上述目的,们使用尺度空间滤波器。
高斯核可以产生多尺度空间的核函数。
-《Scale-spacetheory:Abasictoolforanalysingstructuresatdifferentscales》。
Rob Hess的SIFT算法实现理解及注释SIFT算法不用我多解释了,这是一个很强大的算法,主要用于图像配准和物体识别等领域,但是其计算量相比也比较大,性价比比较高的算法包括PCA-SIFT 和SURF其中OpenCV提供了SURF算法,但是为了方便理解。
这里给出了Rob Hess 所实现的SIFT算法的实现以及注释,结合我自己的理解,如果,您有关于SIFT算法不理解的地方咱们可以一起交流一下。
或者您认为不详细的地方提出来。
SIFT算法的主要实现在sift.c这个文件,其主要流程为:(1)首先创建初始图像,即通过将图像转换为32位的灰度图,然后将图像使用三次插值来方大,之后通过高斯模糊处理(2)在此基础上进行高斯金字塔的构建以及高斯差分金字塔的构建(3)对图像进行极值点检测(4)计算特征向量的尺度(5)调整图像大小(6)计算特征的方向(7)计算描述子,其中包括计算二维方向直方图并转换直方图为特征描述子首先给出sift算法的整体框架代码:输入参数:img为输入图像;feat为所要提取的特征指针;intvl指的是高斯金字塔和差分金字塔的层数;sigma指的是图像初始化过程中高斯模糊所使用的参数;contr_thr是归一化之后的去除不稳定特征的阈值;curv_thr指的是去除边缘的特征的主曲率阈值;img_dbl是是否将图像放大为之前的两倍;descr_with用来计算特征描述子的方向直方图的宽度;descr_hist_bi ns 是直方图中的条数⑴初始化图像输入参数:这里不需要解释了该函数主要用来初始化图像,转换图像为32位灰度图以及进行高斯模糊。
(2)构建高斯金字塔输入参数:octvs是高斯金字塔的组invls是高斯金字塔的层数sigma是初始的高斯模糊参数,后续也通过它计算每一层所使用的sigma7.gauss. _pyr = static_cast vlpllmage ***>( calloc( octvs, sizeof (lpllmage** )));8.9. for (i = 0; i < octvs; i++ )10. gauss_pyr[i] = static_cast vlpllmage **>( calloc( intvls + 3, sizeof ( lpllmage* )));11./*12.13. precompute Gaussian sigmas using the following formula:14. 预计算每次高斯模糊的sigma15.16. \sigma_{total}A2 = \sigma_{i}A2 + \sigma_{i-1}A217. */18. sig[0] =sigma;19. k = pow( 2.0, 1.0 / intvls );20. for (i = 1; i < intvls + 3; i++ )21. {22. sig_prev = pow( k, i - 1 ) * sigma;23. sig_ total = sig_prev * k;24. sig[i] = sqrt( sig_total * sig_total - sig_prev * sig_prev );25. }26.27.28. for (o = 0; o < octvs; o++ )29. for ( i = 0; i < intvls + 3; i++ )30. {31. //对每一层进行降采样,形成高斯金字塔的每一层32. if ( o == 0 && i == 0 )33. gauss_pyr[o][i] = cvClonelmage(base);34.35. /* base of new octvave is halved image from end of previous octave */36. //每一组的第一层都是通过对前面一组的最上面一层的降采样实现的37. else if ( i == 0 )38. gauss_pyr[o][i] = downsample( gauss_pyr[o-1][intvls]);39.40. /* blur the current octave's last image to create the next one */41. //每一组的其他层则使通过使用不同sigma的高斯模糊来进行处理42. else43. {44. gauss_pyr[o][i] = cvCreatelmage( cvGetSize(gauss_pyr[o][i-1]),45. IPL_DEPTH_32F, 1 );46. cvSmooth( gauss_pyr[o][i-1], gauss_pyr[o][i],47. CV_GAUSSIAN, 0, 0, sig[i], sig[i]);48. }降采样处理输入参数:不解释这就是降采样,其实就是将图像通过最近邻算法缩小为原来的一半(3)构建高斯差分金字塔输入参数:不解释了参见上面的说明即可实际上差分金字塔的构成是通过对相邻层的图像进行相减获得的(4)极值点检测输入参数:contr_thr是去除对比度低的点所采用的阈值curv_thr是去除边缘特征的阈值SIFT_IMG_BORDE是预定义的图像边缘;通过和对比度阈值比较去掉低对比度的点;而通过is_extremum来判断是否为极值点,如果是则通过极值点插值的方式获取亚像素的极值点的位置。
SIFT算法详解及应用SIFT(Scale-Invariant Feature Transform)是一种在计算机视觉中常用的特征点提取算法,由David Lowe在1999年提出,并在2004年的论文中进行了详细阐述。
SIFT算法可以在不同尺度和旋转下保持图像的特征点不变性,因此在图像拼接、目标识别、图像匹配等领域具有广泛的应用。
1.尺度空间构建:SIFT算法使用高斯差分函数来检测不同尺度下的特征点。
通过在图像中采用不同尺度的高斯滤波,构建尺度空间,从而检测到不同尺度的图像特征。
2.关键点提取:在构建的尺度空间中,SIFT算法通过在每个像素点检测局部极值点来获取关键点。
具体的做法是对每个像素点在尺度空间上进行比较,找出该点与它相邻像素点和尺度上的极值,从而得到关键点。
3. 关键点定位:在关键点提取后,SIFT算法通过利用二阶偏导数的Hessian矩阵来对关键点进行进一步定位。
Hessian矩阵可以描述图像对灰度变化的响应,通过计算关键点周围像素点的Hessian矩阵,可以对关键点进行精确定位。
4.方向分配:在关键点定位后,SIFT算法为每个关键点分配一个主导方向。
通过对关键点周围的图像梯度进行统计,找到梯度方向分布最大的方向作为主导方向,以此来保证关键点对旋转具有不变性。
5.特征描述:在分配了主导方向后,SIFT算法使用局部图像梯度的方向直方图来描述关键点的局部特征。
将关键点周围的16x16邻域划分为4x4的小格子,计算每个小格子内的梯度方向直方图,最终得到一个128维的特征向量来表示关键点的局部特征。
1.尺度不变性:SIFT算法通过在不同尺度下检测特征点,使得算法对于图像缩放具有不变性。
这一特性使得SIFT在目标识别和图像匹配等领域具有广泛应用,可以应对不同尺寸的目标和场景。
2.旋转不变性:SIFT算法通过为每个关键点分配主导方向,使得算法对于图像旋转具有不变性。
这一特性使得SIFT在图像拼接和图像匹配中能够应对图像的旋转变换。
SIFT特征匹配算法介绍1.图像尺度空间在了解图像特征匹配前,需要清楚,两张照片之所以能匹配得上,是因为其特征点的相似度较高。
而寻找图像特征点,我们要先知道一个概念,就是“图像尺度空间”。
平时生活中,用人眼去看一张照片时,随着观测距离的增加,图像会逐渐变得模糊。
那么计算机在“看”一张照片时,会从不同的“尺度”去观测照片,尺度越大,图像越模糊。
那么这里的“尺度”就是二维高斯函数当中的σ值,一张照片与二维高斯函数卷积后得到很多张不同σ值的高斯图像,这就好比你用人眼从不同距离去观测那张照片。
所有不同尺度下的图像,构成单个原始图像的尺度空间。
“图像尺度空间表达”就是图像在所有尺度下的描述。
尺度是自然客观存在的,不是主观创造的。
高斯卷积只是表现尺度空间的一种形式。
2.“尺度空间表达”与“金字塔多分辨率表达”尺度空间表达——高斯卷积高斯核是唯一可以产生多尺度空间的核。
在低通滤波中,高斯平滑滤波无论是时域还是频域都十分有效。
我们都知道,高斯函数具有五个重要性质:(1)二维高斯具有旋转对称性;(2)高斯函数是单值函数;(3)高斯函数的傅立叶变换频谱是单瓣的;(4)高斯滤波器宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的;(5)二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长。
一个图像的尺度空间L(x,y,σ) ,定义为原始图像I(x,y)与一个可变尺度的2维高斯函数G(x,y,σ)卷积运算。
二维空间高斯函数表达式:图像的尺度空间就是:二维高斯函数与原始图像卷积运算后的结果,尺度空间的表达式:左图是二维高斯函数在数学坐标系下的图像。
右图是高斯函数对应的高斯核。
高斯核是圆对称的,在图片像素中展现出来的是一个正方形,其大小由高斯模板确定。
卷积的结果使原始像素值有最大的权重,距离中心越远的相邻像素值权重也越小。
那么,为什么要提到高斯模糊与“尺度空间表达”,它们有什么关系呢?“尺度空间表达”指的是不同高斯核所平滑后的图片的不同表达,意思就是:原始照片的分辨率,和经过不同高斯核平滑后的照片的分辨率是一样的。