SIFT尺度不变特征变换算法_第1页
SIFT尺度不变特征变换算法_第2页
SIFT尺度不变特征变换算法_第3页
SIFT尺度不变特征变换算法_第4页
SIFT尺度不变特征变换算法_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SIFT尺度不变特征变换算法DavidLowe关于SIFT算法,2004年发表在Int.JournalofComputerVision的经典论文中,对尺度空间(scalespace)是这样定义的:IthasbeenshownbyKoenderink(1984)andLindeberg(1994)thatunderavarietyofreasonableassumptionstheonlypossiblescale-spacekernelistheGaussianfunction.Therefore,thescalespaceofanimageisdefinedasafunction,L(x;y;delta)thatisproducedfromtheconvolutionofavariable-scaleGaussian,G(x;y;delta),withaninputimage,I(x;y):

因此,一个图像的尺度空间,L(x,y,delta),定义为原始图像I(x,y)与一个可变尺度的2维高斯函数G(x,y,delta)卷积运算。关于图象处理中的空间域卷积运算,可以参考经典的图像处理教材(比如美国冈萨雷斯的图象处理,第二版,或者其Matlab版,都有如何在离散空间进行运算的例子和说明)注:原文中delta为希腊字母,这里无法表示,用delta代替。Sift算法中,提到了尺度空间,请问什么是尺度和尺度空间呢?在上述理解的基础上,尺度就是受delta这个参数控制的表示。而不同的L(x,y,delta)就构成了尺度空间(Space,我理解,由于描述图像的时候,一般用连续函数比较好描述公式,所以,采用空间集合,空间的概念正规一些),实际上,具体计算的时候,即使连续的高斯函数,都要被离散为(一般为奇数大小)(2*k+1)*(2*k+1)矩阵,来和数字图像进行卷积运算。1、SIFT算法提出及其改进SIFT算法由D.G.Lowe1999年提出,2004年完善总结。代表性文献[1]DavidG.Lowe,

"Objectrecognitionfromlocalscale-invariantfeatures,"

InternationalConferenceonComputerVision,

Corfu,Greece(September1999),pp.1150-1157.[2]DavidG.Lowe,

"Distinctiveimagefeaturesfromscale-invariantkeypoints,"

InternationalJournalofComputerVision,

60,2(2004),pp.91-110.具体的MATLAB代码在http://www.cs.ubc.ca/~lowe/keypoints/

可以下载。RobHess基于GSL和Opencv编写了C语言程序。具体的代码可以在/~hess/index.html

中下载,可以在VC++.net环境中运行,在调试时要注意对GSL和Opencv的正确配置。后来Y.Ke将其描述子部分用PCA代替直方图的方式,对其进行改进。[3]Y.KeandR.Sukthankar.

PCA-SIFT:AMoreDistinctiveRepresentationforLocalImageDescriptors.ComputerVisionandPatternRecognition,2004Yanke’shomepage:/user/yke/2、SIFT算法主要思想SIFT算法是一种提取局部特征的算法,在尺度空间寻找极值点,提取位置,尺度,旋转不变量。3、SIFT算法的主要特点:a)SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性。b)独特性(Distinctiveness)好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配[23]。c)多量性,即使少数的几个物体也可以产生大量SIFT特征向量。d)高速性,经优化的SIFT匹配算法甚至可以达到实时的要求。e)可扩展性,可以很方便的与其他形式的特征向量进行联合。4、SIFT算法步骤:Sift特征匹配算法主要包括两个阶段,一个是Sift特征的生成,即从多幅图像中提取对尺度缩放、旋转、亮度变化无关的特征向量;第二阶段是Sift特征向量的匹配。

Sift特征的生成一般包括以下几个步骤:

1、构建尺度空间,检测极值点,获得尺度不变性;

2、特征点过滤并进行精确定位;

3、为特征点分配方向值;

4、生成特征描述子。

以特征点为中心取16*16的邻域作为采样窗口,将采样点与特征点的相对方向通过高斯加权后归入包含8个bin的方向直方图,最后获得4*4*8的128维特征描述子。示意图如下:

当两幅图像的Sift特征向量生成以后,下一步就可以采用关键点特征向量的欧式距离来作为两幅图像中关键点的相似性判定度量。取图1的某个关键点,通过遍历找到图像2中的距离最近的两个关键点。在这两个关键点中,如果次近距离除以最近距离小于某个阙值,则判定为一对匹配点。

一些Sift特征匹配的例子:

5、特征提取函数的使用作为一种匹配能力较强的局部描述算子,SIFT算法的实现相当复杂,但从软件开发的角度来说,只要会使用其中几个比较重要的函数就行了。这里要感谢DavidLowe这个大牛,不但提供了一种强悍的特征匹配算法,还给出了C++的实现代码,后来有人用C#实现了这个算法,需要的朋友可到网上自行下载。

关键函数一:

intsift_features(IplImage*img,structfeature**feat)

这个函数就是用来提取图像中的特征向量。参数img为一个指向IplImage数据类型的指针,用来表示需要进行特征提取的图像。IplImage是opencv库定义的图像基本类型(关于opencv是一个著名的图像处理类库,详细的介绍可以参见)。参数feat是一个数组指针,用来存储图像的特征向量。函数调用成功将返回特征向量的数目,否则返回-1.

关键函数二:

int_sift_features(IplImage*img,structfeature**feat,intintvls,doublesigma,doublecontr_thr,intcurv_thr,intimg_dbl,intdescr_width,intdescr_hist_bins)

这个函数是函数一的重载,作用是一样的,实际上函数一只不过是使用默认参数调用了函数二,核心的代码都是在函数二中实现的。下面将详细介绍一下其他的几个参数。

intvls:每个尺度空间的采样间隔数,默认值为3.

sigma:高斯平滑的数量,默认值1.6.

contr_thr:判定特征点是否稳定,取值(0,1),默认为0.04,这个值越大,被剔除的特征点就越多。

curv_thr:判定特征点是否边缘点,默认为6.

img_dbl:在建立尺度空间前如果图像被放大了1倍则取值为1,否则为0.

descr_width:计算特征描述符时邻域子块的宽度,默认为4.

descr_hist_bins:计算特征描述符时将特征点邻域进行投影的方向数,默认为8,分别是0,45,90,135,180,215,270,315共8个方向。

如果只是做特征提取,上面这个函数就足够了,不同图像之间的匹配都是建立在这个基础上的,如果你有足够强的编程能力即使不懂这个算法也能够编写出像样的程序来,因为下面的比较说白了都是数据结构的比较,跟算法已经没有太多关系了。如果想要深入了解算法,还是认真的看论文和代码吧。Sift算法与VC代码:/source/1481248

2*、SIFT中的尺度空间和传统图像金字塔想要得知图像中哪些是有意义的,必须先要明确这样一个问题:在一幅图像中,只有在一定的尺度范围内,一个物体才有意义。举一个例子,树枝这个概念,只有在几厘米到几米的距离去观察它,才能感知到它的确是树枝;如果在微米级或者千米级去观察,就不能感知到树枝这个概念了,这样的话可以感知到的是细胞或者是森林的概念。因而,如果想要描述现实世界的结构,或者将三维物体映射到二维的图像上去,多尺度表示将会至关重要。多尺度表示的概念很容易理解,举例说明,绘制地图时会有比例尺的概念。世界地图中就只能够显示大洲大洋,以及较大的地域和国家;而一个城市地图,甚至可以详细的显示出每条街道。这里需要强调一点,事物是实实在在的存在的,但是通过图像这个媒介,观察者可以感知到的概念是不同的。一种比较老的尺度表示方法是图像金字塔。金字塔是结合降采样操作和平滑操作的一种图像表示方式。它的一个很大的好处是,自下而上每一层的像素数都不断减少,这会大大减少计算量;而缺点是自下而上金字塔的量化变得越来越粗糙,而且速度很快。(需要强调的是,这里的金字塔构造方法和小波金字塔的构造方法是类似的,对某一层的图像进行平滑之后,再做降采样,平滑目的是为了降采样后的像素点能更好的代表原图像的像素点,与多尺度表示中的平滑完全不是一个目的)SIFT中提到的“尺度空间”(Scale-Space)表示法是多尺度表示的另外一种有效方法,它的尺度参数是连续的,并且所有尺度上空间采样点个数是相同的(实际上,一个尺度上得到的就是一幅图像,尺度空间采样点也就是该尺度上图像的像素点。也就是说,尺度空间表示法在各个尺度上图像的分辨率都是一样的)。尺度空间表示的主要思想是:由原始信号(例如一幅图像)生成一系列信号,并用这些信号来表示原始信号,这个过程中,精细尺度的信息被逐步的平滑掉(可以认为是细节信息被丢弃)。尺度可变高斯函数:所以,这里的尺度空间和传统图像金字塔的表示是不同的,尺度空间可以理解为用高斯对图像做了卷积,图像的分辨率还是那么大,像素还是那么多,只是细节被平均(平滑)掉了,原因就是高斯了,用周围的信号比较弱的像素和中间那个信号比较强的点做平均,平均值当然比最强信号值小了,这就起到了平滑的作用。传统图像金字塔关键在于降采样,每四个像素,求平均作为一个像素,显然分辨率降低了。下面就是Octave(?)和sigma()这两个参数的影响,行与行之间的差距,可以理解为金字塔或者降采样;行内部其实是因为高斯sigma参数作用的结果,高斯卷积其实是起到了一个平滑的作用:

下面这个就是DOG,高斯差分,其实这和边缘检测的原理是差不多的,通过差分,将边缘留下来了。这就是图像中的关键点的原始的结合,什么是关键点,最起码能够代表图像中有变化比较明显的特征点,但是,对于那些平滑的特征,如果丢失了,是不是可惜呢?关于SIFT的理解,Cauthy的博文有几篇,了解的要比我深好多呢。另外最近还有一种金字塔的表示,用来做金字塔匹配ThePyramidMatch等,其原理其实是采样窗口的大小,采样窗口由小到大,包含的局部特征也会越来越丰富。关于这个,推荐两篇论文1、ThePyramidMatch:EfficientMatchingforRetrievalandRecognition2、BeyondBagsofFeatures:SpatialPyramidMatchingforRecognizingNaturalSceneCategories3、(详细)尺度不变特征变换匹配算法详解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.

目标的旋转、缩放、平移(RST)2.

图像仿射/投影变换(视点viewpoint)3.

光照影响(illumination)4.

目标遮挡(occlusion)5.

杂物场景(clutter)6.

噪声SIFT算法的实质是在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向。SIFT所查找到的关键点是一些十分突出,不会因光照,仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。Lowe将SIFT算法分解为如下四步:1.尺度空间极值检测:搜索所有尺度上的图像位置。通过高斯微分函数来识别潜在的对于尺度和旋转不变的兴趣点。2.关键点定位:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定程度。3.方向确定:基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。4.关键点描述:在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和光照变化。本文沿着Lowe的步骤,参考Rob

Hess及Andrea

Vedaldi源码,详解SIFT算法的实现过程。2、高斯模糊SIFT算法是在不同的尺度空间上查找关键点,而尺度空间的获取需要使用高斯模糊来实现,Lindeberg等人已证明高斯卷积核是实现尺度变换的唯一变换核,并且是唯一的线性核。本节先介绍高斯模糊算法。2.1二维高斯函数高斯模糊是一种图像滤波器,它使用正态分布(高斯函数)计算模糊模板,并使用该模板与原图像做卷积运算,达到模糊图像的目的。N维空间正态分布方程为:(1-1)其中,是正态分布的标准差,值越大,图像越模糊(平滑)。r为模糊半径,模糊半径是指模板元素到模板中心的距离。如二维模板大小为m*n,则模板上的元素(x,y)对应的高斯计算公式为:(1-2)在二维空间中,这个公式生成的曲面的等高线是从中心开始呈正态分布的同心圆,如图2.1所示。分布不为零的像素组成的卷积矩阵与原始图像做变换。每个像素的值都是周围相邻像素值的加权平均。原始像素的值有最大的高斯分布值,所以有最大的权重,相邻像素随着距离原始像素越来越远,其权重也越来越小。这样进行模糊处理比其它的均衡模糊滤波器更高地保留了边缘效果。理论上来讲,图像中每点的分布都不为零,这也就是说每个像素的计算都需要包含整幅图像。在实际应用中,在计算高斯函数的离散近似时,在大概3σ距离之外的像素都可以看作不起作用,这些像素的计算也就可以忽略。通常,图像处理程序只需要计算的矩阵就可以保证相关像素影响。2.2

图像的二维高斯模糊根据σ的值,计算出高斯模板矩阵的大小(),使用公式(1-2)计算高斯模板矩阵的值,与原图像做卷积,即可获得原图像的平滑(高斯模糊)图像。为了确保模板矩阵中的元素在[0,1]之间,需将模板矩阵归一化。5*5的高斯模板如表2.1所示。下图是5*5的高斯模板卷积计算示意图。高斯模板是中心对称的。2.3分离高斯模糊如图2.3所示,使用二维的高斯模板达到了模糊图像的目的,但是会因模板矩阵的关系而造成边缘图像缺失(2.3

b,c),越大,缺失像素越多,丢弃模板会造成黑边(2.3

d)。更重要的是当变大时,高斯模板(高斯核)和卷积运算量将大幅度提高。根据高斯函数的可分离性,可对二维高斯模糊函数进行改进。高斯函数的可分离性是指使用二维矩阵变换得到的效果也可以通过在水平方向进行一维高斯矩阵变换加上竖直方向的一维高斯矩阵变换得到。从计算的角度来看,这是一项有用的特性,因为这样只需要次计算,而二维不可分的矩阵则需要次计算,其中,m,n为高斯矩阵的维数,M,N为二维图像的维数。另外,两次一维的高斯卷积将消除二维高斯矩阵所产生的边缘。(关于消除边缘的论述如下图2.4所示,对用模板矩阵超出边界的部分——虚线框,将不做卷积计算。如图2.4中x方向的第一个模板1*5,将退化成1*3的模板,只在图像之内的部分做卷积。)附录1是用opencv2.2实现的二维高斯模糊和分离高斯模糊。表2.2为上述两种方法和opencv2.3开源库实现的高斯模糊程序的比较。

3、尺度空间极值检测尺度空间使用高斯金字塔表示。Tony

Lindeberg指出尺度规范化的LoG(Laplacion

of

Gaussian)算子具有真正的尺度不变性,Lowe使用高斯差分金字塔近似LoG算子,在尺度空间检测稳定的关键点。3.1

尺度空间理论尺度空间(scale

space)思想最早是由Iijima于1962年提出的,后经witkin和Koenderink等人的推广逐渐得到关注,在计算机视觉邻域使用广泛。尺度空间理论的基本思想是:在图像信息处理模型中引入一个被视为尺度的参数,通过连续变化尺度参数获得多尺度下的尺度空间表示序列,对这些序列进行尺度空间主轮廓的提取,并以该主轮廓作为一种特征向量,实现边缘、角点检测和不同分辨率上的特征提取等。尺度空间方法将传统的单尺度图像信息处理技术纳入尺度不断变化的动态分析框架中,更容易获取图像的本质特征。尺度空间中各尺度图像的模糊程度逐渐变大,能够模拟人在距离目标由近到远时目标在视网膜上的形成过程。尺度空间满足视觉不变性。该不变性的视觉解释如下:当我们用眼睛观察物体时,一方面当物体所处背景的光照条件变化时,视网膜感知图像的亮度水平和对比度是不同的,因此要求尺度空间算子对图像的分析不受图像的灰度水平和对比度变化的影响,即满足灰度不变性和对比度不变性。另一方面,相对于某一固定坐标系,当观察者和物体之间的相对位置变化时,视网膜所感知的图像的位置、大小、角度和形状是不同的,因此要求尺度空间算子对图像的分析和图像的位置、大小、角度以及仿射变换无关,即满足平移不变性、尺度不变性、欧几里德不变性以及仿射不变性。3.2

尺度空间的表示一个图像的尺度空间,定义为一个变化尺度的高斯函数与原图像的卷积。

(3-1)其中,*表示卷积运算,

(3-2)与公式(1-2)相同,m,n表示高斯模板的维度(由确定)。(x,y)代表图像的像素位置。是尺度空间因子,值越小表示图像被平滑的越少,相应的尺度也就越小。大尺度对应于图像的概貌特征,小尺度对应于图像的细节特征。3.3

高斯金字塔的构建尺度空间在实现时使用高斯金字塔表示,高斯金字塔的构建分为两部分:1.对图像做不同尺度的高斯模糊;2.对图像做降采样(隔点采样)。图像的金字塔模型是指,将原始图像不断降阶采样,得到一系列大小不一的图像,由大到小,从下到上构成的塔状模型。原图像为金子塔的第一层,每次降采样所得到的新图像为金字塔的一层(每层一张图像),每个金字塔共n层。金字塔的层数根据图像的原始大小和塔顶图像的大小共同决定,其计算公式如下:(3-3)其中M,N为原图像的大小,t为塔顶图像的最小维数的对数值。如,对于大小为512*512的图像,金字塔上各层图像的大小如表3.1所示,当塔顶图像为4*4时,n=7,当塔顶图像为2*2时,n=8。为了让尺度体现其连续性,高斯金字塔在简单降采样的基础上加上了高斯滤波。如图3.1所示,将图像金字塔每层的一张图像使用不同参数做高斯模糊,使得金字塔的每层含有多张高斯模糊图像,将金字塔每层多张图像合称为一组(Octave),金字塔每层只有一组图像,组数和金字塔层数相等,使用公式(3-3)计算,每组含有多张(也叫层Interval)图像。另外,降采样时,高斯金字塔上一组图像的初始图像(底层图像)是由前一组图像的倒数第三张图像隔点采样得到的。注:由于组内的多张图像按层次叠放,因此组内的多张图像也称做多层,为避免与金字塔层的概念混淆,本文以下内容中,若不特别说明是金字塔层数,层一般指组内各层图像。注:如3.4节所示,为了在每组中检测S个尺度的极值点,则DOG金字塔每组需S+2层图像,而DOG金字塔由高斯金字塔相邻两层相减得到,则高斯金字塔每组需S+3层图像,实际计算时S在3到5之间。取S=3时,假定高斯金字塔存储索引如下:第0组(即第-1组):

0

1

2

3

4

5第1组:

6

7

8

9

1011第2组:

?则第2组第一张图片根据第一组中索引为9的图片降采样得到,其它类似。

3.4

高斯差分金字塔2002年Mikolajczyk在详细的实验比较中发现尺度归一化的高斯拉普拉斯函数的极大值和极小值同其它的特征提取函数,例如:梯度,Hessian或Harris角特征比较,能够产生最稳定的图像特征。而Lindeberg早在1994年就发现高斯差分函数(Difference

of

Gaussian

,简称DOG算子)与尺度归一化的高斯拉普拉斯函数非常近似。其中和的关系可以从如下公式推导得到:利用差分近似代替微分,则有:

因此有其中k-1是个常数,并不影响极值点位置的求取。如图3.2所示,红色曲线表示的是高斯差分算子,而蓝色曲线表示的是高斯拉普拉斯算子。Lowe使用更高效的高斯差分算子代替拉普拉斯算子进行极值检测,如下:(3-4)在实际计算时,使用高斯金字塔每组中相邻上下两层图像相减,得到高斯差分图像,如图3.3所示,进行极值检测。3.5

空间极值点检测(关键点的初步探查)关键点是由DOG空间的局部极值点组成的,关键点的初步探查是通过同一组内各DoG相邻两层图像之间比较完成的。为了寻找DoG函数的极值点,每一个像素点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。如图3.4所示,中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。

由于要在相邻尺度进行比较,如图3.3右侧每组含4层的高斯差分金子塔,只能在中间两层中进行两个尺度的极值点检测,其它尺度则只能在不同组中进行。为了在每组中检测S个尺度的极值点,则DOG金字塔每组需S+2层图像,而DOG金字塔由高斯金字塔相邻两层相减得到,则高斯金字塔每组需S+3层图像,实际计算时S在3到5之间。当然这样产生的极值点并不全都是稳定的特征点,因为某些极值点响应较弱,而且DOG算子会产生较强的边缘响应。3.6

构建尺度空间需确定的参数

—尺度空间坐标

O—组(octave)数

S—

组内层数在上述尺度空间中,O和S,的关系如下:

(3-5)其中是基准层尺度,o为组octave的索引,s为组内层的索引。关键点的尺度坐标就是按关键点所在的组和组内的层,利用公式(3-5)计算而来。在最开始建立高斯金字塔时,要预先模糊输入图像来作为第0个组的第0层的图像,这时相当于丢弃了最高的空域的采样率。因此通常的做法是先将图像的尺度扩大一倍来生成第-1组。我们假定初始的输入图像为了抗击混淆现象,已经对其进行的高斯模糊,如果输入图像的尺寸用双线性插值扩大一倍,那么相当于。取式(3-4)中的k为组内总层数的倒数,即

(3-6)在构建高斯金字塔时,组内每层的尺度坐标按如下公式计算:(3-7)其中初始尺度,lowe取,s为组内的层索引,不同组相同层的组内尺度坐标相同。组内下一层图像是由前一层图像按进行高斯模糊所得。式(3-7)用于一次生成组内不同尺度的高斯图像,而在计算组内某一层图像的尺度时,直接使用如下公式进行计算:(3-8)该组内尺度在方向分配和特征描述时确定采样窗口的大小。由上,式(3-4)可记为(3-9)图3.5为构建DOG金字塔的示意图,原图采用128*128的jobs图像,扩大一倍后构建金字塔。4、关键点定位以上方法检测到的极值点是离散空间的极值点,以下通过拟合三维二次函数来精确确定关键点的位置和尺度,同时去除低对比度的关键点和不稳定的边缘响应点(因为DoG算子会产生较强的边缘响应),以增强匹配稳定性、提高抗噪声能力。4.1关键点的精确定位离散空间的极值点并不是真正的极值点,图4.1显示了二维函数离散空间得到的极值点与连续空间极值点的差别。利用已知的离散空间点插值得到的连续空间极值点的方法叫做子像素插值(Sub-pixel

Interpolation)。为了提高关键点的稳定性,需要对尺度空间DoG函数进行曲线拟合。利用DoG函数在尺度空间的Taylor展开式(拟合函数)为:(4-1)其中,。求导并让方程等于零,可以得到极值点的偏移量为:(4-2)对应极值点,方程的值为:(4-3)其中,代表相对插值中心的偏移量,当它在任一维度上的偏移量大于0.5时(即x或y或),意味着插值中心已经偏移到它的邻近点上,所以必须改变当前关键点的位置。同时在新的位置上反复插值直到收敛;也有可能超出所设定的迭代次数或者超出图像边界的范围,此时这样的点应该删除,在Lowe中进行了5次迭代。另外,过小的点易受噪声的干扰而变得不稳定,所以将小于某个经验值(Lowe论文中使用0.03,Rob

Hess等人实现时使用0.04/S)的极值点删除。同时,在此过程中获取特征点的精确位置(原位置加上拟合的偏移量)以及尺度()。4.2消除边缘响应一个定义不好的高斯差分算子的极值在横跨边缘的地方有较大的主曲率,而在垂直边缘的方向有较小的主曲率。DOG算子会产生较强的边缘响应,需要剔除不稳定的边缘响应点。获取特征点处的Hessian矩阵,主曲率通过一个2x2

的Hessian矩阵H求出:

(4-4)H的特征值α和β代表x和y方向的梯度,

(4-5)表示矩阵H对角线元素之和,表示矩阵H的行列式。假设是α较大的特征值,而是β较小的特征值,令,则(4-6)

导数由采样点相邻差估计得到,在下一节中说明。D的主曲率和H的特征值成正比,令为α最大特征值,β为最小的特征值,则公式的值在两个特征值相等时最小,随着的增大而增大。值越大,说明两个特征值的比值越大,即在某一个方向的梯度值越大,而在另一个方向的梯度值越小,而边缘恰恰就是这种情况。所以为了剔除边缘响应点,需要让该比值小于一定的阈值,因此,为了检测主曲率是否在某域值r下,只需检测(4-7)式(4-7)成立时将关键点保留,反之剔除。在Lowe的文章中,取r=10。图4.2右侧为消除边缘响应后的关键点分布图。

4.3有限差分法求导有限差分法以变量离散取值后对应的函数值来近似微分方程中独立变量的连续取值。在有限差分方法中,我们放弃了微分方程中独立变量可以取连续值的特征,而关注独立变量离散取值后对应的函数值。但是从原则上说,这种方法仍然可以达到任意满意的计算精度。因为方程的连续数值解可以通过减小独立变量离散取值的间格,或者通过离散点上的函数值插值计算来近似得到。这种方法是随着计算机的诞生和应用而发展起来的。其计算格式和程序的设计都比较直观和简单,因而,它在计算数学中使用广泛。有限差分法的具体操作分为两个部分:1.

用差分代替微分方程中的微分,将连续变化的变量离散化,从而得到差分方程组的数学形式;2.

求解差分方程组。一个函数在x点上的一阶和二阶微商,可以近似地用它所临近的两点上的函数值的差分来表示。如对一个单变量函数f(x),x为定义在区间[a,b]上的连续变量,以步长将区间[a,b]离散化,我们会得到一系列节点,然后求出f(x)在这些点上的近似值。显然步长h越小,近似解的精度就越好。与节点相邻的节点有和,所以在节点处可构造如下形式的差值:

节点的一阶向前差分节点的一阶向后差分节点的一阶中心差分本文使用中心差分法利用泰勒展开式求解第四节所使用的导数,现做如下推导。函数f(x)在处的泰勒展开式为:(4-8)则,(4-9)(4-10)忽略h平方之后的项,联立式(4-9),(4-10)解方程组得:(4-11)

(4-12)二元函数的泰勒展开式如下:将展开后忽略次要项联立解方程得二维混合偏导如下:(4-13)综上,推导了4.1,4.2遇到的所有导数计算。同理,利用多元泰勒展开式,可得任意偏导的近似差分表示。在图像处理中,取h=1,在图4.2所示的图像中,将像素0的基本中点导数公式整理如下:4.4

三阶矩阵求逆公式高阶矩阵的求逆算法主要有归一法和消元法两种,现将三阶矩阵求逆公式总结如下:若矩阵可逆,即时,(4-14)5、关键点方向分配为了使描述符具有旋转不变性,需要利用图像的局部特征为给每一个关键点分配一个基准方向。使用图像梯度的方法求取局部结构的稳定方向。对于在DOG金字塔中检测出的关键点点,采集其所在高斯金字塔图像3σ邻域窗口内像素的梯度和方向分布特征。梯度的模值和方向如下:(5-1)L为关键点所在的尺度空间值,按Lowe的建议,梯度的模值m(x,y)按的高斯分布加成,按尺度采样的3σ原则,邻域窗口半径为。在完成关键点的梯度计算后,使用直方图统计邻域内像素的梯度和方向。梯度直方图将0~360度的方向范围分为36个柱(bins),其中每柱10度。如图5.1所示,直方图的峰值方向代表了关键点的主方向,(为简化,图中只画了八个方向的直方图)。方向直方图的峰值则代表了该特征点处邻域梯度的方向,以直方图中最大值作为该关键点的主方向。为了增强匹配的鲁棒性,只保留峰值大于主方向峰值80%的方向作为该关键点的辅方向。因此,对于同一梯度值的多个峰值的关键点位置,在相同位置和尺度将会有多个关键点被创建但方向不同。仅有15%的关键点被赋予多个方向,但可以明显的提高关键点匹配的稳定性。实际编程实现中,就是把该关键点复制成多份关键点,并将方向值分别赋给这些复制后的关键点,并且,离散的梯度方向直方图要进行插值拟合处理,来求得更精确的方向角度值,检测结果如图5.2所示。至此,将检测出的含有位置、尺度和方向的关键点即是该图像的SIFT特征点。6、关键点特征描述通过以上步骤,对于每一个关键点,拥有三个信息:位置、尺度以及方向。接下来就是为每个关键点建立一个描述符,用一组向量将这个关键点描述出来,使其不随各种变化而改变,比如光照变化、视角变化等等。这个描述子不但包括关键点,也包含关键点周围对其有贡献的像素点,并且描述符应该有较高的独特性,以便于提高特征点正确匹配的概率。

SIFT描述子是关键点邻域高斯图像梯度统计结果的一种表示。通过对关键点周围图像区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象,具有唯一性。Lowe建议描述子使用在关键点尺度空间内4*4的窗口中计算的8个方向的梯度信息,共4*4*8=128维向量表征。表示步骤如下:1.

确定计算描述子所需的图像区域特征描述子与特征点所在的尺度有关,因此,对梯度的求取应在特征点对应的高斯图像上进行。将关键点附近的邻域划分为d*d(Lowe建议d=4)个子区域,每个子区域做为一个种子点,每个种子点有8个方向。每个子区域的大小与关键点方向分配时相同,即每个区域有个子像素,为每个子区域分配边长为的矩形区域进行采样(个子像素实际用边长为的矩形区域即可包含,但由式(3-8),不大,为了简化计算取其边长为,并且采样点宜多不宜少)。考虑到实际计算时,需要采用双线性插值,所需图像窗口边长为。在考虑到旋转因素(方便下一步将坐标轴旋转到关键点的方向),如下图6.1所示,实际计算所需的图像区域半径为:

(6-1)计算结果四舍五入取整。2.

将坐标轴旋转为关键点的方向,以确保旋转不变性,如6.2所示。

旋转后邻域内采样点的新坐标为:

(6-2)3.

将邻域内的采样点分配到对应的子区域内,将子区域内的梯度值分配到8个方向上,计算其权值。旋转后的采样点坐标在半径为radius的圆内被分配到的子区域,计算影响子区域的采样点的梯度和方向,分配到8个方向上。旋转后的采样点落在子区域的下标为

(6-3)Lowe建议子区域的像素的梯度大小按的高斯加权计算,即(6-4)其中a,b为关键点在高斯金字塔图像中的位置坐标。4.

插值计算每个种子点八个方向的梯度。如图6.3所示,将由式(6-3)所得采样点在子区域中的下标(图中蓝色窗口内红色点)线性插值,计算其对每个种子点的贡献。如图中的红色点,落在第0行和第1行之间,对这两行都有贡献。对第0行第3列种子点的贡献因子为dr,对第1行第3列的贡献因子为1-dr,同理,对邻近两列的贡献因子为dc和1-dc,对邻近两个方向的贡献因子为do和1-do。则最终累加在每个方向上的梯度大小为:(6-5)其中k,m,n为0或为1。5.

如上统计的4*4*8=128个梯度信息即为该关键点的特征向量。特征向量形成后,为了去除光照变化的影响,需要对它们进行归一化处理,对于图像灰度值整体漂移,图像各点的梯度是邻域像素相减得到,所以也能去除。得到的描述子向量为,归一化后的特征向量为则

(6-7)6.

描述子向量门限。非线性光照,相机饱和度变化对造成某些方向的梯度值过大,而对方向的影响微弱。因此设置门限值(向量归一化后,一般取0.2)截断较大的梯度值。然后,再进行一次归一化处理,提高特征的鉴别性。7.

按特征点的尺度对特征描述向量进行排序。至此,SIFT特征描述向量生成。

描述向量这块不好理解,我画了个草图,供参考:7、SIFT的缺点SIFT在图像的不变特征提取方面拥有无与伦比的优势,但并不完美,仍然存在:1.

实时性不高。2.

有时特征点较少。3.

对边缘光滑的目标无法准确提取特征点。等缺点,如下图7.1所示,对模糊的图像和边缘平滑的图像,检测出的特征点过少,对圆更是无能为力。近来不断有人改进,其中最著名的有SURF和CSIFT。8、总结本人研究SIFT算法一月有余,鉴于相关知识的缺失,尺度空间技术和差分近似求导曾困我良久。Lowe在论文中对细节提之甚少,甚至只字未提,给实现带来了很大困难。经过多方查阅,实现,总结成此文。自认为是到目前为止,关于SIFT算法最为详尽的资料,现分享给你,望批评指正。一同分享给你的还有同时实现的高斯模糊源码,sift算法源码,见附录1,2。源码使用vs2010+opencv2.2实现。zdd2012年4月28日

于北师大2012年5月17日15:33:23第一次修正修正内容:第3.3部分内容,图3.1,图3.5。修正后代码:/detail/zddmail/4309418

参考资料1、David

G.Lowe

Distinctive

Image

Features

from

Scale-Invariant

Keypoints.

January

5,

2004.2、David

G.Lowe

Object

Recognition

from

Local

Scale-Invariant

Features.

19993、Matthew

Brown

and

David

Lowe

Invariant

Features

from

Interest

Point

Groups.

In

British

Machine

Vision

Conference,

Cardiff,

Wales,

pp.

656-665.4、PETER

J.

BURT,

MEMBER,

IEEE,

AND

EDWARD

H.

ADELSON,

The

Laplacian

Pyramid

as

a

Compact

Image

Code.

IEEE

TRANSACTIONS

ON

COMMUNICATIONS,

VOL.

COM-3l,

NO.

4,

APRIL

19835、宋丹

10905056

尺度不变特征变换匹配算法Scale

Invariant

Feature

Transform

(SIFT)(PPT)6、RaySaint

的博客SIFT算法研究/2531780/6583507、Jason

Clemons

SIFT:

SCALE

INVARIANT

FEATURE

TRANSFORM

BY

DAVID

LOWE(ppt)8、Tony

Lindeberg

Scale-space

theory:

A

basic

tool

for

analysing

structures

at

different

scales.19949、SIFT官网的Rob

Hess

<hess@>

SIFT源码10、Opencv2.2

Andrea

Vedaldi(UCLA

VisionLab)实现的SIFT源码

/~vedaldi/code/siftpp.html,

opencv2.3改用Rob

Hess的源码11、科学计算中的偏微分方程有限差分法

杨乐主编12、维基百科SIFT词条:/zh-cn/Scale-invariant_feature_transform13、百度百科SIFT词条:/view/2832304.htm14、其它互联网资料附录1高斯模糊源码/zddmail/article/details/7450033/detail/zddmail/4217704附录2SIFT算法源码/detail/zddmail/4309418更多\o"累计分享23次"23上一篇:高斯模糊实现小结下一篇:c++解决枚举类型不能重名的宏相关主题推荐算法

sift

计算机视觉

图像处理

信息处理相关博文推荐\o"线段树"线段树\o"LeetCodeRecoverBinarySearchTree"LeetCodeRecoverBin...\o"LIRE(LuceneImageRetrieval)"LIRE(LuceneImageRe...\o"以图搜图相关资料"以图搜图相关资料\o"算法导论之符号标记"算法导论之符号标记\o"POJ-1273最大流dinic算法"POJ-1273最大流dinic算法\o"poj-1144割点"poj-1144割点\o"最大字段和——动态规划"最大字段和——动态规划查看评论51楼

ienze

6天前12:47发表

\o"回复"[回复]最后归一化没有看懂,程序里头没有写吧?49楼

java小亮星仔

2014-03-0613:41发表

\o"回复"[回复]感谢博主,我终于看得差不多了!但是有个问题想请教一下:在不同组取得不同尺度空间的特征点后,哪些是需要的特征点哪些不需要呢?也就是说,最后所得到的图像特征点和金子塔的这么多组(并且每组还有不同尺度空间)的特征点是一个什么关系?具体是如何比较的呢?不知道描述清楚了没

恳请指导^_^48楼

linyeokka

2014-03-0611:11发表

\o"回复"[回复]引用“nwpuwyk”的评论:博主你好,为什么要在倒数第三张图像上做降采样Re:

java小亮星仔

2014-03-0613:46发表

\o"回复"[回复][reply]linyeokka[reply]这应该是非必须吧?47楼

java小亮星仔

2014-03-0515:50发表

\o"回复"[回复]从关键点定位开始看不懂==,肿么办?毕设是图像匹配==46楼

2014-01-1713:26发表

\o"回复"[回复]博主你好,为什么要在倒数第三张图像上做降采样Re:

zh920307

2014-03-1016:10发表

\o"回复"[回复]回复nwpuwyk:建议把3.5节仔细看一看45楼

u010026816

2014-01-1414:49发表

\o"回复"[回复]正需要,感谢43楼

shenruixue

2013-12-2010:30发表

\o"回复"[回复]您好,我有个疑问,SIFT只能检测出一些孤立的特征点,那么怎么才能检测出目标物体呢,也就是把物体的轮廓线画出来呢??请楼主指教Re:

zddhub

2013-12-2013:57发表

\o"回复"[回复]回复shenruixue:物体轮廓线有很多提取算法,如果你了解SIFT的话,DOG就是一种方法。对物体的识别我了解的有识别人的HOG算法。40楼

HiGoodBoy

2013-11-2219:42发表

\o"回复"[回复]博主在2.3分离高斯模糊这一段中讲到两次一维的高斯卷积将消除二维高斯矩阵所产生的边缘,对此我有些疑问。对照着您那一段下面的一幅图,以左上角的点为例,模板大小为5,该点进行高斯模糊的时候,最左边还差两个像素,这样如何进行卷积。如果您说对边缘进行复制的话,那么这个最终运算起来不是跟二维模板运算一样的存在边缘填充的问题吗?当然,两次一维能够减少时间复杂度。当在后续建立高斯金字塔的过程中,越往上走,对应sigma增大,图片尺寸减小,直到图片尺寸与高斯模板大小相当甚至小于高斯模板大小,可能会出现大量边缘复制补充甚至无法计算的情形,请问博主对此有何解决方案。谢谢。38楼

HiGoodBoy

2013-11-1020:05发表

\o"回复"[回复]不知道博主那个关于求取极值点的三个公式中,最后一步是如何推倒出来的(4-3),如果直接将D(x^)代入上面式子的话,我反正没推导出来过,另外有一点就是直接将X^代入4-1公式的话,肯定是不对的,因为按照泰勒公式展开的话,实际上公式一为D(x)=D(x0)+D(x0)'(X-x0)+D(x0)''(X-x0)^2/2;公式左右两边虽然都是写的X,但是含义不一样,不能够直接代入。还希望博主指导一下,如果回复评论比较麻烦的话,博主可以邮箱联系:chuandaobozi@126.com37楼

edward_is_me

2013-11-0822:03发表

\o"回复"[回复]你好,想问一下vl_feat里有个dsift。但是提取出来的descriptors数量要比直接用sift提取出的多几百倍。500*500大小的一张图像用dsift会出现210000+多个descriptors,而直接用sift也就400+个,why?(都是128维的)

而知有何区别?

谢谢36楼

HiGoodBoy

2013-11-0821:53发表

\o"回复"[回复]博主的公式4-2,就是那个泰勒公式的地方,推导出来的X应该第一项的-1应该是整体的上标,但博主写在D上面去了,很容易误解,这个地方害我看了半天,觉得不对经。Re:

zddhub

2013-11-0821:58发表

\o"回复"[回复]回复chuandaobozi:指导得是35楼

见死不救No1

2013-09-0922:55发表

\o"回复"[回复]博主,你好,看了一下你的代码,在极值检测的部分你是这样的思路吗:检测某个点是否极值,如果该点像素大于零,看它是不是极大值,如果是则标记为极值;如果小于零,看它是不是极小值,如果是则标记为极值,是这样的思路吗?

如果是的话,为什么不按照论文中所说的直接和领域的26个点比较呢,如果是最大值或者最小值则认为是极值,否则就不是极值点,为什么不是这么做呢?期待博主的回复!谢谢34楼

xsjwangyb

2013-08-2711:19发表

\o"回复"[回复]为什么你的第一次的sift算法源程序可以运行,第二次SIFT程序的改进版出现问题运行不了,出现:Debugerror!……R6010,-abort()hasbenncalled!求大神指导!Re:

wangjun201302

2013-10-2614:35发表

\o"回复"[回复]回复xsjwangyb:你应该是把图片位置放错了吧Re:

flyflyjinliang

2014-03-0316:17发表

\o"回复"[回复]回复u012230687:同样的问题,求解,,,33楼

fireguard

2013-07-2417:24发表

\o"回复"[回复]多谢楼主分享,看得出楼主对SIFT算法已经融会贯通了。有几个问题不明,请指教:

1.极值点检测是在每一组内部进行的,通过对每一组中获得DoG图像的点进行极值点进行检测。那么,把图像分成这么多组有很么意义呢,直接在源图像进行不同的高斯模糊来获取高斯差分图像岂不是更简单呢,被降阶的其他组起到什么作用呢?

2.极值点定位问题。X在不同尺度空间应该有不同的值,D是如何把不同的尺度结合在一起的呢?

谢谢。Re:

见死不救No1

2013-09-0710:46发表

\o"回复"[回复]回复fireguard:第一个问题:而且金字塔好像也是这么定义的吧,要不断采样形成更高层Re:

见死不救No1

2013-09-0710:31发表

\o"回复"[回复]回复fireguard:第一个问题,我觉得是保证尺度不变性吧;

第二个问题,D中有3*3矩阵的一阶导数和二阶导数,在s方向的导数应该就是将尺度引入吧;

刚看sift不久,不知道理解的对不对,大家加楼下的群啊,多多讨论32楼

ahgjs

2013-07-1810:15发表

\o"回复"[回复]我建立一个SIFT算法交流群,大家一起讨论交流有关SIFT算法以及相关问题。。群号,241654184,欢迎大家加入!31楼

ahgjs

2013-07-1810:13发表

\o"回复"[回复]我建立一个SIFT算法交流群,大家一起讨论交流有关SIFT算法以及相关问题。。群号,241654184,欢迎大家加入!30楼

ILOVETHSS

2013-07-1022:30发表

\o"回复"[回复]你好我也是刚刚涉足SIFT这个方法所以有很多不太懂的以后可以请教你么方便的话留个邮箱吧Re:

ahgjs

2013-07-1810:14发表

\o"回复"[回复]回复ILOVETHSS:我建立一个SIFT算法交流群,大家一起讨论交流有关SIFT算法以及相关问题。。群号,241654184,欢迎大家加入!Re:

ILOVETHSS

2013-08-3021:20发表

\o"回复"[回复]回复ahgjs:好的非常感谢29楼

tiny_player

2013-06-2216:18发表

\o"回复"[回复]还有一点,(4-2)代入(4-1)之后是(4-3)吗?我怎么算出来是中间那个符号该是减号?!Re:

见死不救No1

2013-09-0710:27发表

\o"回复"[回复]回复yeyexiaolehehe:推一下应该是加号的28楼

tiny_player

2013-06-2022:31发表

\o"回复"[回复]4.2消除边缘响应,这部分是不是就是不想让边缘点作为关键点?但为什么边缘点不能作为关键点呢?我觉得它也可以保持尺度、方向不变啊,Re:

ahgjs

2013-07-1810:14发表

\o"回复"[回复]回复yeyexiaolehehe:我建立一个SIFT算法交流群,大家一起讨论交流有关SIFT算法以及相关问题。。群号,241654184,欢迎大家加入!27楼

tiny_player

2013-06-2020:59发表

\o"回复"[回复]博主写的非常详细,非常感谢分享,有问题想再请教一下,第3.6节“组内下一层图像是由前一层图像按进行高斯模糊所得。式(3-7)用于一次生成组内不同尺度的高斯图像。”我试着推导了一下,怎么推导不出来呢?比如最简单的,第一塔的第一层模糊为I1=G(x,y,thita)*I(x,y),求下一层图像I2=G(x,y,k*thita)*I(x,y)时,按照(3-7)式仅仅需要G(x,y,sqrt((k*thita)^2*(thita)^2))*I1就可以了吗?我怎么推不出来这个式子等于I2呢?Re:

见死不救No1

2013-09-0710:37发表

\o"回复"[回复]回复yeyexiaolehehe:这个式子与这里的推导没关系吧,应该是这样的原理:一幅图像先用参数k1高斯模糊,再对上一步模糊的图像用k2高斯模糊,这两个过程相当于一次性对源图像用sqrt(k1^2+k2^2)高斯模糊26楼

lululu7777

2013-06-0816:33发表

\o"回复"[回复]楼主我有个问题想请教您一下:在特征点检测那部分为什么要建立DoG金字塔并在每层金字塔上求得特征点呢?只建立相邻的三张DoG图像来求取特征点不可以的吗?(PS:马上要答辩了~急啊~~)25楼

WUTINGZHUZHU

2013-05-3121:30发表

\o"回复"[回复]楼主你好我有不是很理解为什么要如图6.2首先将坐标轴旋转为关键点的方向,以确保旋转不变性,能否帮我解释下?谢谢Re:

zddhub

2013-06-0610:14发表

\o"回复"[回复]回复WUTINGZHUZHU:每个区域,都转换到关键点的主方向,能保证旋转不变性。比如“干”字,假设它关键点的主方向为沿竖线向下,旋转180度,变成“士”字,“士”字的关键点主方向沿竖线向上。SIFT的局部不变性,保证“干”“士”特征相似。只有方向一致,采集的特征点才有可比性。24楼

杜撰000

2013-05-2416:41发表

\o"回复"[回复]楼主讲解的很细致!!!23楼

wzlang

2013-05-0810:52发表

\o"回复"[回复]博主,这篇文章非常的棒、。其中部分公式很复杂,像关键点定位和去边缘响应的公式,看不懂。请问,这些内容像我这样的初学者需要搞清楚吗?Re:

喜欢去旁听

2013-05-2400:10发表

\o"回复"[回复]回复wzlang:要的。。。很简单。。。Re:

viomag

2013-05-2416:10发表

\o"回复"[回复]回复wangezhu:按特征点的尺度对特征描述向量进行排序

‘’‘这句怎么理解22楼

dkfjsdfjlasj

2013-04-2914:24发表

\o"回复"[回复]毕设终于能往前推进了Re:

见死不救No1

2013-09-0710:38发表

\o"回复"[回复]回复dkfjsdfjlasj:哈哈21楼

beyond_boy

2013-04-2123:32发表

\o"回复"[回复]还有一个小问题“H的特征值α和β代表x和y方向的梯度”

这句没搞懂为啥楼主能否给点提示多谢Re:

maxime2046

2013-07-1110:49发表

\o"回复"[回复]回复beyond_boy:矩阵的特征值,表明了值变化的速率,也就是梯度的模值。特征向量就是变化的方向,即梯度的方向。这是矩阵特征值与特征向量的几何意义。20楼

beyond_boy

2013-04-2123:28发表

\o"回复"[回复]在“4.2消除边缘响应”小节

发现一个小错误r是和主曲率的比率比而不是和主曲率比

主曲率有两个分别和两个对应特征值成正比例因此可以通过特征值的比率来算主曲率的比率19楼

xiaoxiangyutf

2013-04-1317:19发表

\o"回复"[回复]您好!在一组空间中检测到极值后,怎么利用泰勒展开精确定位?不是很懂。。。18楼

miracle91

2013-04-0822:54发表

\o"回复"[回复]楼主你好,不知道你是否注意到,当针对大图像时,你写的代码会崩溃?楼主是否有针对大图像的方法Re:

zddhub

2013-04-0911:03发表

\o"回复"[回复]回复wsljh555:应对大数据,请关注opengcv的存储能力,可理解算法后,用其它结构解决。Re:

miracle123

2013-04-1312:31发表

\o"回复"[回复]回复zddmail:是不是用opencv不能实现大影像数据处理,我觉得应该是建立高斯金字塔时,在内存中存储的影像过多,导致内存不足,不知道楼主有没有好的办法?由于时间比较紧,对算法的了解可能不会太透彻,还望楼主之前做过相关研究的话,能指导一下!17楼

pwpal

2013-04-0816:57发表

\o"回复"[回复]引用“zddmail”的评论:回复pwpal:图像边界无法做插值,边界插值有多种求法。直接拷贝原像素是其...

谢谢你的回复,看到你回复我明白了。但是在源代码,但是你拷贝的并不是原像素,而是原图像倒数后两列(行)的插值像素。

另外,表3以及计算公式可能有问题。表中,应该是256,而且你少了32*32的情况。公式的话,需要在右边加1。所以,这里的例子也有问题。

还是很感谢你的工作,初次接触图像处理以及SIFT算法,看论文实在一头雾水,你的这个文章给我很大的帮助。Re:

zddhub

2013-04-0911:07发表

\o"回复"[回复]回复pwpal:放大后图像边界的像素没有办法用插值求,使用最后两行、两列填充的原因是基于这样一个假设——边界的相邻像素之间不会突变Re:

viomag

2013-05-1216:31发表

\o"回复"[回复]zddmail[/reply]

双线性插值后图像像素是原图像素的几倍16楼

pwpal

2013-04-0809:24发表

\o"回复"[回复]你好,我阅读了你的源代码,但是我觉得其中可能存在错误。voidUpSample(constMat&src,Mat&dst)函数中,你对最后两行两列的处理是将他们都复制为倒数第三行或第三列的相应值。也即倒数第二个插值。但实际上,放大后的倒数第二行(列)的值,应该为原图像最后一行(列)的值。

就是说,放大后的图像的最后两行(列)的值,最好应该等于原图像最后一行(列)的值。而不是倒数第二个插值。

我是这样理解的。请赐教。Re:

zddhub

2013-04-0813:00发表

\o"回复"[回复]回复pwpal:图像边界无法做插值,边界插值有多种求法。直接拷贝原像素是其中一种。15楼

sasafriend

2013-04-0610:19发表

\o"回复"[回复]您好!我最近在用robhess的源码做图像的拼接,但是利用rob的ransac_xformed部分求出的透视变换矩阵对图像做变换得到的只是重叠区域的变换,接下来要怎么进行拼接呢?14楼

rp_apei

2013-03-2917:29发表

\o"回复"[回复]师兄太彪悍!膜拜!13楼

u010057025

2013-03-2717:16发表

\o"回复"[回复]楼主你好,我想问:SIFT实际上是不是就是一种小波变换呢?Re:

u010057025

2013-04-1118:11发表

\o"回复"[回复]回复u010057025:啊,我是个初学者。我一直以为SIFT是一种小波变换。因为它利用不同尺度的墨西哥小帽小波卷积图像,与该小波尺度相近的斑点的位置就会因为小波系数在此处出现最大值而被标识出来。这一过程与小波变换很相似啊!请问,您认为不是小波变换的理由是什么?谢谢!Re:

zddhub

2013

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论