SIFT算法详解及应用讲的很详细
- 格式:pdf
- 大小:3.08 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算法分析1 SIFT主要思想SIFT算法是一种提取局部特征的算法,在尺度空间寻找极值点,提取位置,尺度,旋转不变量。
2 SIFT算法的主要特点:a) SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性。
b)独特性(Distinctiveness)好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配.c) 多量性,即使少数的几个物体也可以产生大量SIFT特征向量。
d) 高速性,经优化的SIFT匹配算法甚至可以达到实时的要求。
e) 可扩展性,可以很方便的与其他形式的特征向量进行联合.3 SIFT算法流程图:4 SIFT 算法详细1)尺度空间的生成尺度空间理论目的是模拟图像数据的多尺度特征。
高斯卷积核是实现尺度变换的唯一线性核,于是一副二维图像的尺度空间定义为: ),(),,(),,(y x I y x G y x L *=σσ 其中 ),,(σy x G 是尺度可变高斯函数,2)(22/21),,(22σπσσy xe y x G +-=(x,y )是空间坐标,σ是尺度坐标。
σ大小决定图像的平滑程度,大尺度对应图像的概貌特征,小尺度对应图像的细节特征。
大的σ值对应粗糙尺度(低分辨率),反之,对应精细尺度(高分辨率)。
为了有效的在尺度空间检测到稳定的关键点,提出了高斯差分尺度空间(DOG scale —space )。
利用不同尺度的高斯差分核与图像卷积生成。
),,(),,(),()),,(),,((),,(σσσσσy x L k y x L y x I y x G k y x G y x D -=*-= DOG 算子计算简单,是尺度归一化的LoG 算子的近似。
图像金字塔的构建:图像金字塔共O 组,每组有S 层,下一组的图像由上一组图像降采样得到。
图1由两组高斯尺度空间图像示例金字塔的构建, 第二组的第一副图像由第一组的第一副到最后一副图像由一个因子2降采样得到.图2 DoG算子的构建:图1 Two octaves of a Gaussian scale-space image pyramid with s =2 intervals. The first image in the second octave is created by down sampling to last image in the previous图2 The difference of two adjacent intervals in the Gaussian scale—space pyramid create an interval in the difference—of—Gaussian pyramid (shown in green)。
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特征提取与匹配原理的深入解析一、引言在图像处理和计算机视觉领域,尺度不变特征变换(Scale-Invariant Feature Transform,SIFT)是一种被广泛应用的算法。
SIFT特征提取与匹配原理是图像处理中的重要一环,对于图像识别、图像配准、3D建模、物体跟踪等应用具有重要意义。
本文将深入解析SIFT特征提取与匹配原理,包括其基本概念、算法流程、优缺点以及应用场景。
二、SIFT特征提取原理1. 尺度空间极值检测SIFT算法首先通过构建尺度空间,在不同尺度下搜索所有可能的特征点。
这个过程是通过高斯差分(Difference of Gaussians,DoG)来实现的,它可以有效地检测出图像中的局部极值点,这些点具有尺度不变性,即无论图像被放大或缩小,这些点都能被检测到。
2. 特征点定位在检测到局部极值点后,SIFT算法会进行精确的定位。
这个过程包括去除低对比度的点和边缘点,因为这些点不稳定且对噪声敏感。
通过拟合三维二次函数来精确确定特征点的位置和尺度。
3. 方向分配为了使描述符具有旋转不变性,SIFT算法会为每个特征点分配一个主方向。
这是通过计算特征点周围像素的梯度方向和大小来实现的。
主方向是通过直方图统计梯度方向并找到最大的峰值来确定的。
4. 描述符生成最后,SIFT算法会生成一个描述符,用于描述特征点周围的图像信息。
描述符是通过将特征点周围的区域划分为4x4的子区域,并计算每个子区域的梯度方向和大小直方图来生成的。
描述符是一个128维的向量,具有对尺度、旋转和光照变化的不变性。
三、SIFT特征匹配原理在生成了SIFT描述符后,就可以进行特征匹配了。
这个过程是通过计算两个描述符之间的欧氏距离来实现的。
距离越小,表示两个特征点越相似。
为了提高效率,通常会使用K-D树等数据结构来加速匹配过程。
此外,还可以使用RANSAC等算法来消除误匹配,提高匹配的准确性。
四、优缺点分析SIFT算法的优点主要体现在以下几个方面:1. 尺度、旋转和光照不变性:SIFT描述符具有对尺度、旋转和光照变化的不变性,这使得它在各种场景下都能取得较好的效果。
特征提取(sift算法) sift算法在cv领域的重要性不⾔⽽喻,该作者的⽂章引⽤率在cv界是number1.本篇博客只是本⼈把sift算法知识点整理了下,以免忘记。
本⽂⽐较早的⼀篇博⽂中有使⽤opencv⾃带的sift做了个简单的实验,⽽这次主要是利⽤Rob Hess的sift源码来做实验,其实现在的opencv版本中带的sift算法也是Rob Hess的,只是稍微包装了下。
⾸先⽹上有不少⽂章介绍了sift算法,写得都不错,⽐如:该博客对sift算法理论做了介绍,且有⽰意图辅助理解,从该⽂中可以了解sift算法的⼤概流程.这篇⽂章对sift算法做了通俗易懂的解释. 这篇博客有教你怎样⽤c语⾔⼀步⼀步写sift算法。
该⽂也对sift做了详细的介绍,博客的作者还对sift匹配做了讲解。
下⾯还是简单看下sift算法的理论,具体的内容可以参考上⾯的⼏篇⽂章。
⼀、Sift描述⼦形成的步骤 1、构造⾼斯差分空间图像。
Sift特征点的检测时在DOG图像上进⾏的,DOG图像是将相邻尺度空间图像相减得到的。
且⾦字塔的每⼀层都要构造⼀个DOG空间图像。
默认参数是⾦字塔4层,即4个octave,每⼀个octave中有5张不同尺度的图⽚,不同octave的图⽚尺⼨⼤⼩不同,所以每⼀层中就会得到4幅DOG图像。
⾼斯⾦字塔的第1层第1副原图像是将原图像放⼤2倍且sigma(sigma=1.6)模糊,第2幅图像是k*sigma(k等于根号2)模糊,第3幅是k*k*sigma模糊,后⾯类推…⾼斯⾦字塔第2层第1幅图是选择⾦字塔上⼀层(这⾥是第1层)中尺度空间参数为k*k*sigma的那幅图(实际上是2倍的尺度空间)进⾏降采样(尺⼨⼤⼩为原来的1/4倍)得到,如果k不等于根号2,那么取原图的2*sigma降采样得到。
第2层第2幅图是在本层第⼀幅图尺度模糊系数增加k倍模糊后的图像,后⾯类似… ⽰意图如下所⽰:尺度不变当然是与图⽚尺⼨有关,即图⽚的尺⼨⼤⼩变化,但是其检测结果不变。
SIFT特征点提取与匹配算法SIFT (Scale-Invariant Feature Transform) 特征点提取与匹配算法是一种在计算机视觉领域中常用的特征点提取与匹配方法。
它由David Lowe在1999年提出,并且成为了计算机视觉领域中广泛应用的算法之一、SIFT特征点提取与匹配算法的主要思想在于提取图像中具有独特性、不受尺度变化和旋转变化影响的局部特征点,并通过特征匹配找到两幅图像之间的对应关系。
SIFT算法主要分为4个步骤:尺度空间极值检测、关键点定位、方向分配和特征描述。
第一步,尺度空间极值检测。
该步骤旨在检测图像中所有尺度的极值点作为特征点的候选。
为了对图像进行不同尺度的检测,SIFT算法使用了高斯金字塔。
高斯金字塔是通过对原始图像进行一系列高斯模糊和下采样操作构建的图像金字塔。
在每一组金字塔中,通过计算图像在不同尺度下的拉普拉斯变换,得到图像的尺度空间表征。
然后,通过比较每一层相邻像素点的灰度,检测出具有极值的像素点。
这些极值点将被作为候选的关键点。
第二步,关键点定位。
在这一步骤中,SIFT算法对候选的关键点进行一系列的筛选,以保留稳定的关键点。
首先,使用插值的方法对关键点进行亚像素精确定位。
然后,根据图像的梯度信息计算关键点的主曲率,通过判断主曲率是否小于阈值,来筛选掉低对比度的关键点和边缘响应的关键点。
此外,通过计算关键点的梯度方向,可以为后续的方向分配做准备。
第三步,方向分配。
为了提高特征点的旋转不变性,在这一步骤中,SIFT算法为每个关键点分配一个主方向。
具体地,SIFT算法将关键点的周围区域分为若干个子区域,并计算每个子区域的梯度方向直方图。
通过找到直方图中的局部极大值,选择关键点的主方向。
这样,即使图像发生旋转,关键点的描述子也能够保持一致性。
第四步,特征描述。
在这一步骤中,SIFT算法为每个关键点生成一个128维的描述子。
描述子的生成主要通过计算关键点周围区域内的梯度信息。
特征点匹配——SIFT算法详解SIFT(Scale-Invariant Feature Transform)是一种用于在图像中寻找关键点并进行匹配的算法。
该算法由David Lowe在1999年发布,并且一直被广泛应用于计算机视觉领域。
SIFT算法具有尺度不变性和旋转不变性,可以在不同的图像尺度和旋转角度下进行特征点的匹配。
SIFT算法的主要步骤包括关键点检测、关键点描述和特征点匹配。
关键点检测:在一张图像中,关键点通常是指存在于不同尺度和方向上的局部最大值或局部最小值。
SIFT使用高斯差分金字塔来检测关键点。
首先,通过对原始图像进行高斯模糊,创建一个金字塔,然后在每一组金字塔中计算高斯差分图像。
接着,通过比较每个像素周围的8个像素和自身像素的差值,找到局部极值点。
最后,使用尺度空间极大值抑制来进一步过滤出稳定的关键点。
关键点描述:在关键点检测后,需要对每个关键点进行描述。
SIFT使用局部图像梯度的直方图来描述关键点。
首先,在每个关键点周围的16x16像素块上计算梯度的幅值和方向。
然后将这个块分成16个4x4的子块,并在每个子块上计算一个8方向的直方图。
最后,将这些直方图连接起来形成一个128维的向量,用来表示该关键点。
在对两幅图像提取出关键点并进行描述后,需要对这些特征点进行匹配。
SIFT使用欧式距离来计算特征向量之间的相似性。
对于每个特征点,将其描述子与另一幅图像中的所有描述子进行比较,选择最佳匹配的特征点对。
SIFT算法在匹配过程中还引入了RANSAC算法来排除错误的匹配。
RANSAC(Random Sample Consensus)是一种迭代的鲁棒性估计方法,可以通过随机选择一个小子集来估计模型参数,并通过计算剩余误差和阈值来确定最终的模型。
总结一下,SIFT算法通过关键点检测、关键点描述和特征点匹配三个步骤来实现对图像中的特征点进行匹配。
该算法具有尺度不变性和旋转不变性,可以在不同的图像尺度和旋转角度下进行特征点的匹配。
SIFT概述SIFT特征是非常稳定的图像特征,在图像搜索、特征匹配、图像分类检测等方面应用十分广泛,但是它的缺点也是非常明显,就是计算量比较大,很难实时,所以对一些实时要求比较高的常见SIFT算法还是无法适用。
如今SIFT算法在深度学习特征提取与分类检测网络大行其道的背景下,已经越来越有鸡肋的感觉,但是它本身的算法知识还是很值得我们学习,对我们也有很多有益的启示,本质上SIFT算法是很多常见算法的组合与巧妙衔接,这个思路对我们自己处理问题可以带来很多有益的帮助。
特别是SIFT特征涉及到尺度空间不变性与旋转不变性特征,是我们传统图像特征工程的两大利器,可以扩展与应用到很多图像特征提取的算法当中,比如SURF、HOG、HAAR、LBP等。
夸张一点的说SIFT算法涵盖了图像特征提取必备的精髓思想,从特征点的检测到描述子生成,完成了对图像的准确描述,早期的ImageNet 比赛中,很多图像分类算法都是以SIFT与HOG特征为基础,所有SIFT算法还是值得认真详细解读一番的。
SIFT特征提取归纳起来SIFT特征提取主要有如下几步:•构建高斯多尺度金字塔•关键点精准定位与过滤•关键点方向指派•描述子生成构建高斯多尺度金字塔常见的高斯图像金字塔是每层只有一张图像,大致如下:上述的是通过图像金字塔实现了多分辨率,如果我们在每一层高斯金字塔图像生成的时候,给予不同的sigma值,这样不同的sigam就会产生不同模糊版本的图像,在同一层中就是实现不同尺度的模糊图像,再结合高斯金字塔,生成多个层多个尺度的金字塔,就是实现了图像的多尺度金字塔。
同一张图像不同尺度高斯模糊如下:为了在每层图像中检测 S 个尺度的极值点,DoG 金字塔每层需 S+2 张图像,因为每组的第一张和最后一张图像上不能检测极值,DoG 金字塔由高斯金字塔相邻两张相减得到,则高斯金字塔每层最少需 S+3 张图像,实际计算时 S 通常在2到5之间。
SIFT算法中生成高斯金字塔的规则如下(尺度空间不变性):关键点精准定位与过滤对得到的每层DOG图像,计算窗口3x3x3范围除去中心点之外的26点与中心点比较大小,寻找最大值或者最小值(极值点),如下图:即周围26个点(青色)要小于或者大于中心像素点,这样就得到初步的极值点候选,然后进行亚像素级别的精准定位。
SIFT算法原理SIFT算法详细介绍SIFT(Scale-Invariant Feature Transform)算法是一种用于图像特征提取和匹配的算法,被广泛应用于计算机视觉领域。
SIFT算法的核心思想是在不同尺度空间中检测和描述图像的局部特征,通过这些特征可实现图像的匹配、识别和定位。
1.尺度空间极值点检测:首先,SIFT算法通过高斯平滑滤波器构建高斯金字塔,每一层都是由上一层进行降采样得到的。
在不同尺度空间的图像上,通过比较每个像素点与其相邻像素点的灰度值,找出尺度空间极值点,作为关键点候选。
2.关键点定位:通过对尺度空间的极值点进行精确定位,以获取更加准确的关键点。
在关键点候选集合中,利用尺度空间的极值点与梯度方向直方图等局部特征进行过滤,剔除低对比度和边缘响应的关键点。
3.方向分配:为了使SIFT算法具有旋转不变性,需要为每个关键点分配主方向。
采用梯度直方图对关键点周围的图像区域进行统计,找到梯度方向直方图的峰值,作为该关键点的主方向。
4.关键点描述:在每个关键点周围的图像区域内,构建128维的特征向量,用于描述该关键点的局部特征。
通过计算每个像素点周围的梯度幅值和方向,并将其转换为特征向量的模式,构成关键点的描述符。
5.特征匹配:对于待匹配的图像,通过计算两个图像的特征向量之间的欧氏距离,进行特征匹配。
采用距离比值方法,选取最匹配和次匹配之间的距离比值小于预先设定的阈值的特征点,进行最终匹配。
6.特征筛选:通过应用RANSAC(随机抽样一致性)算法,对匹配结果进行筛选,剔除外点,保留内点,从而得到更准确的匹配结果。
SIFT算法的应用非常广泛,常用于目标识别、图像拼接、图像检索、三维重建和运动估计等领域。
在目标识别中,通过提取图像的SIFT特征,并与模板图像进行匹配,可以实现目标的识别和定位。
在图像拼接中,通过寻找多幅图像之间的共同特征点,并根据特征点的位置关系进行配准,可以实现图像的自动拼接。
SIFT(尺度不变特征转换)综述⼀.尺度不变特征转换是⼀种电脑视觉的算法⽤来侦测与描述影像中的局部性特征,在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量。
1999年发表,2004年完善。
⼆、应⽤范围包含物体辨识,机器⼈地图感知与导航,影像缝合,3D模型建⽴,⼿势辨识,影像追踪和动作对⽐。
算法特点:1)SIFT特征是基于物体上的⼀些局部外观的兴趣点⽽与影像的⼤⼩和旋转⽆关。
对于光线,噪声,⼀些微视⾓的改变容忍度也相当⾼。
2)独特性好,SIFT特征的信息量⼤,适合在海量数据库中快速准确匹配。
3)产量⾼,少数物体也可以产⽣⼤量SIFT特征向量,可以⽤于遮挡下的物体检测。
4)⾼速性,现今的电脑硬件速度下和⼩型的特征数据库条件下,辨识速度可以接近即时运算。
5)可拓展性,可以很⽅便的与其他形式的特征向量进⾏联合。
可以解决的问题:1)⽬标的旋转、缩放、平移2)图像的仿射,投影变换3)光照影响4)⽬标遮挡5)杂物场景6)噪声SIFT算法的实质是在不同的尺度空间上找出关键点,计算出关键点⽅向。
这些关键点很突出,如,⾓点,边缘点,暗区的亮点,亮区的暗点。
步骤:1)空间尺度极值检测:通过⾼斯微分函数来识别潜在的对于尺度与旋转不变的兴趣点。
2)关键点定位:在每个候选位置上,通过⼀个拟合精细的模型来确定位置与尺度。
关键点的选择依据于它们的稳定程度。
3)⽅向确定:基于图像局部的梯度⽅向,分配给每个关键点⼀个或多个⽅向。
4)关键点描述:在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。
这些梯度被变换成⼀种表⽰,这种表⽰允许较⼤的局部形状的变形和光照变化。
SIFT算法原理SIFT算法详细介绍SIFT(Scale-Invariant Feature Transform)是一种用于计算机视觉领域的算法,用于检测和描述图像中的局部特征。
它被广泛应用于目标识别、图像匹配和三维重建等任务中。
SIFT算法通过提取图像的稳定特征点来实现图像的尺度和旋转不变性。
下面详细介绍SIFT算法的原理和步骤。
1.尺度空间极值检测:SIFT算法首先在不同的尺度空间中通过高斯差分金字塔(Difference of Gaussian,DoG)寻找稳定的特征点。
通过对输入图像进行高斯滤波,得到一系列不同尺度的图像。
然后,通过对相邻的两个不同尺度的图像进行差分操作,得到高斯差分图像,即DoG金字塔。
接着,在DoG金字塔中寻找局部极值点,即该点的像素值在其周围的3×3×3邻域内最大或最小。
2.生成关键点:在尺度空间极值点检测后,通过插值计算亚像素精度的关键点位置,以获得更精确的特征点位置。
对比邻域像素的梯度幅值和方向,重新定位关键点位置。
3.消除边缘响应:排除低对比度的稳定特征点和位于边缘的特征点,以提高匹配的准确性。
通过计算Hessian矩阵的迹和行列式来判断是否为边缘响应。
4.计算主方向:为了使SIFT算法对旋转具有不变性,对每个关键点计算该点的主方向。
在关键点周围的邻域内,计算梯度幅值和方向直方图,选取主方向作为该特征点的方向描述符。
5.生成特征描述子:在关键点检测和主方向计算后,利用关键点附近的图像区域创建描述子。
以关键点为中心,将图像区域分为若干个子区域,并在每个子区域内计算局部特征。
对每个子区域,计算梯度幅值和方向直方图,形成一个向量。
最后将这些向量串联形成一个特征向量,作为该特征点的描述子。
6.特征点匹配:使用描述子来匹配不同图像中的特征点。
通过计算两个特征点描述子之间的距离来判断它们的相似性。
通常使用欧氏距离或余弦相似度来度量特征点之间的差异。
然后,根据距离进行特征点匹配,通过选取最佳匹配对的阈值来过滤不准确的匹配。