SIFT算法实现原理步骤 (1)
SIFT算法实现及代码详解

SIFT算法实现及代码详解SIFT(Scale-Invariant Feature Transform)是一种计算机视觉算法,用于在图像中寻找局部特征。
由于SIFT算法具有尺度不变性和旋转不变性等优点,因此广泛应用于目标检测、图像拼接、图像匹配等领域。
1.尺度空间构建:通过对原始图像进行多次高斯模糊,得到图像的尺度空间。
2.高斯差分金字塔构建:对尺度空间进行差分操作,得到高斯差分金字塔。
3.极值点检测:在高斯差分金字塔中检测局部极值点,用于确定关键点的位置。
4.关键点精确定位:通过对关键点进行插值,得到更精确的关键点位置。
5.方向分配:为每个关键点分配主方向,用于后续的旋转不变性。
6.关键点描述:对每个关键点周围的区域计算特征向量,用于描述关键点的特征。
7.特征匹配:通过比较特征向量的相似度,实现图像间的特征匹配。
下面是SIFT算法的Python实现(使用OpenCV库):```pythonimport cv2def SIFT(image):#尺度空间构建gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)sift = cv2.xfeatures2d.SIFT_create# keypoints为检测到的关键点列表,descriptors为关键点的特征描述向量return keypoints, descriptors#读取图像image1 = cv2.imread('image1.png')image2 = cv2.imread('image2.png')#提取图像特征keypoints1, descriptors1 = SIFT(image1)keypoints2, descriptors2 = SIFT(image2)#特征匹配bf = cv2.BFMatcher(cv2.NORM_L2)matches = bf.match(descriptors1, descriptors2)matches = sorted(matches, key = lambda x:x.distance)#绘制匹配结果result = cv2.drawMatches(image1, keypoints1, image2, keypoints2, matches, None, flags=2)cv2.imshow('Result', result)cv2.waitKey(0)cv2.destroyAllWindows```上述代码中,首先定义了一个`SIFT`函数用于提取图像的特征。
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拼接算法流程sift拼接算法流程概述本文将介绍SIFT(尺度不变特征转换)拼接算法流程,这是一种常用于图像拼接的算法。
SIFT算法是一种基于局部特征描述的图像处理算法,具有很好的尺度不变性和旋转不变性。
算法流程概览1.图像预处理–调整图像的大小以适应拼接要求–将图像转换为灰度图像,去除颜色信息2.特征点检测–使用SIFT算法检测图像的关键点–对每个关键点计算其尺度和方向3.特征描述–对每个关键点周围的区域计算特征描述子–描述子是一种用于描述关键点特征的向量4.特征匹配–针对两幅图像的特征描述子进行匹配–使用基于距离的匹配算法,如最近邻法5.配准–根据匹配结果进行图像配准–通过计算变换矩阵,将待拼接图像转换到参考图像坐标系下6.拼接–根据配准结果,将待拼接图像与参考图像进行融合–采用图像叠加或图像融合的方式7.优化–对拼接后的图像进行优化–去除拼接缝隙或伪影等不完美的部分8.输出–将拼接后的图像保存为文件或进行其他处理–可以生成全景图像或其他形式的图像算法流程详解图像预处理在图像预处理阶段,首先需要对待拼接的图像进行预处理。
这包括调整图像的大小以适应拼接要求,一般要求图像具有相同的尺寸。
其次,将图像转换为灰度图像,去除颜色信息。
这是为了降低计算的复杂度,并使得SIFT算法更加稳定。
特征点检测特征点检测是SIFT算法的核心部分。
在这一步骤中,使用SIFT 算法检测图像的关键点。
SIFT算法会在图像的不同位置和尺度上检测出一些关键点,这些关键点具有显著的图像特征,如角点、边缘等。
同时,对于每个关键点,还会计算其尺度和方向信息。
特征描述特征描述是针对每个关键点周围的区域计算其特征描述子。
描述子是一种向量表示,用于描述关键点的局部特征。
在计算描述子时,会考虑关键点的尺度和方向信息,以及其周围区域的图像信息。
特征描述子是SIFT算法的另一个关键输出,它能够很好地保持特征的不变性。
特征匹配在特征匹配阶段,使用一种基于距离的匹配算法来对两幅图像的特征描述子进行匹配。
sift算法原理

sift算法原理SIFT算法原理。
SIFT(Scale-invariant feature transform)算法是一种用于图像处理和计算机视觉领域的特征提取算法。
它能够在不同尺度和旋转角度下提取出稳定的特征点,并且对光照、噪声等干扰具有较强的鲁棒性。
SIFT算法由David Lowe于1999年提出,至今仍被广泛应用于图像拼接、目标识别、三维重建等领域。
本文将介绍SIFT算法的原理及其关键步骤。
1. 尺度空间极值检测。
SIFT算法首先通过高斯滤波构建图像的尺度空间金字塔,然后在不同尺度空间上寻找局部极值点作为关键点。
这些关键点在不同尺度下具有不变性,能够在不同大小的目标上被检测到。
2. 关键点定位。
在尺度空间极值点的基础上,SIFT算法通过对尺度空间进行插值,精确定位关键点的位置和尺度。
同时,为了提高关键点的稳定性,还会对梯度方向进行进一步的精确计算。
3. 方向分配。
为了使关键点对旋转具有不变性,SIFT算法会计算关键点周围像素点的梯度方向直方图,并选择主方向作为关键点的方向。
这样可以使得关键点对于图像的旋转具有不变性。
4. 特征描述。
在确定了关键点的位置、尺度和方向后,SIFT算法会以关键点为中心,提取周围区域的梯度信息,并将其转换为具有较强区分度的特征向量。
这些特征向量可以很好地描述关键点周围的图像信息,从而实现对图像的匹配和识别。
5. 特征匹配。
最后,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》。
尺度不变特征变换算法

尺度不变特征变换算法一、前言尺度不变特征变换算法(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)是一种用于计算图像中关键点的特征点描述符的算法。
它最早由David Lowe在1999年提出,被广泛应用于计算机视觉和图像处理领域。
SIFT算法的主要目标是能够提取图像中具有尺度、旋转和光照不变性的关键点。
它通过以下步骤来计算SIFT特征:1. 尺度空间极值检测(Scale-space Extrema Detection):-首先,使用高斯滤波器对原始图像进行多次平滑处理,得到不同尺度空间的图像金字塔。
-然后,在每个尺度空间中,通过比较像素值与其周围像素值来检测图像的极值点。
-这些极值点被认为是图像中可能的关键点。
2. 关键点定位(Key Point Localization):-对于每个检测到的极值点,通过计算尺度空间的高斯差分图像来确定其精确位置。
-使用泰勒级数展开来拟合极值点周围像素的曲线,找到更精确的关键点位置。
-根据曲线的响应值和临近像素点的梯度幅值,筛选掉低对比度和边缘响应的关键点。
3. 方向分配(Orientation Assignment):-对于每个关键点,计算其周围像素点的梯度幅值和方向。
-将周围像素点的梯度方向分布转换为直方图,并找到主导方向。
-在主导方向和周围方向上进行插值,获得关键点的特征方向。
4. 关键点描述(Descriptor Representation):-在关键点周围的邻域内,根据关键点的尺度和方向构建一个相对于尺度和旋转不变的描述子。
-将关键点周围的图像区域划分为若干个子区域,并计算每个子区域内像素的梯度方向和幅值。
-将梯度方向转换为16个方向的直方图,得到长度为128的特征向量。
-对特征向量进行归一化,去除光照变化的影响。
5. 特征匹配(Feature Matching):-使用特征点的描述子来计算两幅图像中的特征点之间的距离。
-对于每个特征点,选择与其特征向量距离最近的特征点作为匹配点。
SIFT特征提取算法

SIFT特征提取算法SIFT(Scale-Invariant Feature Transform)特征提取算法是一种用于图像的局部特征分析的算法。
它能够提取出图像中的关键点,并对这些关键点进行描述,从而可以用于图像匹配、物体识别等应用领域。
本文将详细介绍SIFT算法的原理和过程。
1.尺度空间构建SIFT算法首先通过使用高斯滤波器来构建图像的尺度空间,以便在不同尺度下检测关键点。
高斯滤波器可以通过一系列的高斯卷积操作实现,每次卷积之后对图像进行下采样(降低分辨率),得到不同尺度的图像。
2.关键点检测在尺度空间构建完成后,SIFT算法使用差分运算来检测关键点。
差分运算可以通过对图像进行高斯平滑操作来实现,然后计算相邻尺度之间的差分图像。
对差分图像进行极值检测,即寻找局部最大和最小值的像素点,这些像素点就是图像中的关键点。
3.关键点精确定位关键点的精确定位是通过拟合关键点周围的局部图像来实现的。
SIFT算法使用了一种高度鲁棒的方法,即利用关键点周围梯度的方向和大小来进行拟合。
具体来说,SIFT算法在关键点周围计算图像的梯度幅值和方向,并构建梯度直方图。
然后通过在梯度直方图中寻找局部极值来确定关键点的方向。
4.关键点描述关键点的描述是为了提取关键点周围的特征向量,用于后续的匹配和识别。
SIFT算法使用了一种局部特征描述算法,即将关键点周围的图像区域划分为小的子区域,并计算每个子区域的梯度方向直方图。
然后将这些直方图组合起来,构成一个维度较高的特征向量。
5.特征向量匹配在完成关键点描述之后,SIFT算法使用一种近似的最近邻方法来进行特征向量的匹配。
具体来说,使用KD树或者暴力匹配的方法来寻找两幅图像中最相似的特征向量。
通过计算特征向量之间的距离,可以找到最相似的匹配对。
6.尺度不变性SIFT算法具有尺度不变性的特点,即对于图像的缩放、旋转和视角变化等变换具有较好的鲁棒性。
这是因为在特征提取的过程中,SIFT算法对图像进行了多尺度的分析,并利用了关键点周围的梯度信息进行描述。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SIFT 算法实现步骤 :1 关键点检测、2 关键点描述、3 关键点匹配、4 消除错配点 参考链接:/article/details/7521424-July-v/archive/2011/03/13/1983663.html1关键点检测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 )内的尺度关系,组内相邻层尺度化简为:组间尺度是指不同组直接的尺度关系,相邻组的尺度可化为:最后可将组内和组间尺度归为:i —金字塔组数 n —每组层数上一组图像的底层是由前一 组图像的倒数第二层图像隔0init init pre pre σσσσσ=⨯-⨯init σpre ()()2log min ,3O M N ⎡⎤=-⎣⎦1()2s S S o o s σσ++=点采样生成的。
这样可以保持尺度的连续性。
二维卷积:差分高斯金字塔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金字塔我们可以通过高斯差分图像看出图像上的像素值变化情况。
(如果没有变化,也就没有特征。
特征必须是变化尽可能多的点。
)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尺度空间中检测到局部极值点还要22222G GGx y∂∂∇=+∂∂22Gσ∇经过进一步的检验才能精确定位为特征点。
去除低对比度的极值点为了提高关键点的稳定性,需要对尺度空间DoG 函数进行曲线拟合。
利用DoG 函数在尺度空间的Taylor 展开式:其极值点: 在计算过程中,分别对图像的行、列及尺度三个量进行了修正,其修正结果如下:求解得 为修正值。
将修正后的结果代入式 上式去除那些对比度较低的不稳定极值点。
Lowe 的试验显示,所有取值小于0.04的极值点均可抛弃(像素灰度值范围[0,1])。
去除边缘响应仅仅去除低对比度的极值点对于极值点的对于特征点稳定性是远远不够的。
DoG 函数在图像边缘有较强的边缘响应,因此我们还需要排除边缘响应DoG 函数的(欠佳的)峰值点在横跨边缘的方向有较大的主曲率,而在垂直边缘的方向有较小的主曲率。
主曲率可以通过计算在该点位置尺度的2×2的Hessian 矩阵得到,导数由采样点相邻差来估计: 表示DOG 金字塔中某一尺度的图像x 方向求导两次。
D 的主曲率和H 的特征值成正比,为了避免直接的计算这些特征值,而只是考虑它们的之间的比率。
令 为最大特征值,为最小的特征值,则在两特征值相等时达最小,随r 的增长而增长。
Lowe 论文中建议r 取10。
时将关键点保留,反之剔除。
2 关键点描述2.1 关键点方向分配通过尺度不变性求极值点,可以使其具有缩放不变的性质,利用关键点邻域像素的梯度方向分布特性,我们可以为每个关键点指定方向参数方向,从而使描述子对图像旋转具有不变性。
通过求每个极值点的梯度来为极值点赋予方向。
像素点的梯度表示梯度幅值:梯度方向:方向直方图的生成确定关键点的方向采用梯度直方图统计法,统计以关键点为原点,一定区域内的图像像素点对关键点方向生成所作的贡献。
直方图以每10度方向为一个柱,共36个柱,柱所代表的方向为像素点梯度方向,柱的长短代表了梯度幅值。
根据Lowe 的建议,直方图统计半径采用3*1.5*σ在直方图统计时,每相邻三个像素点采用高斯加权,根据Lowe 的建议,模板采用[0.25,0.5,0.25],并连续加权两次。
关键点的主方向与辅方向关键点主方向:极值点周围区域梯度直方图的主峰值,也是特征点方向关键点辅方向:在梯度方向直方图中,当存在另一个相当于主峰值80%能量的峰值时,()ˆ,,T Xx y σ=212()T D D X X X∧-∂∂=-∂∂xx xy xy yy D D H D D ⎡⎤=⎢⎥⎣⎦xx D αβ()21r r +则将这个方向认为是该关键点的辅方向。
这可以增强匹配的鲁棒性,Lowe 的论文指出大概有15%关键点具有多方向,但这些点对匹配的稳定性至为关键。
方向分配实现步骤1. 确定计算关键点直方图的高斯函数权重函数参数;2. 生成含有36柱的方向直方图,梯度直方图范围0~360度,其中每10度一个柱。
由半径为图像区域生成;3. 对方向直方图进行两次平滑;4. 求取关键点方向(可能是多个方向);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.在图像半径区域内对每个像素点求其梯度幅值和方向,然后对每个梯度幅值乘以高斯权重参数,生成方向直方图。
该点与关键点的列距离该点与关键点的行距离等于描述子窗口宽度×直方图列数(取4)的一半 4.在窗口宽度为2X2的区域内计算8个方向的梯度方向直方图,绘制每个梯度方向的累加值,即可形成一个种子点。
然后再在下一个2X2的区域内进行直方图统计,形成下一个种子点,共生成16个种子点。
5.描述子向量元素门限化及门限化后的描述子向量规范化。
描述子向量元素门限化:方向直方图每个方向上梯度幅值限制在一定门限值以下(门限一()32112oct d radius σ++=oct σ4d =k x k y wσ3σ般取0.2)。
描述子向量元素规范化:为得到的128描述子向量 为规范化后的向量 关键点描述子向量的规范化正是可去除满足此模型的光照影响。
对于图像灰度值整体漂移 ,图像各点的梯度是邻域像素相减得到,所以也能去除。
3 关键点匹配分别对模板图(参考图,reference image )和实时图(观测图,observation image )建立关键点描述子集合。
目标的识别是通过两点集内关键点描述子的比对来完成。
具有128维的关键点描述子的相似性度量采用欧式距离。
模板图中关键点描述子:实时图中关键点描述子: 任意两描述子相似性度量:要得到配对的关键点描述子, 需满足: 关键点的匹配可以采用穷举法来完成,但是这样耗费的时间太多,一般都采用一种叫kd 树的数据结构来完成搜索。
搜索的内容是以目标图像的关键点为基准,搜索与目标图像的特征点最邻近的原图像特征点和次邻近的原图像特征点。
Kd 树是一个平衡二叉树关键点匹配并不能标志着算法的结束,因为在匹配的过程中存在着大量的错配点。
图中交叉的绿线为错配点 4 消除错配点RANSAC (Random Sample Consensus ,随机抽样一致 )是一种鲁棒性的参数估计方法。
RANSAC 实质上就是一个反复测试、不断迭代的过程。
RANSAC 的基本思想:首先根据具体问题设计出某个目标函数,然后通过反复提取最小点集估计该函数中参数的初始值,利用这些初始值把所有的数据分为“内点”( inlier )和“外点“(outlier ),最后用所有的内点重新计算和估计函数的参数。