SIFT算法实现原理步骤
sift特征点检测算法原理
sift特征点检测算法原理SIFT特征点检测算法原理SIFT(Scale-Invariant Feature Transform)是一种用于在图像中检测和描述局部特征的算法。
它的原理是通过在不同尺度空间中寻找关键点,并计算这些关键点的局部特征描述子,从而实现图像的特征匹配和识别。
1. 尺度空间构建SIFT算法首先通过高斯金字塔构建尺度空间,以便在不同尺度下检测出特征点。
高斯金字塔是通过对原始图像进行多次降采样得到的一系列图像,每个图像都是前一层图像的二分之一。
在每一层图像上应用高斯滤波器,得到一系列平滑图像。
2. 关键点检测在构建好的尺度空间中,SIFT算法使用Difference of Gaussian (DoG)来检测关键点。
DoG是通过对相邻两层平滑图像进行相减得到的,可以有效地检测出图像中的边缘和角点。
在DoG图像中,局部极值点被认为是潜在的关键点。
3. 关键点定位为了准确定位关键点的位置,SIFT算法采用了尺度空间极值点的精确定位方法。
它使用T aylor展开式对DoG图像进行拟合,通过求解极值点的二阶导数来精确定位关键点的位置。
同时,为了排除低对比度的关键点和边缘响应的干扰,SIFT算法会对关键点进行一定的筛选。
4. 方向分配为了使特征描述子具有旋转不变性,SIFT算法对每个关键点分配一个主方向。
它通过计算关键点周围像素的梯度方向直方图,找出主要梯度方向,并将其作为关键点的方向。
这样可以保证特征描述子在旋转变换下具有一定的稳定性。
5. 特征描述在关键点的周围区域内构建特征描述子,用于表示关键点的局部特征。
SIFT算法将关键点周围的图像区域划分为若干个子区域,并在每个子区域内计算梯度方向直方图。
最后将这些直方图连接起来,得到一个具有128维特征向量的特征描述子。
通过以上步骤,SIFT算法可以在图像中检测出大量的关键点,并为每个关键点生成一个128维的特征描述子。
这些特征描述子具有尺度不变性、旋转不变性和光照不变性等特点,可以用于图像匹配、物体识别和三维重建等应用领域。
sift算法原理(备份)
15
令 γ 为最大特征值与最小特征值的比值,则
α = γβ
tr ( H ) 2 (α + β ) 2 (γβ + β ) 2 (γ + 1) 2 = = = 2 Det ( H ) αβ γ γβ
为了检测主曲率是否在某阈值 γ 下,只需检测
tr ( H ) 2 (γ + 1) 2 < γ Det ( H )
L ( x, y , σ ) = G ( x, y , σ ) * I ( x, y )
m( x, y ) = ( L( x + 1, y ) − L( x − 1, y )) 2 + ( L( x, y + 1) − L( x, y − 1)) 2
θ ( x, y ) = arctan
L( x + 1, y ) − L( x − 1, y ) L( x, y + 1) − L( x, y − 1)
9
•将每一组尺度空 间中的相邻高斯 尺度函数相减, 生成高斯差分金 字塔。
10
a是第二组的第一层图像由第一组的的最后第二层图像隔点采样得到。b 是通过相邻高斯尺度空间图像想减得到。
a
b
11
▲3. DOG空间的极值检测:
极值点的搜索是通过同一组内 DOG相邻层之间比较完成的. 为了寻找尺度空间的极值点,每 一个采样点都要和它所有的相邻 点比较,以确保在尺度空间和二 维图像空间都检测到极值点。
γ
16
没有进行任何处理的关键点
17
去除了低对比度之后的点
18
去除边界效应强的特征点
19
Ⅲ. 确定关键点的主方向
为了实现图像的实现旋转不变性,需要根据检测到的特征点局部图 像结构求得一个方向基准。用图像梯度的方法求取该局部结构的稳 定方向。对于已检测到的特征点,我们已经知道该特征点的尺度 值 σ ,因此根据这一尺度值,得到接近这一尺度值的高斯图像。
sift算法的原理和步骤
sift算法的原理和步骤SIFT算法的原理和步骤SIFT算法是一种用于图像特征提取的算法,它能够从图像中提取出具有独特性、稳定性和可重复性的关键点,用于图像匹配、目标跟踪等任务。
本文将介绍SIFT算法的原理和步骤。
一、原理1. 尺度空间尺度空间是指同一物体在不同尺度下的表现形式。
SIFT算法采用高斯金字塔来实现尺度空间的构建,即将原始图像不断缩小并平滑处理,得到一系列模糊程度不同的图像。
2. 关键点检测在尺度空间中,SIFT算法采用DoG(Difference of Gaussian)来检测关键点。
DoG是指两个不同尺寸的高斯滤波器之间的差值,可以有效地提取出具有高斯拉普拉斯变换极值点(LoG)特征的区域。
3. 方向确定对于每个关键点,在其周围区域内计算梯度幅值和方向,并统计梯度直方图。
最终确定该关键点最显著的梯度方向作为其主方向。
4. 描述子生成以关键点为中心,生成一个16x16的方形区域,并将其分为4x4的小块。
对于每个小块,计算其内部像素的梯度方向直方图,并将其串联成一个128维的向量,作为该关键点的描述子。
5. 匹配通过计算不同图像之间的关键点描述子之间的距离来进行匹配。
采用最近邻法(Nearest Neighbor)和次近邻法(Second Nearest Neighbor)来进行筛选,从而得到最终的匹配结果。
二、步骤1. 构建高斯金字塔对于原始图像,采用高斯滤波器进行平滑处理,并将其缩小一定比例后再次平滑处理,得到一系列不同尺度下的图像。
这些图像构成了高斯金字塔。
2. 构建DoG金字塔在高斯金字塔中,相邻两层之间做差得到一组DoG金字塔。
通过在DoG金字塔上寻找局部极值点来检测关键点。
3. 确定关键点主方向对于每个关键点,在其周围区域内计算梯度幅值和方向,并统计梯度直方图。
最终确定该关键点最显著的梯度方向作为其主方向。
4. 生成描述子以关键点为中心,生成一个16x16的方形区域,并将其分为4x4的小块。
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》。
尺度不变特征变换算法
尺度不变特征变换算法一、前言尺度不变特征变换算法(Scale-Invariant Feature Transform,SIFT)是一种用于图像处理和计算机视觉的算法,由David Lowe于1999年提出。
SIFT算法可以在不同尺度和旋转下找到图像中的关键点,并提取出这些关键点的局部特征描述符,从而实现对图像的匹配、识别等任务。
二、SIFT算法原理1. 尺度空间构建SIFT算法首先通过高斯滤波器构建尺度空间,以便在不同尺度下检测图像中的关键点。
高斯滤波器可以模拟人眼对图像的模糊效果,使得在不同尺度下能够检测到具有相似形状但大小不同的物体。
2. 关键点检测在构建好尺度空间后,SIFT算法通过DoG(差分高斯)金字塔来寻找关键点。
DoG金字塔是由相邻两层高斯金字塔之差得到的,它可以有效地检测出具有不同尺度和方向的局部极值点。
3. 方向分配为了使得特征描述子具有旋转不变性,在确定关键点位置后,SIFT算法还需要计算每个关键点的主方向。
它通过计算关键点周围像素的梯度方向直方图来确定主方向,从而使得特征描述子能够在不同角度下进行匹配。
4. 特征描述在确定了关键点位置和主方向之后,SIFT算法通过计算关键点周围像素的梯度幅值和方向来生成特征描述子。
这个过程中,SIFT算法使用了一个16×16的窗口,并将其分成4×4个小窗口,在每个小窗口中计算8个梯度方向的直方图,最终生成一个128维的特征向量。
5. 特征匹配在提取出两幅图像中所有关键点的特征描述子后,SIFT算法采用欧氏距离来计算两个特征向量之间的相似度,并使用比率测试来判断是否为匹配点。
如果两个特征向量之间的距离小于一定阈值,并且与次近邻之间距离比例大于一定比例,则认为是匹配点。
三、SIFT算法优缺点1. 优点:(1)尺度不变性:SIFT算法可以在不同尺度下检测到具有相似形状但大小不同的物体;(2)旋转不变性:SIFT算法可以计算每个关键点的主方向,从而使得特征描述子能够在不同角度下进行匹配;(3)鲁棒性:SIFT算法对于光照、视角、噪声等因素有较好的鲁棒性。
SIFT算法原理
SIFT算法原理SIFT(Scale-Invariant Feature Transform)算法是一种用于检测和描述图像中的局部特征的算法,它具有尺度不变性和旋转不变性的特点。
SIFT算法由David G. Lowe在1999年提出,被广泛应用于计算机视觉领域的图像匹配、目标识别等任务。
1.尺度空间的构建:SIFT算法首先构建图像的尺度空间,通过对原始图像进行高斯模糊操作得到一组图像。
具体操作是利用高斯核对图像进行卷积,每次卷积后将图像尺寸缩小一半,得到不同尺度的图像。
这样可以在不同尺度上寻找到特征点,使算法具有尺度不变性。
2.关键点的检测:在不同尺度的图像中,SIFT算法通过在每个像素点周围进行高斯差分操作,来寻找潜在的关键点。
具体操作是计算每个像素点的高斯差分空间,找到极大值和极小值点。
这些极值点成为候选关键点。
3.关键点的定位:在候选关键点的基础上,SIFT算法通过对梯度方向和梯度幅值进行计算,进一步筛选出具有稳定性的关键点。
具体操作是在关键点周围的邻域内,计算图像的梯度方向和梯度幅值,并将邻域划分为8个方向的子区域,求出每个子区域内的梯度方向直方图。
通过梯度方向直方图的峰值来确定关键点的主要方向。
4.关键点的描述:SIFT算法通过关键点的主方向,对其周围的图像区域进行描述。
具体操作是在关键点周围的邻域内,将邻域划分为多个子区域,并计算每个子区域内的梯度方向和梯度幅值。
这样可以得到一个向量组成的特征向量,用来描述关键点周围的图像区域。
为了保持对尺度和旋转的不变性,SIFT算法对特征向量进行归一化和抗干扰处理。
5.特征点的匹配:在进行目标识别等任务时,SIFT算法需要对图像中的特征点进行匹配。
为了提高匹配的准确性,在进行特征点匹配时,SIFT算法采用了一种特殊的匹配方法,基于最近邻和次近邻的比值。
对于每个特征点,找到其在另一幅图像中的最近邻点和次近邻点,通过计算这两个点之间的距离比值,进行匹配判断。
sift算法计算旋转参数
sift算法计算旋转参数SIFT算法是一种常用的图像特征提取算法,它可以用于计算图像的旋转参数。
本文将介绍SIFT算法的原理和计算旋转参数的步骤。
一、SIFT算法原理SIFT(Scale Invariant Feature Transform)算法是由David Lowe于1999年提出的一种图像处理算法,它主要用于图像特征提取和匹配。
SIFT算法通过寻找图像中的关键点,并提取关键点周围的特征描述子,从而实现对图像的特征提取和匹配。
SIFT算法的主要步骤包括:尺度空间极值检测、关键点定位、方向分配、特征描述和特征匹配。
其中,关键点定位和方向分配是计算旋转参数的关键步骤。
二、计算旋转参数的步骤1. 尺度空间极值检测SIFT算法首先对输入图像进行尺度空间的构建,通过高斯金字塔和DOG(Difference of Gaussian)计算得到图像的尺度空间。
然后,在每组DOG图像中寻找极值点,用于标记潜在的关键点。
2. 关键点定位在寻找极值点的基础上,SIFT算法采用了稳定的关键点定位方法,通过比较极值点与周围像素的梯度和曲率信息,筛选出稳定的关键点。
这些关键点具有尺度和旋转不变性,可以在不同尺度和旋转角度的图像中进行匹配。
3. 方向分配为了使关键点具有旋转不变性,SIFT算法为每个关键点分配一个主方向。
具体做法是在关键点周围的区域中计算梯度直方图,找到梯度最大的方向作为主方向。
这样,即使图像发生旋转,关键点的描述子仍然可以进行匹配。
4. 特征描述在确定了关键点的尺度和旋转参数后,SIFT算法采用了局部图像块的特征描述方法。
它将关键点周围的图像区域分成若干个子区域,并计算每个子区域的梯度直方图。
然后,将这些直方图组合成一个特征向量,形成关键点的描述子。
5. 特征匹配SIFT算法使用特征向量进行特征匹配。
常用的方法是计算两个图像之间的欧氏距离,找到距离最小的匹配对。
通过特征匹配,可以实现对图像的旋转参数的计算。
SIFT特征提取算法
SIFT特征提取算法SIFT(Scale-Invariant Feature Transform)特征提取算法是一种用于图像的局部特征分析的算法。
它能够提取出图像中的关键点,并对这些关键点进行描述,从而可以用于图像匹配、物体识别等应用领域。
本文将详细介绍SIFT算法的原理和过程。
1.尺度空间构建SIFT算法首先通过使用高斯滤波器来构建图像的尺度空间,以便在不同尺度下检测关键点。
高斯滤波器可以通过一系列的高斯卷积操作实现,每次卷积之后对图像进行下采样(降低分辨率),得到不同尺度的图像。
2.关键点检测在尺度空间构建完成后,SIFT算法使用差分运算来检测关键点。
差分运算可以通过对图像进行高斯平滑操作来实现,然后计算相邻尺度之间的差分图像。
对差分图像进行极值检测,即寻找局部最大和最小值的像素点,这些像素点就是图像中的关键点。
3.关键点精确定位关键点的精确定位是通过拟合关键点周围的局部图像来实现的。
SIFT算法使用了一种高度鲁棒的方法,即利用关键点周围梯度的方向和大小来进行拟合。
具体来说,SIFT算法在关键点周围计算图像的梯度幅值和方向,并构建梯度直方图。
然后通过在梯度直方图中寻找局部极值来确定关键点的方向。
4.关键点描述关键点的描述是为了提取关键点周围的特征向量,用于后续的匹配和识别。
SIFT算法使用了一种局部特征描述算法,即将关键点周围的图像区域划分为小的子区域,并计算每个子区域的梯度方向直方图。
然后将这些直方图组合起来,构成一个维度较高的特征向量。
5.特征向量匹配在完成关键点描述之后,SIFT算法使用一种近似的最近邻方法来进行特征向量的匹配。
具体来说,使用KD树或者暴力匹配的方法来寻找两幅图像中最相似的特征向量。
通过计算特征向量之间的距离,可以找到最相似的匹配对。
6.尺度不变性SIFT算法具有尺度不变性的特点,即对于图像的缩放、旋转和视角变化等变换具有较好的鲁棒性。
这是因为在特征提取的过程中,SIFT算法对图像进行了多尺度的分析,并利用了关键点周围的梯度信息进行描述。
SIFT算法原理
SIFT算法原理SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)是一种用于图像处理和计算机视觉中的特征提取算法。
SIFT算法最初由David Lowe于1999年提出,它的核心思想是通过检测图像中的关键点,并提取这些关键点周围的局部特征描述子来进行图像匹配、物体识别、图像拼接等应用。
1.尺度空间构建首先,为了使SIFT算法对图像特征具有尺度不变性,需要构建一系列尺度空间图像。
这是通过将原始图像应用高斯模糊,然后进行下采样得到不同尺度的图像来实现的。
在每个尺度级别上,通过使用高斯差分金字塔(Difference of Gaussian,DoG)来提取图像中的关键点。
2.极值点检测在尺度空间中,通过在DoG金字塔中寻找局部极值点来检测关键点。
这些局部极值点通常表示图像中的显著特征点。
3.关键点定位对于每个检测到的极值点,需要通过拟合其周围的梯度方向来确定更加精确的位置和尺度。
这可以找到关键点的精确位置,并且作为后续步骤的输入。
4.方向分配为了使SIFT算法具有旋转不变性,需要为每个关键点分配一个主方向。
这可以通过计算关键点周围区域的梯度方向直方图来实现。
选择直方图中峰值最高的方向作为主方向。
5.特征描述在关键点的周围区域内,通过计算局部区域的梯度幅值和方向来构建特征描述子。
这些特征描述子对尺度、旋转和光照等变化都具有较强的鲁棒性,可以用来进行匹配和识别。
总的来说,SIFT算法通过构建尺度空间,检测局部极值点,定位关键点,分配主方向以及构建特征描述子等步骤,提取出图像中的稳定且具有鲁棒性的特征点。
这些特征点可以用于图像匹配、物体识别、图像拼接等计算机视觉任务,并且对尺度、旋转以及光照等变化具有一定的不变性。
SIFT算法在实际应用中具有广泛的应用价值,并成为计算机视觉领域中最经典的特征提取算法之一1.尺度空间构建2.关键点检测3.关键点定位对于检测到的关键点,SIFT算法通过拟合其周围的梯度方向来定位关键点的精确位置和尺度。
matlab sift角点提取
MATLAB SIFT角点提取1. 介绍SIFT(Scale-Invariant Feature Transform)是一种用于图像特征提取的算法,它能够在不同尺度和旋转下寻找稳定的特征点。
在计算机视觉和图像处理领域,SIFT被广泛应用于目标识别、图像匹配、三维重建等任务中。
本文将介绍如何使用MATLAB实现SIFT角点提取,并详细讲解SIFT算法的原理和关键步骤。
2. SIFT算法原理SIFT算法由David Lowe于1999年提出,它是一种基于局部特征的描述子,具有尺度不变性和旋转不变性。
SIFT算法主要包含以下几个步骤:2.1 尺度空间极值检测首先,在不同尺度下对输入图像进行高斯模糊处理,得到一系列模糊图像。
然后,在每个尺度上检测局部极值点,这些极值点可能是关键点的候选。
2.2 关键点定位对于每个候选关键点,通过比较其周围像素的梯度幅值和方向来判断其是否为真正的关键点。
通过计算Hessian矩阵的行列式和迹,可以判断关键点的稳定性。
2.3 方向分配为了使SIFT具有旋转不变性,需要为每个关键点分配一个主方向。
通过计算关键点周围像素的梯度方向直方图,可以找到主要梯度方向,并将其作为关键点的方向。
2.4 关键点描述在关键点周围建立一个以关键点为中心的描述子区域,并计算该区域内像素的梯度幅值和方向。
通过将该区域划分为若干个子区域,并统计每个子区域内梯度方向直方图,最终得到一个128维的特征向量作为关键点的描述子。
3. MATLAB实现SIFT角点提取在MATLAB中,我们可以使用vl_feat工具包来实现SIFT算法。
vl_feat是一个开源的计算机视觉库,提供了丰富的图像处理和特征提取函数。
以下是使用MATLAB实现SIFT角点提取的步骤:3.1 安装vl_feat首先,需要下载并安装vl_feat工具包。
可以从官方网站()下载最新版本,并按照官方文档进行安装。
3.2 加载图像使用imread函数加载待处理的图像,并将其转换为灰度图像。
sift特征提取与匹配原理
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特征提取原理
SIFT(Scale-Invariant Feature Transform)特征提取算法是一种在计算机视觉中常用的特征提取方法。
它能够在图像中提取出具有尺度不变性、旋转不变性和光照不变性的特征点。
SIFT特征提取的主要步骤如下:
1. 尺度空间极值点检测:通过高斯差分金字塔的方法,检测图像在不同尺度上的极值点,找到图像中的关键点。
2. 关键点定位:对尺度空间极值点进行精确定位,使用尺度空间的极值点和周围像素的梯度信息,计算关键点的位置和尺度。
3. 方向分配:为每个关键点分配一个主方向,使得关键点具有旋转不变性。
通过计算关键点周围的梯度方向直方图来确定主方向。
4. 关键点描述:使用关键点周围的局部图像块,根据主方向将关键点附近的图像数据进行归一化处理,并得到一个128维的描述子。
5. 特征点匹配:通过计算两幅图像中的特征点的相似度,进行特征点的匹配,从而找到两幅图像的对应点。
SIFT特征提取的原理主要基于尺度空间和梯度信息。
通过多
尺度的高斯模糊操作,可以提取出图像中不同尺度下的特征点,使得算法对于目标物体的尺度变化具有不变性。
而通过计算图
像的梯度信息,可以得到图像中的边缘信息,进一步提取出具有边缘特征的关键点。
同时,SIFT算法还利用图像的局部特征来描述关键点,使得算法对于图像的旋转和光照变化也具有一定的不变性。
总而言之,SIFT特征提取算法是一种基于尺度空间和梯度信息的特征提取方法,能够提取出具有尺度不变性、旋转不变性和光照不变性的特征点,对于图像匹配、物体识别等计算机视觉任务具有广泛应用。
sift(尺度不变特征变换)的原理
sift(尺度不变特征变换)的原理尺度不变特征变换(Scale-Invariant Feature Transform,简称SIFT)是一种用于图像处理和计算机视觉领域的特征提取算法,由David Lowe在1999年首次提出。
与其他特征提取算法相比,SIFT具有尺度不变性、旋转不变性、光照不变性和局部性等特点,因此在许多应用领域中得到了广泛应用,如物体识别、图像匹配和三维重建等。
SIFT算法主要包括四个关键步骤:尺度空间极值点检测、关键点定位、关键点方向分配和局部特征描述。
第一步,尺度空间极值点检测。
图像中的一个关键点应该能在不同尺度的图像中被检测到。
为了实现尺度不变性,SIFT算法采用高斯差分函数(Difference of Gaussian, DoG)来检测尺度空间中的极值点。
高斯差分图像是通过两个不同尺度的高斯模糊图像相减得到的。
在不同的尺度和位置上,对差分图像进行非极大值抑制和阈值处理,得到稳定的关键点。
第二步,关键点定位。
在每个尺度空间中检测到的极值点需要进行精确定位,以提取具有稳定性和鲁棒性的关键点。
SIFT算法引入了尺度空间的二阶偏导数来计算关键点的位置和尺度。
通过建立高斯金字塔,利用图像的不同分辨率,通过差分图像计算尺度。
然后,在关键点周围的邻域内,通过二阶偏导数来确定关键点的位置。
第三步,关键点方向分配。
为了使计算机具有旋转不变性,SIFT算法需要为每个关键点分配一个主方向。
在关键点周围的邻域内,计算梯度幅值和方向,构建梯度直方图。
然后,在梯度直方图中寻找主方向,选取梯度幅值最大的方向作为关键点的主方向。
第四步,局部特征描述。
SIFT算法通过关键点的局部邻域计算局部特征描述子,以实现光照不变性和局部性。
在关键点周围的邻域内,通过建立一个统一的坐标系,将关键点归一化为固定大小的邻域。
然后,在归一化的邻域内计算梯度幅值和方向。
为了增强鲁棒性,SIFT采用了高斯加权窗口来抑制噪声和光照变化的影响。
Python语言实现SIFT算法
Python语⾔实现SIFT算法⽬录⼀、什么是SIFT算法⼆、准备⼯作2.1 实验设备2.2 OpenCV安装三、实验⼯作3.1 图像选择3.2 程序实现3.3 程序结果本⽂侧重于如何使⽤Python语⾔实现SIFT算法所有程序已打包:⼀、什么是SIFT算法 SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是⽤于图像处理领域的⼀种描述。
这种描述具有尺度不变性,可在图像中检测出关键点,是⼀种局部特征描述⼦。
⼆、准备⼯作2.1 实验设备 本⽂在Windows10系统上,使⽤pycharm软件完成所有实验。
2.2 OpenCV安装 我们可以使⽤OpenCV库中的cv2.xfeatures2d.SIFT_create()函数实现SIFT,但由于专利保护,很多版本的OpenCV库已⽆法提供该函数,⽬前仅3.4.2.16版本的OpenCV库可使⽤此函数。
安装教程: (1)查看当前版本opencv:进⼊cmd(组合键win+R,输⼊cmd),输⼊conda list,查看当前pycharm所有库并找到opencv-python,若找不到库,说明没有安装。
(2)卸载原版本(在cmd中输⼊:pip uninstall opencv) (3)安装新版本(在cmd中输⼊:pip install opencv-python==3.4.2.16 -i "https:///simple/" (4)安装附属库(在cmd中输⼊:pip install opencv-contrib-python==3.4.2.16 -i "https:///simple/")三、实验⼯作3.1 图像选择 这⾥选择经典的lena图像作为实验对象,为了选择⼀个待匹配图像,本⽂使⽤如下代码对lena图像进⾏逆时针45°旋转。
from PIL import Imageimg = Image.open('lena.png')img2 = img.rotate(45) # 逆时针旋转45°img2.save("lena_rot45.png")img2.show()参考图像与待匹配图像(即旋转图像)如下图所⽰:3.2 程序实现"""图像匹配——SIFT点特征匹配实现步骤:(1)读取图像;(2)定义sift算⼦;(3)通过sift算⼦对需要匹配的图像进⾏特征点获取;a.可获取各匹配图像经过sift算⼦的特征点数⽬(4)可视化特征点(在原图中标记为圆圈);a.为⽅便观察,可将匹配图像横向拼接(5)图像匹配(特征点匹配);a.通过调整ratio获取需要进⾏图像匹配的特征点数量(ratio值越⼤,匹配的线条越密集,但错误匹配点也会增多)b.通过索引ratio选择固定的特征点进⾏图像匹配(6)将待匹配图像通过旋转、变换等⽅式将其与⽬标图像对齐"""import cv2 # opencv版本需为3.4.2.16import numpy as np # 矩阵运算库import time # 时间库original_lena = cv2.imread('lena.png') # 读取lena原图lena_rot45 = cv2.imread('lena_rot45.png') # 读取lena旋转45°图sift = cv2.xfeatures2d.SIFT_create()# 获取各个图像的特征点及sift特征向量# 返回值kp包含sift特征的⽅向、位置、⼤⼩等信息;des的shape为(sift_num, 128), sift_num表⽰图像检测到的sift特征数量(kp1, des1) = sift.detectAndCompute(original_lena, None)(kp2, des2) = sift.detectAndCompute(lena_rot45, None)# 特征点数⽬显⽰print("=========================================")print("=========================================")print('lena 原图特征点数⽬:', des1.shape[0])print('lena 旋转图特征点数⽬:', des2.shape[0])print("=========================================")print("=========================================")# 举例说明kp中的参数信息for i in range(2):print("关键点", i)print("数据类型:", type(kp1[i]))print("关键点坐标:", kp1[i].pt)print("邻域直径:", kp1[i].size)print("⽅向:", kp1[i].angle)print("所在的图像⾦字塔的组:", kp1[i].octave)print("=========================================")print("=========================================")"""⾸先对原图和旋转图进⾏特征匹配,即图original_lena和图lena_rot45"""# 绘制特征点,并显⽰为红⾊圆圈sift_original_lena = cv2.drawKeypoints(original_lena, kp1, original_lena, color=(255, 0, 255))sift_lena_rot45 = cv2.drawKeypoints(lena_rot45, kp2, lena_rot45, color=(255, 0, 255))sift_cat1 = np.hstack((sift_original_lena, sift_lena_rot45)) # 对提取特征点后的图像进⾏横向拼接cv2.imwrite("sift_cat1.png", sift_cat1)print('原图与旋转图特征点绘制图像已保存')cv2.imshow("sift_point1", sift_cat1)cv2.waitKey()# 特征点匹配# K近邻算法求取在空间中距离最近的K个数据点,并将这些数据点归为⼀类start = time.time() # 计算匹配点匹配时间bf = cv2.BFMatcher()matches1 = bf.knnMatch(des1, des2, k=2)print('⽤于原图和旋转图图像匹配的所有特征点数⽬:', len(matches1))# 调整ratio# ratio=0.4:对于准确度要求⾼的匹配;# ratio=0.6:对于匹配点数⽬要求⽐较多的匹配;# ratio=0.5:⼀般情况下。
SIFT特征提取算法详解
SIFT特征提取算法详解SIFT(Scale-Invariant Feature Transform)特征提取算法是一种用于在图像中寻找关键点的方法,该算法具有尺度不变性,能够提取出能够对图像进行描述的稳定的局部特征。
本文将从算法原理、关键步骤以及优缺点等方面进行详细解析。
一、算法原理SIFT算法的主要思想是通过寻找关键点和计算这些关键点的特征向量,来描述图像中的局部特征,并实现对尺度、旋转和亮度的不变性。
1.尺度空间极值检测SIFT算法首先通过DoG(Difference of Gaussian)来检测图像中的关键点。
DoG是指在不同尺度下的高斯平滑图像之间的差异,这样可以有效地检测出图像中的尺度空间极值点。
2.关键点精确定位通过在DoG金字塔中精确定位关键点,SIFT算法可以找到图像中的关键点。
该算法使用了Hessian矩阵的近似来计算特征点的位置和尺度,并用Taylor展开来精确计算特征点的位置。
3.方向分配为了使特征具有旋转不变性,SIFT算法通过计算特征点周围的梯度方向直方图来分配特征点的主方向。
具体步骤是确定特征点周围像素的梯度幅值和方向,并将方向分配到主方向上。
4.特征描述在计算了特征点的尺度和方向之后,SIFT算法通过计算特征点周围的局部图像块的梯度直方图来描述特征。
这些梯度直方图能够描述特征点周围的领域特征,并且具有尺度和旋转不变性。
二、关键步骤详解1.构建高斯金字塔SIFT算法首先对输入的图像进行平滑处理,然后通过不断降采样生成高斯金字塔。
高斯金字塔能够提供多尺度图像。
2.构建差分金字塔利用高斯金字塔计算DoG金字塔。
通过对相邻两层高斯图像进行差分操作,可以得到相应的两层DoG图像。
3.检测尺度空间极值点在DoG金字塔上,通过比较每一个像素点与其8邻域和相邻的26个像素点的像素值来确定极值点。
具体方法是通过比较每一层图像的像素值与周围像素值进行判定。
4.精确定位关键点通过利用Taylor展开公式来精确定位关键点的位置,这可以减小特征点在尺度和位置上的误差。
基于SIFT算法的图像拼接技术研究与实现
基于SIFT算法的图像拼接技术研究与实现图像拼接技术是指将多张照片合成一张更大的画面,以获取更广阔的视野或更宽广的视角。
这种技术可以用于旅游景点的浏览、建筑物的全景展示等多个领域,因此在现代科技中被广泛使用。
本文将主要介绍使用SIFT算法实现图像拼接的技术原理和应用。
一、SIFT算法简介SIFT(Scale-Invariant Feature Transform)算法可以提取图像中的局部特征并具有旋转不变性和尺度不变性。
这种算法在图像相关应用中非常实用,如图像识别、图像匹配、图像拼接等方面都有广泛的应用。
SIFT算法一般分为以下步骤:1. 尺度空间构建通过利用高斯卷积阶段来判断不同图像之间的尺度差异,将每张照片分成多层尺度的图像金字塔。
2. 关键帧检测在每层尺度中,通过计算高斯差分的方法来检测出图像中的局部极值点,这些极值点被认为是图像的不变特征点。
3. 方向确定在每个不变特征点周围的区域内,确定一个代表性角度作为该点的方向。
4. 关键帧描述在确定了特征点的方向之后,通过建立局部图像的梯度方向直方图,对每个不变特征点进行描述,转化为一个向量。
二、SIFT算法在图像拼接中的应用在图像拼接中,SIFT算法主要用于检测出两张图像中的重叠区域,并对这些区域进行融合。
通常,我们可以通过以下过程来利用SIFT算法进行图像拼接。
1. 特征点检测首先,我们需要分别对每张要拼接的图像进行SIFT算法检测,获得每张图像中的不变特征点。
2. 特征点匹配接下来,我们需要对不变特征点进行匹配,以便找到两张图像中的重叠区域。
这里可以采用诸如RANSAC等算法,去除错误匹配点。
3. 配准和融合最后,经过特征点匹配后,我们可以对两张图像进行配准和融合。
配准通常使用图像变形等方法进行。
融合通常采用平均法、最大值法或者自适应加权融合等不同的方法。
三、SIFT算法图像拼接实例以下是使用SIFT算法进行图像拼接的示例。
我们使用三张图片进行图像拼接。
SIFT算法原理SIFT算法详细介绍
SIFT算法原理SIFT算法详细介绍SIFT(Scale-Invariant Feature Transform)算法是一种用于图像特征提取和匹配的算法,被广泛应用于计算机视觉领域。
SIFT算法的核心思想是在不同尺度空间中检测和描述图像的局部特征,通过这些特征可实现图像的匹配、识别和定位。
1.尺度空间极值点检测:首先,SIFT算法通过高斯平滑滤波器构建高斯金字塔,每一层都是由上一层进行降采样得到的。
在不同尺度空间的图像上,通过比较每个像素点与其相邻像素点的灰度值,找出尺度空间极值点,作为关键点候选。
2.关键点定位:通过对尺度空间的极值点进行精确定位,以获取更加准确的关键点。
在关键点候选集合中,利用尺度空间的极值点与梯度方向直方图等局部特征进行过滤,剔除低对比度和边缘响应的关键点。
3.方向分配:为了使SIFT算法具有旋转不变性,需要为每个关键点分配主方向。
采用梯度直方图对关键点周围的图像区域进行统计,找到梯度方向直方图的峰值,作为该关键点的主方向。
4.关键点描述:在每个关键点周围的图像区域内,构建128维的特征向量,用于描述该关键点的局部特征。
通过计算每个像素点周围的梯度幅值和方向,并将其转换为特征向量的模式,构成关键点的描述符。
5.特征匹配:对于待匹配的图像,通过计算两个图像的特征向量之间的欧氏距离,进行特征匹配。
采用距离比值方法,选取最匹配和次匹配之间的距离比值小于预先设定的阈值的特征点,进行最终匹配。
6.特征筛选:通过应用RANSAC(随机抽样一致性)算法,对匹配结果进行筛选,剔除外点,保留内点,从而得到更准确的匹配结果。
SIFT算法的应用非常广泛,常用于目标识别、图像拼接、图像检索、三维重建和运动估计等领域。
在目标识别中,通过提取图像的SIFT特征,并与模板图像进行匹配,可以实现目标的识别和定位。
在图像拼接中,通过寻找多幅图像之间的共同特征点,并根据特征点的位置关系进行配准,可以实现图像的自动拼接。
SIFT算法原理SIFT算法详细介绍
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.特征点匹配:使用描述子来匹配不同图像中的特征点。
通过计算两个特征点描述子之间的距离来判断它们的相似性。
通常使用欧氏距离或余弦相似度来度量特征点之间的差异。
然后,根据距离进行特征点匹配,通过选取最佳匹配对的阈值来过滤不准确的匹配。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SIFT 算法实现步骤 :1 关键点检测、2 关键点描述、3 关键点匹配、4 消除错配点1关键点检测1.1 建立尺度空间根据文献《Scale-space theory: A basic tool for analysing structures at different scales 》我们可知,高斯核是唯一可以产生多尺度空间的核,一个图像的尺度空间,L (x,y,σ) ,定义为原始图像I(x,y)与一个可变尺度的2维高斯函数G(x,y,σ) 卷积运算。
高斯函数高斯金字塔高斯金子塔的构建过程可分为两步:(1)对图像做高斯平滑;(2)对图像做降采样。
为了让尺度体现其连续性,在简单 下采样的基础上加上了高斯滤波。
一幅图像可以产生几组(octave ) 图像,一组图像包括几层 (interval )图像。
高斯图像金字塔共o 组、s 层, 则有:σ——尺度空间坐标;s ——sub-level 层坐标;σ0——初始尺度;S ——每组层数(一般为3~5)。
当图像通过相机拍摄时,相机的镜头已经对图像进行了一次初始的模糊,所以根据高斯模糊的性质:-第0层尺度--被相机镜头模糊后的尺度高斯金字塔的组数: M 、N 分别为图像的行数和列数高斯金字塔的组内尺度与组间尺度:组内尺度是指同一组(octave )内的尺度关系,组内相邻层尺度化简为:组间尺度是指不同组直接的尺度关系,相邻组的尺度可化为:最后可将组内和组间尺度归为:()22221()(),,exp 22i i i i x x y y G x y σπσσ⎛⎫-+-=- ⎪⎝⎭()()(),,,,*,L x y G x y I x y σσ=Octave 1Octave 2Octave 3Octave 4Octave 5σ2σ4σ8σ0()2s S s σσ=g 0σ=init σpre σ()()2log min ,3O M N ⎡⎤=-⎣⎦112Ss s σσ+=g 1()2s SS o o s σσ++=g 222s S sSS o o σσ+=g g 1212(,,,)i n k k k σσσσ--L 12S k =i —金字塔组数 n —每组层数上一组图像的底层是由前一组图像的倒数第二层图像隔点采样生成的。
这样可以保持 尺度的连续性。
差分高斯金字塔Lindeberg 在文献《Scale-space theory: A basic tool for analysing structures at different scales 》指出尺度规范化的LoG 算子具有真正的尺度不变性。
LoG 算子即(Laplacion of Gaussian ),可以由高斯函数梯度算子GOG 构建 尺度规范化的GoG 算子:尺度规范化的LoG 算子: LOG 算子与高斯核函数的关系通过推导可以看出,LOG 算子与高斯核函数的差有直接关系,由此引入一种新的算子DOG (Difference of Gaussians ),即高斯差分算子。
DoG (Difference of Gaussian )函数:DoG 在计算上只需相邻尺度高斯平滑后图像相减,因此简化了计算。
对应DOG 算子,我们要构建DOG 金字塔22222G G G x y ∂∂∇=+∂∂22G σ∇222(,,)(,,)(,,)(1)Gauss x y k Gauss x y LOG x y G k σσσσσ-=∇≈-()()()22,,,,1G x y k G x y k G σσσ-≈-∇()()(),,,,*,L x y G x y I x y σσ=()()()()()(),,,,,,*,,,,,D x y G x y k G x y I x y L x y k L x y σσσσσ=-⎡⎤⎣⎦=-我们可以通过高斯差分图像看出图像上的像素值变化情况。
(如果没有变化,也就没有特征。
特征必须是变化尽可能多的点。
)DOG 图像描绘的是目标的轮廓。
在Lowe 的论文中,将第0层的初始尺度定为1.6,图片的初始尺度定为0.5,则图像金字塔第0层的实际尺度为1.2 DoG 的局部极值点检测关键点是由DOG 空间的局部极值点组成的。
为了寻找DoG 函数的极值点,每一个像素点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。
中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。
在极值比较的过程中,每一组图像的首末两层是无法进行极值比较的,为了满足尺度变化的连续性,我们在每一组图像的顶层继续用高斯模糊生成了3幅图像,高斯金字塔有每组S+3层图像。
DOG 金字塔每组有S+2层图像。
1.3 关键点精确定位由于DoG 值对噪声和边缘较敏感,因此,在上面DoG 尺度空间中检测到局部极值点还要经过进一步的检验才能精确定位为特征点。
去除低对比度的极值点为了提高关键点的稳定性,需要对尺度空间DoG 函数进行曲线拟合。
利用DoG 函数在1.6 1.60.50.5 1.52⨯-⨯=尺度空间的Taylor 展开式:其极值点: 在计算过程中,分别对图像的行、列及尺度三个量进行了修正,其修正结果如下:求解得 为修正值。
将修正后的结果代入式上式去除那些对比度较低的不稳定极值点。
Lowe 的试验显示,所有取值小于0.04的极值点均可抛弃(像素灰度值范围[0,1])。
去除边缘响应仅仅去除低对比度的极值点对于极值点的对于特征点稳定性是远远不够的。
DoG 函数在图像边缘有较强的边缘响应,因此我们还需要排除边缘响应DoG 函数的(欠佳的)峰值点在横跨边缘的方向有较大的主曲率,而在垂直边缘的方向有较小的主曲率。
主曲率可以通过计算在该点位置尺度的2×2的Hessian 矩阵得到,导数由采样点相邻差来估计:表示DOG 金字塔中某一尺度的图像x 方向求导两次。
D 的主曲率和H 的特征值成正比,为了避免直接的计算这些特征值,而只是考虑它们的之间的比率。
令 为最大特征值,为最小的特征值,则在两特征值相等时达最小,随r 的增长而增长。
Lowe 论文中建议r 取10。
时将关键点保留,反之剔除。
()2212TT D DD X D X X X X X ∂∂=++∂∂()ˆ,,TX x y σ=()2212TT D DD X D X X X X X ∂∂=++∂∂212()T D D X X X ∧-∂∂=-∂∂X ∧()2212TT D DD X D X X X X X ∂∂=++∂∂12T D D X D X X ∧∂⎛⎫=+ ⎪∂⎝⎭xx xy xy yy D D H D D ⎡⎤=⎢⎥⎣⎦xx D αβr αβ=()xx yy Tr H D D =+()xx yy xy xyDet H D D D D =⨯-⨯()()()()2221Tr H r Det H r αβαβ++==()21r r +()()()221Tr H r Det H r +<2 关键点描述2.1 关键点方向分配通过尺度不变性求极值点,可以使其具有缩放不变的性质,利用关键点邻域像素的梯度方向分布特性,我们可以为每个关键点指定方向参数方向,从而使描述子对图像旋转具有不变性。
通过求每个极值点的梯度来为极值点赋予方向。
像素点的梯度表示梯度幅值:梯度方向:方向直方图的生成确定关键点的方向采用梯度直方图统计法,统计以关键点为原点,一定区域内的图像像素点对关键点方向生成所作的贡献。
直方图以每10度方向为一个柱,共36个柱,柱所代表的方向为像素点梯度方向,柱的长短代表了梯度幅值。
根据Lowe 的建议,直方图统计半径采用3*1.5*σ在直方图统计时,每相邻三个像素点采用高斯加权,根据Lowe 的建议,模板采用[0.25,0.5,0.25],并连续加权两次。
关键点的主方向与辅方向关键点主方向:极值点周围区域梯度直方图的主峰值,也是特征点方向关键点辅方向:在梯度方向直方图中,当存在另一个相当于主峰值80%能量的峰值时,则将这个方向认为是该关键点的辅方向。
这可以增强匹配的鲁棒性,Lowe 的论文指出大概有15%关键点具有多方向,但这些点对匹配的稳定性至为关键。
方向分配实现步骤1. 确定计算关键点直方图的高斯函数权重函数参数 ;2. 生成含有36柱的方向直方图,梯度直方图范围0~360度,其中每10度一个柱。
由半径为图像区域生成;3. 对方向直方图进行两次平滑;4. 求取关键点方向(可能是多个方向);(),,I I gradI x y x y ⎛⎫∂∂= ⎪∂∂⎝⎭()()()()()()()22,1,1,,1,1m x y L x y L x y L x y L x y =+--++--()()()()()1,1,1,tan 1,1,L x y L x y x y L x y L x y θ-⎡⎤+--=⎢⎥+--⎣⎦5.对方向直方图的Taylor展开式进行二次曲线拟合,精确关键点方向;图像的关键点已检测完毕,每个关键点有三个信息:位置、尺度、方向;同时也就使关键点具备平移、缩放、和旋转不变性。
2.2 生成特征描述符描述的目的是在关键点计算后,用一组向量将这个关键点描述出来,这个描述子不但包括关键点,也包括关键点周围对其有贡献的像素点。
用来作为目标匹配的依据,也可使关键点具有更多的不变特性,如光照变化、3D视点变化等。
通过对关键点周围图像区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象,具有唯一性。
下图是一个SIFT描述子事例。
其中描述子由2×2×8维向量表征,也即是2×2个8方向的方向直方图组成。
左图的种子点由8×8单元组成。
每一个小格都代表了特征点邻域所在的尺度空间的一个像素,箭头方向代表了像素梯度方向,箭头长度代表该像素的幅值。
然后在4×4的窗口内计算8个方向的梯度方向直方图。
绘制每个梯度方向的累加可形成一个种子点,如右图所示:一个特征点由4个种子点的信息所组成。
关键点周围区域图像梯度关键点描述子Lowe 实验结果表明:描述子采用4×4×8=128维向量表征,综合效果最优(不变性与独特性)。
128维关键点描述子(就是特征描述符)生成步骤1. 确定计算描述子所需的图像区域描述子梯度方向直方图由关键点所在尺度的模糊图像计算产生。
图像区域的半径通过下式计算:是关键点所在组(octave )的组内尺度,2. 将坐标移至关键点主方向那么旋转角度后新坐标为:3.在图像半径区域内对每个像素点求其梯度幅值和方向,然后对每个梯 度幅值乘以高斯权重参数,生成方向直方图。