版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上摘 要图像匹配在遥感、医学、计算机视觉等很多领域中有着广泛的应用,是提取和匹配图像特征是实现图像自动配准的一种重要方法。SIFT(尺度不变特性变换,Scale Invariant Feature Transform)最初是作为一种关键点的特征提取出来的,其匹配能力较强,可以处理两幅图像之间发生平移、旋转、防辐射4等变换情况下的匹配问题,甚至在某种程度上对任意角度拍摄的图像也具备较为稳定的特征匹配能力。作为一种优秀的局部特征描述子,SIFT算子被广泛应用于目标识别、图像配准、室内场景定位等场合。论文着重介绍了一种基于图像特征值的匹配方法(SIFT算法),包括SIFT算法
2、的发展历史,算法特点,主要思想和实现步骤,然后实现SIFT特征点提取,以寻找一种优化算法,减少SIFT的算法复杂度。(介绍用什么实验,得到什么结论)关键词:SIFT算法,特征匹配,特征点提取专心-专注-专业AstractIn remote sensing image matching, medical, computer vision many adjacent domain in a wide range of applications, Extraction and matching image characteristics is to realize the automatic ima
3、ge registration is a kind of important method . SIFT was originally as a key point for feature extraction of come out, its matching with the strong ability can handle two images occur between translation, rotation and anti-radiation such transformation under the circumstance of the matching problem,
4、 even in some extent of arbitrary Angle photographs of image and also has a relatively stable feature matching ability. As a kind of excellent local characteristics description son, SIFT operators are widely used in target recognition, image registration, indoor scene positioning and so on. This pap
5、er mainly introduces a method based on image eigenvalue of matching method (SIFT algorithm). Including SIFT algorithm development history, algorithm characteristics, main ideas and implementation steps and then realized SIFT feature point extraction to find an optimization algorithm to reduce SIFT a
6、lgorithm complexity .(请不要直译)Keywords:SIFT algorithm, feature matching, feature point extraction, simplified algorithm. 目 录摘 要I第1章 绪论11.1 课题背景11.2目的意义11.3研究内容及结构安排2第2章 智能优化方法32.1 基于蚁群的优化算法32.2 基于鱼群的优化算法32.3 基于神经网络的优化算法32.4 本章小结3第3章 SIFT基本算法43.1 构建尺度空间53.2局部极值点的检测73.3 极值点的方向分配73.4特征点描述子的生成83.5 SIFT算法的
7、扩展93.6 本章小结10第4章 SIFT算法的改进方案114.1 SIFT简化算法介绍114.2 SIFT简化算法124.3 本章小结14第5章 实验结果及分析155.1 简化算法不变性测试155.2 描述子维数的选择155.3改进算法的时间复杂度155.4 本章小结15致 谢16参考文献17附录18第1章 绪论1.1 课题背景SIFT(Scale Invariant Feature Transform)算法由D.GLowe8于1999年提出,2004年哥伦比亚大学的David Lowe7提出了一种新的提取特征点的算法SIFT算法。后来,Y。ke将其描述子部分用PCA代替直方图的方式,对SI
8、FT算法进行改进,目前基于改进SIFT特征点的算法在图像处理中的应用越来越广泛,而且近年来这方面的研究也取得了很大的成果。较好的解决了物体遮掩、旋转缩放、视觉变换引起的图像变形等问题。本文主要针对图像匹配中的SIFT算法进行研究,然后将图片编程到OPENCV软件中,并借助gsl来实现改进的SIFT算法1的可用性。1.2目的意义 在图像提取算法百花齐放的时候,SIFT算法作为一个崭新特征提取的技术,具有强大和精确的匹配能力和广阔的发展和应用空间。对SIFT算法的改进和优化方法也有很多,如降低特征向量维数,增强算法的独特性和鲁棒性等。目前新型改进算法CSIFT,将SIFT与颜色不变量相结合19。S
9、IFT算子的应用邻域很广泛,目前已应用于目标识别、移动物体识别和图像配准和全景拼接等邻域,并仍有很大研究潜力;尤其在图像检索中的应用研究也有很广泛的应用意义和价值。因此SIFT算法将在以后将被更多研究者深入的研究,并具有更实用的应用价值。图像配准2的用处很广泛,其技术广泛应用于计算机视觉3、目标跟踪、医疗诊断等许多方面。景象匹配技术给予图像匹配的原理,以其定位的精确度在理论上与射程无关和自主性强等特点,成为组合导航中颇受重视的关键技术之一。在遥感领域,实现图像融合、变化检测、图像校正、图像镶嵌等应用中,图像匹配都是必不可少的一个关键步骤。1.3研究内容及结构安排 第2章 智能优化方法优化算法简
10、单介绍2.1 基于蚁群的优化算法2.2 基于鱼群的优化算法 2.3 基于神经网络的优化算法2.4 本章小结第3章 SIFT基本算法SIFT算法的发展历程 SIFT算法由D.GLowe 1999年提出,2004年完善总结。后来Y.Ke将其描述子部分用PCA代替直方图的方式,对其进行改进。SIFT算法的主要思想 SIFT算法是一种提取局部特征的算法,在尺度空间寻找极值点,提取位置,尺度,旋转不变量。SIFT算法的主要特点:a) SIFT特征是图像的局部特征,对其旋转、尺度缩放、亮度变化保持不变性,对视觉变化、放射变化、噪声也保持一定程度的稳定性。b) 独特性(Distinctiveness)好,信
11、息量丰富,适用于在海量特征数据中进行快速、准确的图像匹配9。c) 多量性,即使少数的几个物体,也可以产生大量的SIFT特征向量。d) 高速性,经简化的SIFT匹配算法可以达到实时性的要求。e) 可扩展性,可以很方便的与其他形式的特征向量进行联合。SIFT(Scale Invariant Feature Transform)即尺度不变特征变换,它对于图像的尺寸和旋转保持不变性,以下是用来产生SIFT图像特征的主要计算步骤: 1)尺度空间检测极值点:计算的第一阶段是搜索所有的尺度和图像位置,使用高斯差分公式可以有效的检测出潜在的特征点,这些特征点对于尺度缩放的旋转变换具有不变性; 2)关键点的定位
12、:对于每个点,确定他们的位置和尺度; 3)确定关键点的方向:为每个关键点分配一个方向,以后所有对图像的数据的操作都被转换为对特征点方向、尺度和位置的操作,从而保证变化得不变性; 4)生成特征点描述子:通过对关键点当前尺度周围区域的梯度统计,生成特征点描述子。 下面详细介绍SIFT算子特征提取的过程。3.1 构建尺度空间 构建尺度空间的目的是检测对于图像的尺度变化具有不变性的位置,可以使用尺度的连续函数也就是尺度空间在所有可能的尺度中寻找稳定的特征,高斯卷积核实实现尺度变换的唯一线性核。因此,若I(x,y)为输入图像,G(x,y,)是尺度可变高斯函数,则一个图像的尺度空间被定义为函数L(x,y,
13、),见式(2.1)。 L(x,y,)= G(x,y,)*I(x,y) (2.1) 其中,为尺度因子,越大,表示图像的概貌特征;越小,表明图像的细节特征,*为卷积运算。式(2.1)中的高斯函数G(x,y,)定义为式(2.2)。G(x,y,)=1/22 e-(x2+y2)/22 (2.2)为了在尺度空间中有效的检测稳定关键点的位置,Lowe提出了高斯差分卷积,高斯差分函数D(x,y,)可以通过不变倍增因子K的两个相邻尺度图像差计算得出,见式(2.3)。D(x,y,)=(G(x,y,k)-G(x,y,))*I(x,y)=L(x,y,k)- L(x,y,) (2.3)选择高斯差分函数的几个优点: 1)
14、计算效率高:由于L对于每个尺度空间都是需要计算的,而D只需在此基础上做减法操作; 2)高斯差分函数DoG(differerce-of-Gaussian)是尺度归一化算子LoG(Laplacian of Gaussian)的近似,Lindeberg证明具有因子2 的尺度归一化算子LoG对于真正的尺度不变性是必须的。DoG于LoG关系如式(2.4)。 2G=G/GG(x,y,k)- G(x,y,)/( k-k) (2.4) 因此,G(x,y,k)- G(x,y,) (k-1)22G 式(2.5)中的(k-1)因子在所有的尺度中式一个常量,所以不会影响极值点的位置,当k变为1时近似的误差会趋近于零,
15、但是在试验中发现近似值对于极值点检测方面的稳定性没有什么影响。 3)实验表明,从尺度归一化LoG空间中提取的特征稳定性最佳,优于梯度、Hessian、Harris焦点函数6。不要直接贴图,要自已画D(x,y,)具体计算过程见图2.3,初始图像经逐步高斯卷积运算,得到一系列尺度空间,即高斯(Gaussian)尺度空间,也就是图中左边的一列,右边一列表示由高斯制度空间经差分运算得到的高斯差分(DoG)尺度空间。尺度空间分为o阶,每一阶有s层。为了能再高斯差分(DoG)尺度空间的s层上检测候选点,需要有s+2层的高斯差分尺度空间,因而对应的高斯尺度空间需要为,则下一层尺度因子为k,故k=2I/s。在
16、产生了s+2个图像后,顶层图像有s+3层。如图所展示的,s+3个高斯图像产生s+2个高斯差分图像,所以必须首先构造s+3个高斯尺度图像。这些图像的尺度因子逐个以常数k倍递增,即若当前层图像的尺度因子由原始图像进行了1:2的采样计算得出。图2.3中,左边的o阶尺度空间构成高斯金字塔,右边o阶尺度空间构成高斯差分金字塔。3.2局部极值点的检测 为了检测D(x,y,)的局部极大值和极小值,每个采样点都要和它同尺度的8个相邻点和上下相邻尺寸对应的92个点相比较。只有当它比所有相邻点都大或者都小的时候这个点菜被选择。这个检查的花费是相当低的,因为大部分的采样点在上一次检查中就被淘汰了,见图2.4所示。图
17、要自已画,图标移到图外面来上一步被选择的点称为候选点,但是如果要进行下一步确定关键点的位置、尺度、主曲率,还要剔除那些低对比(对噪声很敏感)的点和处于边缘的点。3.3 极值点的方向分配 通过为每个关键点分配一个统一的基于局部图像属性的方向,关键点描述子转化为由它的方向来描述,从而实现图像旋转的不变性。这个方法了Schmid和Mohr(1997)的方向不变描述子5。这种方法的缺点是它限制了描述子的使用并抛弃了一部分图像信息。 对于每一个采样点L(x,y),计算其梯度模值m(x,y)和方向(x,y)的公式为式(2.14)和式(2.15)。m(x,y)= 2.14(x,y)=tan-1(L(x,y,
18、+1)-L(x,y-1))/(L(x+1,y)-L(x-1,y)) 2.15 为了进一步精确关键点的方向,采用梯度直方图统计法。以关键点为圆心,1.5为半径的圆形区域中,统计关键点邻域窗口的梯度值,并绘制梯度直方图。其中梯度直方图将360°分为36个单元(bin),每10°为一个单元。每个邻域点对梯度方向的贡献随邻域点与关键点的距离增加而减少,具体为成高斯函数递增。直方图的峰值处即为关键点的主方向。 在主方向被选定之后,梯度直方图中还可能存在一个或一个以上峰值为主峰值的80%以上,为了增强匹配的鲁棒性,可以增强一些关键点,这些关键点于原关键点具有相同位置和尺度,并将符合要求
19、的峰值作为其方向,只有15%关键点才具有多个方向。3.4特征点描述子的生成我们已经计算了关键点的位置、尺度和方向,下一步是要确定关键点描述子,特征点描述子的生成过程具体如下:键点为圆心将关键点邻域旋转°,其中为关键点的方向,从而保证了旋转的不变性;在旋转后的图像中,以关键点的中心取1616的邻域窗口,图2.5中左图即为关键点的邻域窗口,每个小格代表关键点邻域窗口中的一个像素,箭头的长度为像素的模值,箭头的方向为像素的方向,这个方向是旋转后的像素方向,即-;将1616的矩形窗口均匀分为16个44个子区域,如图2.5中右图,采用高斯模糊的方法,高斯模糊的方法有利于增加与关键点较近邻域的权
20、值,并降低与关键点较远邻域的权值,然后计算每个林宇中8个方向的梯度累加值: 得到特征点描述子的特征向量为448=128维向量。经过以上的变换,SIFT特征向量已经剔除了尺度变换、旋转变换的影响。3.5 SIFT算法的扩展 SIFT算法具有很好的鲁棒性和抗干扰性,有着广泛的应用,但是由于SIFT算子具有很高的维数(128维),增强了其计算复杂性和时间复杂度,并且在大规模特征数据库的检索中存在存储压力。国内外研究学者针对其高维数的缺点,进行了改进和尝试,以求在保持SIFT算子良好特征的前提下,尽量降低其维数。在这些研究中,较为有代表性的事PCA-SIFT和GLOH,两者都是从这个方面入手,并且都采
21、用了PCA(Principal componment analysis)技术。 PCA技术11是通过对数据降维莱实现简化的目的。通过一个正交矩阵变换把原数据变换到一个新的坐标系统中,从而实现高维数数据到低维数数据的转换,原变量中的大部分信息可以用维数少且互不相关的新变量来表示。主成分的划分按照信息量的数目,包含最大信息的综合指标作为第一主成分,其次的作为第二主成分,一般主成分的数目按需要反映全部信息量的百分比来决定。主成分分析主要是采用样本矩阵的协方差矩阵。 PCA技术的优点之一是其完全无参数限制。也就是说,PCA的计算和实现过程中不需要人为预先设定的参数或根据任何经验模型对过程进行干预,计算
22、结果只与数据本身有关。3.6 本章小结第4章 SIFT算法的改进方案SIFT算法是一种基于局部特征描述的算法,对于每个特征点,根据其邻域内的像素决定其描述子向量,较全局特征算法在大型数据库匹配中有了更好的应用,但是由于SIFT算子的特征描述子为128维,在存储中需要耗费的存储空间和匹配时间,GLOH算法虽然比SIFT算法由着更好的性能,但其特征向量也为128维,没有在复杂度上进行提高。针对于SIFT算法维数较高的缺点,本论文SIFT算法进行了改进,一下为具体的改进算法。4.1 SIFT简化算法介绍 SIFT算法的改进方案是从特征点的描述子入手,因为特征点描述子生成占去整个算法处理时间的大部分,
23、影响了算法的实时性,本论文的改进算法也是针对于特征点描述子进行改进。 本论文的改进算法是将原有的均匀分布的矩形区域改为以关键点为中心向外扩散的同心圆区域,生成关键点的邻域没有变小。这样改进主要有以下一些因素:1)SIFT算法中应用了高斯模糊的方法,也就是将图像与高斯函数即正态函数做卷积。对于图像来说,高斯模糊生成的曲面等高线是从关键点开始呈高斯分布的同心圆。这样处理以后与关键点较近区域中的像素对关键点描述子的生成影响比重较大,而与关键点较远区域中的像素对关键点描述子的生成影响小。若将原区域划分改为以关键点为中心的同心圆区域,可以省去高斯的模糊的步骤:2)SIFT算法需要计算每个关键点的方向,并
24、在描述子生成前旋转邻域,使关键点的方向为0°,从而保证旋转不变性。这是因为矩形并不具有旋转不变性,相对而言,圆形区域具有很好的旋转不变性,可以免去邻域角度归零的步骤。新的描述子构造方法如下:以关键点为中心,16为直径的圆形窗户区域作为邻域,以保证生成特征点描述子所需要计算的邻域范围和原算法基本一致:将半径为8的圆形邻域以2为单位分为4个同心圆,图3.1即为划分之后的同心圆,每个格子代表一个像素值:对于4个同心圆区域,分别求出其10个方向(0°、36°、72°、108°、144°、180°、216°、252°
25、;、288°、324°)的梯度累加值。由中心向外,取第一个圆环的10维向量作为特征向量的第一至第十个元素,取第二个圆环的10维向量作为特征向量的第11至第20个个元素,以此类推。这样,特征点描述子即为410=40维向量:为了保证旋转不变性,对特征向量实施排序操作。设D使关键点的特征向量,D1、D2、D3、D4分别为从中心向外第一、第二、第三、第四个圆环的特征向量,则D=(D1,D2,D3,D4),其中Di=(Di1,Di2,Di9,Di10),i1,4。首先标记出最内圆最大值出现的位置,即 dI1,dI2,dI9,dI10中的最大值,若dI1为最大值,则不需要做任何处理,若
26、最大值不是dI1,则进行如下操作:将D1、D2、D3、D4同时循环左移,直至D1中的最大值为特征向量D1中的第一位,设d17为向量D1中的最大值,则移动之后四个圆环的特征向量为Di=(di7,di8,,di10,di1,di2,,di6)。如果将每一个10维向量分别取向量的最大值并执行此步骤,则匹配的效果会大大降低。这样操作保证了四个圆环旋转相同的角度,等同于原算法中邻域归零的操作,从而保证了改进描述子具有选择不变性。4.2 SIFT简化算法将编好的程序输入到VC+运行,具体的步骤为:第一步,动态文件加入要运行的DEBUG里面第二步,在options -directory里面加头文件和lib
27、文件;在右侧下拉框里面选include files,include files包含opencv安装程序里的和gnuwin32里面的;同样的lib文件也是同样的方法,加到OPENCV和GUNWIN32里面。第三步,升级VC+运秆就可以了。实验中分别处理了经过旋转的两幅图片,如图(1),图(2),经过观察与分析得出:两幅图像在经过旋转后,利用SIFT简化的算法提取的特征点是相同的: 图(1)(图标) 图(2),图标4.3 本章小结第5章 实验结果及分析5.1 简化算法不变性测试 为了验证改进的SIFT算法的可行性和有效性,实验验证了在其旋转、尺度、变换时的图像匹配效果,并与原算法在匹配时间及匹配效
28、果上做对比。编程环境为OPENCV。5.2 描述子维数的选择本论文在改进算法中需要确定的一个重要参数是四个同心圆环窗口的向量维数,即每个同心圆环窗口所要统计的梯度直方图数目。例如,若每个同心圆环选择的向量维度为8,则生成的特征向量的维度为88=32维。向量维数不是越大越好,选择一个合适的向量维度可以提高查全率、正确率和降低时间复杂度。 5.3改进算法的时间复杂度 由于改进算子简化了特征点描述子,在匹配效果上有一定的降低,但是大大降低了SIFT算子的维数,时间复杂度也降低了很多。更实用于海亮的数据搜索。5.4 本章小结 本文在总结了SIFT算子的优点的同时,针对其维数过高,不适用于海量数据匹配的
29、不足,提出了自己的改进方案。本人从改进描述子入手,因为特征点描述子的生成占居了整个算法处理的大部分时间。简化的特征点描述子将原算法中均匀分布的矩形区域改为关键点为中心向外扩展的四个同心圆区域,生成关键点所需要计算的邻域没有变小,只是改进了邻域的划分方法。改进后的SIFT算子将特征点描述子的维数由128维降至40维。 致 谢 论文完成之际,首先衷心地感谢我的指导教师王妍玮老师的谆谆教诲和悉心指导,在毕业设计的3个月时间里,王老师给了我极大的帮助。王老师知识丰富、思维敏捷,在学业上积极创新的开拓精神令我永生难忘。在毕业设计和毕业论文撰写阶段,王老师不仅在学习上给予我帮助,而且她的那种负责的精神和强
30、烈的责任感,对我今后的发展提出了指导性建议。王老师认真敬业的工作态度和为人师表的作风,体现了一个教育工作者的无私奉献精神和科研工作者严谨的治学态度,这将使我在未来的工作和学习中受益终身。在此谨向尊敬的王老师致以我最诚挚的谢意。还要感谢华德学院电子信息工程系的所有教师,在学习和生活上你们都给予我最宝贵的意见和极大的帮助,还有我的指导员王明志教师,在平时的学习和生活中给予我的鼓励和关心。 感谢我的父母,一直以来对我无私的关怀和付出,在面对各种困难时,给我支持的鼓励!感谢所有关心我,帮助过我的朋友和同学!参考文献1 王国美,陈孝威 SIFT特征匹配算法研究D.贵州大学计算机科学与技术学院:2007.
31、2 何文峰,查红彬 基于平面特征的深度图像配准D 北京大学:2006.3 马颂德,张正友 计算机视觉计算理论与算法基础M.北京:科学出版社,2003.4 于长江.高等画法几何学M北京:航空专业教材编审组,1983.5 Schmid C,Mohr R.Local grayvalue invariants for image retrievalJ.IEEE Transactiongs on Pattern Analysis and Machine Intelligence1997.6 K.Mikolajczyk.detection of local features invariant to af
32、fine transformationsC.Ph.D.thesis Institut National Polytechnique deGrenoble France.2002.7 David G.Lowe.Distinctive Image Features from Scale-Invariant KeypointsC.International Journal of Computer Vision,2004.8 David G.Lowe.Object recognition from Iocal scale-invariant featuresC.International Confer
33、enceon Computer Vision,CorfuGreece,1999.9 赵辉.基于特征点的图像配准算法研究C.山东大学硕士学位论文.2006.附录SIFT源程序代码#include "utils.h"#include "imgfeatures.h"#include <cxcore.h>#include <math.h>int import_oxfd_features( char*, struct feature* );int export_oxfd_features( char*, struct feature*, i
34、nt );void draw_oxfd_features( IplImage*, struct feature*, int );void draw_oxfd_feature( IplImage*, struct feature*, CvScalar );int import_lowe_features( char*, struct feature* );int export_lowe_features( char*, struct feature*, int );void draw_lowe_features( IplImage*, struct feature*, int );void dr
35、aw_lowe_feature( IplImage*, struct feature*, CvScalar );int import_features( char* filename, int type, struct feature* feat )int n;switch( type )case FEATURE_OXFD:n = import_oxfd_features( filename, feat );break;case FEATURE_LOWE:n = import_lowe_features( filename, feat );break;default:fprintf( stde
36、rr, "Warning: import_features(): unrecognized feature" "type, %s, line %dn", _FILE_, _LINE_ );return -1;if( n = -1 )fprintf( stderr, "Warning: unable to import features from %s,"" %s, line %dn", filename, _FILE_, _LINE_ );return n;int export_features( char* fi
37、lename, struct feature* feat, int n )int r, type;if( n <= 0 | ! feat )fprintf( stderr, "Warning: no features to export, %s line %dn",_FILE_, _LINE_ );return 1;type = feat0.type;switch( type )case FEATURE_OXFD:r = export_oxfd_features( filename, feat, n );break;case FEATURE_LOWE:r = expo
38、rt_lowe_features( filename, feat, n );break;default:fprintf( stderr, "Warning: export_features(): unrecognized feature" "type, %s, line %dn", _FILE_, _LINE_ );return -1;if( r )fprintf( stderr, "Warning: unable to export features to %s,"" %s, line %dn", filenam
39、e, _FILE_, _LINE_ );return r;void draw_features( IplImage* img, struct feature* feat, int n )int type;if( n <= 0 | ! feat )fprintf( stderr, "Warning: no features to draw, %s line %dn",_FILE_, _LINE_ );return;type = feat0.type;switch( type )case FEATURE_OXFD:draw_oxfd_features( img, feat
40、, n );break;case FEATURE_LOWE:draw_lowe_features( img, feat, n );break;default:fprintf( stderr, "Warning: draw_features(): unrecognized feature" " type, %s, line %dn", _FILE_, _LINE_ );break;double descr_dist_sq( struct feature* f1, struct feature* f2 )double diff, dsq = 0;double
41、* descr1, * descr2;int i, d;d = f1->d;if( f2->d != d )return DBL_MAX;descr1 = f1->descr;descr2 = f2->descr;for( i = 0; i < d; i+ )diff = descr1i - descr2i;dsq += diff*diff;return dsq;int import_oxfd_features( char* filename, struct feature* features )struct feature* f;int i, j, n, d;d
42、ouble x, y, a, b, c, dv;FILE* file;if( ! features )fatal_error( "NULL pointer error, %s, line %d", _FILE_, _LINE_ );if( ! ( file = fopen( filename, "r" ) ) )fprintf( stderr, "Warning: error opening %s, %s, line %dn",filename, _FILE_, _LINE_ );return -1;if( fscanf( file,
43、 " %d %d ", &d, &n ) != 2 )fprintf( stderr, "Warning: file read error, %s, line %dn",_FILE_, _LINE_ );return -1;if( d > FEATURE_MAX_D )fprintf( stderr, "Warning: descriptor too long, %s, line %dn",_FILE_, _LINE_ );return -1;f = calloc( n, sizeof(struct featur
44、e) );for( i = 0; i < n; i+ )if( fscanf( file, " %lf %lf %lf %lf %lf ", &x, &y, &a, &b, &c ) != 5 )fprintf( stderr, "Warning: error reading feature #%d, %s, line %dn",i+1, _FILE_, _LINE_ );free( f );return -1;fi.img_pt.x = fi.x = x;fi.img_pt.y = fi.y = y;fi.
45、a = a;fi.b = b;fi.c = c;fi.d = d;fi.type = FEATURE_OXFD;for( j = 0; j < d; j+ )if( ! fscanf( file, " %lf ", &dv ) )fprintf( stderr, "Warning: error reading feature descriptor" " #%d, %s, line %dn", i+1, _FILE_, _LINE_ );free( f );return -1;fi.descrj = dv;fi.scl =
46、 fi.ori = 0;fi.class = 0;fi.fwd_match = fi.bck_match = fi.mdl_match = NULL;fi.mdl_pt.x = fi.mdl_pt.y = -1;fi.feature_data = NULL;if( fclose(file) )fprintf( stderr, "Warning: file close error, %s, line %dn",_FILE_, _LINE_ );free( f );return -1;*features = f;return n;int export_oxfd_features
47、( char* filename, struct feature* feat, int n )FILE* file;int i, j, d;if( n <= 0 )fprintf( stderr, "Warning: feature count %d, %s, line %sn",n, _FILE_, _LINE_ );return 1;if( ! ( file = fopen( filename, "w" ) ) )fprintf( stderr, "Warning: error opening %s, %s, line %dn&quo
48、t;,filename, _FILE_, _LINE_ );return 1;d = feat0.d;fprintf( file, "%dn%dn", d, n );for( i = 0; i < n; i+ )fprintf( file, "%f %f %f %f %f", feati.x, feati.y, feati.a,feati.b, feati.c );for( j = 0; j < d; j+ )fprintf( file, " %f", feati.descrj );fprintf( file, "
49、;n" );if( fclose(file) )fprintf( stderr, "Warning: file close error, %s, line %dn",_FILE_, _LINE_ );return 1;return 0;void draw_oxfd_features( IplImage* img, struct feature* feat, int n )CvScalar color = CV_RGB( 255, 255, 255 );int i;if( img-> nChannels > 1 )color = FEATURE_OXFD
50、_COLOR;for( i = 0; i < n; i+ )draw_oxfd_feature( img, feat + i, color );void draw_oxfd_feature( IplImage* img, struct feature* feat, CvScalar color )double m4 = feat->a, feat->b, feat->b, feat->c ;double v4 = 0 ;double e2 = 0 ;CvMat M, V, E;double alpha, l1, l2;cvInitMatHeader( &M
51、, 2, 2, CV_64FC1, m, CV_AUTOSTEP );cvInitMatHeader( &V, 2, 2, CV_64FC1, v, CV_AUTOSTEP );cvInitMatHeader( &E, 2, 1, CV_64FC1, e, CV_AUTOSTEP );cvEigenVV( &M, &V, &E, DBL_EPSILON );l1 = 1 / sqrt( e1 );l2 = 1 / sqrt( e0 );alpha = -atan2( v1, v0 );alpha *= 180 / CV_PI;cvEllipse( img
52、, cvPoint( feat->x, feat->y ), cvSize( l2, l1 ), alpha,0, 360, CV_RGB(0,0,0), 3, 8, 0 );cvEllipse( img, cvPoint( feat->x, feat->y ), cvSize( l2, l1 ), alpha,0, 360, color, 1, 8, 0 );cvLine( img, cvPoint( feat->x+2, feat->y ), cvPoint( feat->x-2, feat->y ),color, 1, 8, 0 );cvLine( img, cvPoint( feat->x, feat->y+2 ), cvPoint( feat->x, feat->y-2 ),color, 1, 8, 0 );int import_lowe_features( char* filename, struct feature* features )struct feature*
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 芜湖市人民医院退变性脊柱侧凸治疗考核
- 九江市人民医院护理质量根本原因分析考核
- 绍兴市中医院不同部位结石处理考核
- 烟台市中医院儿童泌尿系结石诊疗考核
- 南平市中医院病理资料管理考核
- 南通市中医院新生儿抚触技术规范化考核
- 宜春市中医院产科麻醉技术专项考核
- 烟台市人民医院护理职业生涯发展理论及应用试题
- 南昌市人民医院婴幼儿常见发疹性疾病的识别与处理考核
- 徐州市中医院经皮穿刺活检技术考核
- U3Lesson17Lesson18(课件)六年级英语上册(人教精通版)
- 内热针疗法课件-
- 综采采煤工艺
- 图书馆中级职称专业技术资格考试题库
- 影像记忆之记忆宫殿-抽象词语转换训练
- JGJ142-2004《地面辐射供暖技术规程》条文说明
- 《组织的力量 增长的隐性曲线》读书笔记思维导图PPT模板下载
- 农业银行境外汇款申请书样板
- GB/T 20671.5-2006非金属垫片材料分类体系及试验方法第5部分:垫片材料蠕变松弛率试验方法
- 包茎包皮过长精选课件
- 护士注册健康体检表下载【可直接打印版本】
评论
0/150
提交评论