基于ransac算法的sift特征匹配研究(OpenCV+VS2010)-朱万革(最终版)_第1页
基于ransac算法的sift特征匹配研究(OpenCV+VS2010)-朱万革(最终版)_第2页
基于ransac算法的sift特征匹配研究(OpenCV+VS2010)-朱万革(最终版)_第3页
基于ransac算法的sift特征匹配研究(OpenCV+VS2010)-朱万革(最终版)_第4页
基于ransac算法的sift特征匹配研究(OpenCV+VS2010)-朱万革(最终版)_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

SHANGHAI学士学位论文THESISOFBACHELOR基于ransac算法的sift特征匹配研究〔OpenCV+VS2023〕上海交通大学毕业设计〔论文〕学术诚信声明本人郑重声明:所呈交的毕业设计〔论文〕,是本人在导师的指导下,独立进行研究工作所取得的成果。除文中已经注明引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要奉献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承当。作者签名:日期:年月日上海交通大学毕业设计〔论文〕版权使用授权书本毕业设计〔论文〕作者同意学校保存并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权上海交通大学可以将本毕业设计〔论文〕的全部或局部内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本毕业设计〔论文〕。保密□,在年解密后适用本授权书。本论文属于不保密□。〔请在以上方框内打“√〞〕作者签名:指导教师签名:日期:年月日日期:年月日视频图像跟踪系统摘要图像〔Image〕--是客观世界的景物通过光学系统作用后产生的影像。图像直观地反映了场景中物体的颜色、亮度等特征,从而使我们能清晰分辨他们的形状、大小和空间位置。近30年来人们试图研究基于计算机的视觉系统,并且试图利用其系统来代替工业农业上的有害劳动。这样的视觉系统渐渐地进入我们的生活,让我们的生活变得很丰富,并且我们现在享受着图像处理这学问的成果。在世界上的先进的国家都设立了图像处理研究所,研究解决国防部门所要的问题。本文将介绍基于OpenCV〔OpenSourceComputerVisionLibrary〕的视频图像匹配、拼接、融合和目标跟踪的算法以及方法。说到图像拼接,本文中所用的图像拼接算法是高效的SIFT特征算法。首先,用两个通用的USB摄像头来实时地进行采集图像,并对这两幅图像提取SIFT特征点。然后,进行粗匹配。最后用RANSAC算法对所提取出来的SIFT特征点匹配对进行提纯以及估计模型参数。最后把两幅图像拼接成一幅完整的图像,并且用加权平均算法进行无缝拼接。再进行摄像头标定,求出两个通用摄像头的内外参数,最后进行测距以及跟踪。最终取得了令人满意的结果。关键词:SIFT,匹配,拼接,配准,RANSACVIDEOTRACKINGSYSTEMABSTRACTFormanyyears,peoplehavebeenstudyinghowtomaketherobotorthecomputerabletoidentifytargetsandobtaininformationaboutthesurroundingenvironment.Wepeoplecaneasilyseeandidentifyeverykindofobjects,butforcomputersorrobots,thisisaverydifficulttaskanditisaprocessthatinvolvesalotofscientificknowledge.Themainpartofobjectrecognitionisdigitalimageprocessing.Aftertheinventionofthecomputer,peoplebegantodirecttheirresearchonhowtomakethecomputermorepowerfulanduseful.Forthispurpose,manyscientistshavededicatedtheirlifeforthedevelopmentofcomputer.Therapiddevelopmentofcomputercausesaveryfastdevelopmentofdigitalimageprocessing.Whywepeoplestudyscience?Ofcoursetheanswerwillbetomakeourlifeeasier,andtobeabletoliveinourdreamlife,sothatwecanenjoythelifeincomfortandhappiness.Nowadays,Imageprocessingtechnologyiseverywherearoundus,butsometimesbecauseweareusedtothistechnologysowedon’tpayattention.Forexample,thephone'shandwritinginputmethod,companyentrancefingerprintidentificationsystem,licenseplaterecognitionsystem,roboticssystemprogramforexploringthelunar,medicalimagingtechnology,facialrecognitionsystems,andsatelliteimagingsystemandsoon.Inthelastthreedecades,imageprocessingtechnologyhasmadearapiddevelopment,whichisinseparablefromthedevelopmentofcomputers,andmoreinseparablefromthedevelopmentofmaterialsscience.Wecannoticethatsciencenowhavepenetratedintoeveryprofessionalimageprocessingandtheimagecomestomanyareas.Thesedaysimageprocessingtechnologyisdirectlyrelatedtoourstandardlife,thistechnologyinvolvesimagerecognition,imageanalysisandimagestitching,etc.Imageprocessingisnowfacingenormouschallenges,duetothedevelopmentofmaterialsprocessingindustry,CNCmachinetoolsandcontroltheory,imageprocessingtechnologyrequirementsareveryhigh,Therefore,manyscientistshavespenttheirlifestudyingimageprocessingtechnology,tryingtodevelopmoreflexible,morereliable,moreaccurateimageprocessingtechnologyandimageprocessingalgorithms.Videotrackingsystemincludestheimagestitchingtechnology,whenwementionimagestitchingtechnology,wehavetotalkaboutimagematchingandimageregistration,becausethesetwomodulesarethecorepartsoftheimagestitching.Inthisstudy,IusedScale-invariantfeaturetransform(SIFT)algorithm,thisalgorithmfeaturesrepeatability,unique,localized,quantitative,accuracyandefficiency.Firstfromthetwocameras(peopleleftandrighteye)insynchronousreadstheimagesequence,andIappliedtheseimagesequencesRANSACalgorithmbasedonSIFTfeaturematchingandobtainedagoodimagestitching.Thenthisimagewithanimagetemplatematchingofimagerecognitionandtracking(basedonSIFT),whilesupportingthebinocularmeasurementstoobtaindistanceinformation.Typically,abouttwoamomenttoreadthetwocameraimageswithalotSIFTfeaturepoint,sotheneedtopurifythedatausingtheRANSACalgorithm,likethatfilter,however,sothereisstillasmallamountoffilteredwrongmatchingpairs.SoweuseRANSACmethodparameterestimationperspectivematrix.Theso-calledRANSACmethodisawidelyusedmodelparameterestimationalgorithm.Isthefirstofseveralrandomlymatchedpairs(thethesismustselectatleastfourpairsabove),weseeitasinteriorpoint,andthenestimatetheparameters,findoutifyoumeetenoughmatrixmatchingpairs,thenwethinkthatthismodeliscorrect.Ifthereisnotenoughtomeetmorethanamatchfor,orverylittle,thenwegiveup,andthenrandomlyselectedafewmatchesagainstrepeatedtheaboveprocedure.Experimentalresultsshowthatseeksoutsuchaperspectivematrixisright.Thispaperdescribesthestepsaccordingtotheabovevideotrackingsystemdevelopedandusedbytheprocess;Ihaveimprovedalgorithmandexperimentalresults.Keywords:SIFT,OpenCV,matching,RANSAC,videoimage目录第一章绪论11.1论文研究背景21.2国内外研究现状31.3论文任务和工作4第二章SIFT特征算法52.1有关SIFT算法的术语52.2SIFT综述62.3尺度空间和高斯滤波72.4关键点检测122.5特征点方向确定以及SIFT特征向量的生成152.6SIFT特征点匹配162.7本章小结19第三章基于RANSAC算法的图像拼接系统设计203.1对开源库OpenCV的简单的介绍203.2开发环境的搭建〔VS2023+OpenCV2.3.1〕203.3实时采集图像213.4图像变换模型〔矩阵〕223.5基于RANSAC的图像拼接233.6本章小结27第四章基于OpenCV的摄像头标定以及测距284.1摄像机标定一般模型〔针孔相机模型〕284.2基于OpenCV的测距原理304.3两个摄像头的标定以及测距334.4本章小结41第五章总结以及未来的展望42参考文献42谢辞44第一章绪论很多年来,人们一直研究怎么样才能够让机器人或者计算机识别目标、认知周围环境。在我们看来很简单的物体,计算机或者机器人很难区分出来。这是一个很艰难的任务,也是一个涉及到很多科学的学问。我们所说的图像处理主要局部是数字图像处理。计算机的创造以后,人们开始着重研究怎么样让计算机的功能更强大更加具有实用性,随着岁月的流逝,很多科学家为了计算机的开展奉献了自己的一生。计算机的飞速开展给图像处理带来了飞速的开展。人类为什么要研究科学?无疑是为了让我们的生活更加滋润,让我们活在我们所设想过的梦幻里。这样我们舒舒服服的享受生活,幸福快乐地过着人生。数字图像处理技术无处不在。只不过我们习惯了没注意而已。比方说,的手写输入法、公司门口的指纹识别系统、交通统计时用到的车牌识别系统、探月机器人系统、医学成像技术、脸部识别系统和卫星拍摄系统等等。图像处理技术近三十年来得到了飞速的开展,这离不开电脑开展的伴随,更加离不开材料科学的开展。可见,现在科学的每个专业都渗透到图像处理,而且图像涉及到的领域很多。到哪儿都能感觉到图像处理技术的强大。图像处理技术的应用方面很广,小到我们所用的智能里,大到国防工业。在战争的时候,敌机发现是个很关键的问题,因为早发现可以早点做好战斗准备。用雷达发现敌机是主动的,所以容易被发现,但是,如果开发一个双目跟踪系统〔利用两个已标定好的摄像头〕的话,不会被敌机发现,也就是说被动跟踪方式。这样的系统是降低本钱,而且不会被敌机发现,所以,其利用价值是无可限量的。图像处理技术有图像识别、图像分析和图像拼接等等。图像处理现在面临巨大的挑战,随着材料加工业、数控机床和控制理论的开展,各领域对图像处理技术的要求非常的高。所以,很多科学家用自己的一生去研究图像处理技术,试图研发出更灵活、更加可靠、更高精度的图像处理技术以及图像处理算法。作为处理图像的图像处理数学工具,MATLAB和MATHCAD不可缺少。此外,C,C++和Java是目前为止最受欢送的视觉系统实现语言,这是因为它们在集成高级和低级功能方面力量强大而且编译能力强。[1,11]除此以外OpenCV开源库作为强大的图像处理开源库得到了广泛的应用。之所以得到了众多科学家开发人员的好评,是因为它是开放的,也就是说免费的,任何人都可以去用,其次呢,是因为它所拥有的图像处理功能非常之强大。比起其他图像处理软件,OpenCV的强大表现在它有很多封装好的函数,这些函数各个都是一个功能,比方说要是用visualc++中实现的功能,在OpenCV上用简单的几个函数来实现。下面着重介绍本论文的研究背景、国内外研究现状以及论文内容和组织结构。1.1论文研究背景数字图像处理起源于20世纪20年代,当时通过海底电缆从英国的伦敦到美国的纽约采用数字压缩技术传输了第一张数字照片。之后的开展有点缓慢,知道第三代计算机的问世,才开始迅速的开展。[3,6]作为图像处理软件,OpenCV近十年来一直被人瞩目,一直被很多图像处理科学家们收到宠爱。虽然MATLAB具有很强大的科学计算功能和图像处理功能,但在图像处理功能方面超不过OpenCV的。麻省理工学院计算机科学与人工智能实验室的WilliamT.Freeman曾说过“OpenCV库对从业人员而言非常有用,对初涉该领域的新手而言不失为一个优秀工具。正如其广而告之的那样,它是一套高效的计算机视觉算法。〞OpenCV是一个开源的计算机视觉库,是英特尔公司资助的两大图像处理利器之一。作为一个跨平台的计算机视觉库,它为图像处理、模式识别、三维重建、物体跟踪、机器学习和线性代数提供了各种各样的算法。截止2023年8月,在网站的OpenCV下载次数超过2,200,000次。[4]过去一周〔从2023-05-16到2023-05-22〕,在的OpenCV下载次数超过了32,942次,这数字仅仅是一周的下载次数。OpenCV开源库至今更新到OpenCV2.4.5。本人在论文中所提到的算法都是用VisualStudio2023和OpenCV2.3.1的搭建下写程序编译通过的。虽然OpenCV开源库是给大家开放的图像处理算法库,但是,在国内有关OpenCV的书籍和文献极少,针对初涉该领域的新手们的教程只有两本——“学习OpenCV〞〔中文版〕,“OpenCV教程——根底版〞。在网上有与OpenCV有关的资料,但是,也是很少,而且相当零散。这种现象造成了很多喜欢玩OpenCV的人很难系统的学到OpenCV。不过,在互联网的飞速的开展的情况下,这样的现象渐渐地少了很多。因为互联网上有关OpenCV的论坛很多,喜欢跟OpenCV打交道的人们可以通过互联网上的论坛或者贴吧互相交流互相帮助。这样在某种程度上形成了OpenCV培训所。写这篇论文之前,本人也在互联网上得到了很多人们的帮助,也帮助过很多人们。但是,这也是一定的范围内进行的,也就是说局限在简单的程序语法或者特定的函数用法等等。本人在论文中用到的算法是尺度不变特征点〔SIFT〕算法,尺度不变特征点具有可重复性、独特性、局部性、数量型、准确性和高效性。下面看看国内外研究现状。1.2国内外研究现状OpenCV的更新换代地升级给我们带来了很多好处,以前要写很长的代码完成某功能的操作不需要了,因为OpenCV的版本越高里面嵌在的函数的封装性越来越好。这给了我们极大地好处,只要我们能够了解怎么调用这些函数和图像处理的根底理论就好办了。视频图像跟踪系统其本身包含了图像拼接技术这领域,说道图像拼接技术不得不提起图像匹配和图像配准。因为这两个模块是图像拼接的主要核心局部。现在被广泛使用的匹配有特征匹配和模板匹配等等。其中特征匹配是本论文所利用的。特征匹配的最后效果好坏取决于特征空间的选取,所谓的特征空间就是由参与匹配的图像特征构成的。特征点的类型很多:比方原始灰度、显著特征点、边缘轮廓、统计特征、局部描述符、高层结构特征等。其中SIFT特征点几年来最为被广泛使用。利用SIFT特征空间的匹配大致分为三个步骤。第一步是特征提取,第二步是特征匹配。所谓的特征提取是指从具有共同局部的两幅图像提取共有的特征。特征匹配是对从两幅图像中提取出来的共有的特征点进行对应。Movarac在1980年提出了关于角点的最初算法。在这根底上1988年Harris把这个初始想法正式形式化为称为结构张量的两个特征值性质的问题。从此以后很多科学家参加到了这领域开始研究各种算法。Triggs和Kenney提出了广义角点度量。这时候的算法都有着致命的弱点,那就是对广义的视角的匹配效果并不好,就不适用。为了克服这问题,1995年,张正友提出了用兴趣点附近的图像区域进行匹配的方法。但他的算法无法解决图像旋转、尺度变化、投影变化等问题。直到2004年Lowe完善了根据1999年基于Lindeberg的图像尺度空间理论提出的SIFT〔ScaleInvariantFeatureTransform——尺度不变特征〕算法。之所以SIFT特征空间被广泛使用,是因为它对缩放、旋转、平移和投影变换等等具有不变性。SIFT特征点匹配算法具有较强的鲁棒性,而且算法速度高、精度高。1.3论文任务和工作近几年来SIFT特征算法成为了很多科学家以及研究员的研究热点。它以自身的优势渐渐地成为了图像匹配的主流算法。本论文围绕着如何将SIFT特征算法应用于视频图像跟踪系统中,实现从两个usb摄像头中读取的两幅图像进行匹配,怎么样提高匹配速度以及精度等问题开展研究。用SIFT算法进行的特征点的提取和粗匹配后的,效果还是不太理想,因为毕竟存在错误的匹配。所以,要用RANSAC〔随机抽样一致性〕算法对粗匹配的匹配对进行提纯工作。两个通用USB摄像头毕竟存在畸变性,特别是径向畸变厉害,所以,我们需要用OpenCV的自带函数来进行摄像头标定。在本论文采用的标定方法是张氏法,需要格子板,本论文采用的标定物正是具有9*6=54个角点的格子板标定物。通过OpenCV自带的标定算法以及相关的函数来求出摄像头的内外参数。利用求出来的内外参数进行简单的计算得到实际物体到摄像头的距离信息。利用已经标定好的摄像头进行测距的时候不需要模板匹配,因为只要找到很强的SIFT匹配对,也就是说只要找到正确的匹配对〔当然跟目标相关的,其他的丢掉〕,就可以求出摄像头到物体之间的距离信息。首要条件是把两个摄像头放置的时候它们的光心轴要平行,以使让最后得出的距离接近实际的距离。下面来看看本论文理论结构以及各章的中心内容。下面就是论文主要内容::第一章为绪论,简单的论述了本论文的研究背景和国内外研究现状等。对图像处理经典算法进行了解剖,并论述了SIFT算法的优越性。最后给出了本论文的内容结构以及论文内容。:第二章主要介绍了有关SIFT算法的知识以及具体实现的方法。最后还简单的介绍了RANSAC算法的一般原理。:第三章是作为本论文的重点,着重介绍了从两个摄像头中读取的两幅图片中怎么样提取SIFT特征点、怎么样构建特征点空间以及怎么样粗匹配,最后介绍了经过RANSAC算法以后图像拼接以及配准原理和方法。给出了评估模型的一般方法。:第四章讲述了基于OpenCV的摄像机标定原理和方法。针对双目视频跟踪系统的研制开发讲述了摄像机标定的数学原理以及具体实现方法和实验结果。:第五章为总结和展望。第二章SIFT特征算法作为一种局部描述子,尺度不变形特征变换,Sift(ScaleInvariantFeatureTransformation)被广泛利用着。它具有尺度不变形,在图像中找出关键点。从SIFT特征算法的诞生以来,出现了很多有关SIFT的算法,人们为了能够在现实中利用,而试图改良它。这些局部特征被广泛利用而且被研究的真正原因在于它能够表述统计意义的图像特征。接下来从下面开始着重看SIFT特征算法具体内容。2.1有关SIFT算法的术语本节论述本论文常用的一些术语以及概念。特征点:特征点可以是一个点,可以是一个很小的局部区域,也可以是局部特征,这三个都是相同的概念,知识它们出现的历史时期不一样而已。当然我们想要的特征点最好是一个点,可以理解为我们所研究的数字图像离散化后得到的一个最小的单位--像素点。但是,我们在做研究的时候,我们所关心的就是特征点以及它的领域。因为特征点的领域所表现出来的是某个物体的边缘或者特定的角点,所以特征点的领域对我们后续的研究有很大的帮助。局部特征:特征可以分为全局特征和局部特征。我们很容易理解全局特征。比方说我们看一幅图片中孤立的物体时,或者看彩色照片的时候很容易检测到某个物体或者某个人的脸。因为我们人类所拥有的眼镜,也就是说人类的视觉系统是具有极高的全局特征区分能力,不过,让计算机或者机器人能够认知这些全局特征,需要消耗很大的精力和资金的投入。即使做到了,也是在一定的范围内可行的。因为图像处理技术虽然近几十年开展到令人振奋的程度,但是实际应用中还有很多海量的问题需要解决。几何变换:几何变形有平移变换、平移+旋转变换、相似〔平移+缩放+旋转〕变换、仿射变换和透视变换。仿射变换:他所指的是两个互不相同的坐标下的矢量之间的边换。2.2SIFT综述尺度不变特征转换(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.

关键点描述:在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。这些梯度被变换成一种表示,这种表示允许比拟大的局部形状的变形和光照变化。2.3尺度空间和高斯滤波当用一个具有视觉系统的机器人在未知的场景下分析周围环境的时候,机器人的视觉系统没有方法预先知道图像中物体的真正尺度。所以,需要考虑得到的图像在多尺度下的描述,获得所感兴趣物体尺度。因此,尺度空间的很多处理算子跟哺乳动物视网膜和视觉系统有着极高的相似性。所以,尺度空间理论经常与生物视觉系统相关联。这一节将讨论尺度空间的根本概念以及理论根底。并且利用几个实际图像实例来介绍尺度空间理论在场景分析中的应用。2.2.1图像的金字塔化图像的金字塔化所指的是对图像进行低通滤波操作。在图像的金字塔化中被利用的低通滤波器是高斯低通滤波器。具体地说,把一幅图像和高斯滤波器进行卷积运算后,再对图像进行横轴和纵轴的方向进行抽样。这样得到的一些列图像称之为已金字塔化的图像序列。不多,它虽然能够表达出图像在多尺度下的描述,但它缺少扎实的理论背景,很难分析图像中物体的各种尺度。早在1983年,Witkin提出信号的尺度空间表达就是利用一系列单参数、款读递增的高斯滤波器将原始信号滤波的道德一组低频信号。说道低通滤波器,虽然其种类很多,但是,Koenderink、Lindeberg、Florack等科学家利用精准的数学理论通过不同途径证明了高斯核就是实现尺度变换的唯一的变换核。[2,13]由不同高斯核组成的尺度空间是标准的和现行的,而且满足一下的假设干性质:平移不变性、尺度不变性和旋转不变性等等。WItkin对尺度空间理论最重要的奉献之一就是把这些表达与信号在不同尺度上的结构用系统方法关联在一起,从而将尺度这个维度很自然的参加到尺度空间表达中,使得跨尺度图像结构的某些行为能够被捕获。[2,13]2.2.2高斯尺度空间SIFT算法是在不同的尺度空间上查找关键点,而尺度空间的获取使用高斯模糊来实现,Lindeberg等人已证明高斯卷积核是实现尺度变换的唯一变换核,并且是唯一的线性核。本节先介绍高斯模糊算法。1.二维高斯函数 高斯模糊是一种图像滤波过程。高斯模糊所用到的函数就是高斯函数〔正态分布〕计算模糊模板。使用该模板与原图像进行卷积运算,并且得到一系列模糊图像。N维空间高斯函数方程为:(2-1)其中,是正态分布的标准差,值越大,图像越模糊(平滑)。r为模糊半径,模糊半径是指模板元素到模板中心的距离。如二维模板大小为m*n,那么模板上的元素(x,y)对应的高斯计算公式为:(2-2)在二维空间中,这个公式生成的曲面的等高线是从中心开始呈正态分布的同心圆,如图2.1所示。高斯函数是圆对称的分布不为零的像素组成的卷积矩阵与原始图像做变换。每个像素的值都是周围相邻像素值的加权平均。原始像素的值有最大的高斯分布值,所以有最大的权重,相邻像素随着距离原始像素越来越远,其权重也越来越小。这样进行模糊处理比其它的均衡模糊滤波器更高地保存了边缘效果。图2.1理论上来讲,图像中每点的分布都不为零,这也就是说每个像素的计算都需要包含整幅图像。在实际应用中,在计算高斯函数的离散近似时,在大概3σ距离之外的像素都可以看作不起作用,这些像素的计算也就可以忽略。通常,图像处理程序只需要计算(+1)*(+1)的矩阵就可以保证相关像素影响。2.图像的二维高斯模糊根据σ的值,计算出高斯模板矩阵的大小(+1)*(+1),使用公式(1-2)计算高斯模板矩阵的值,与原图像做卷积,即可获得原图像的平滑(高斯模糊)图像。为了确保模板矩阵中的元素在[0,1]之间,需将模板矩阵归一化。5*5的高斯模板如表2.1所示。表2-1下列图是5*5的高斯模板卷积计算示意图。高斯模板是中心对称的。图2.33.尺度空间理论以及高斯金字塔的构建尺度空间〔scalespace〕理论早在1962年被Iijima提出了以后,Witkin和Koenderink等人的推广下,渐渐得到了众多人们的关注,后来在计算机视觉领域内被广泛使用。尺度空间理论的根本思想是在图像信息处理领域里引入一个参数〔我们称之为尺度〕,通过联系变化的尺度参数获取多尺度下的空间序列,并对这些已获取的序列进行轮廓的提取,以该轮廓作为一个特征向量,实现角点、边缘检测以及不同分辨率上的特征提取等。尺度空间方法改变了传统的单尺度图像处理技术,进一步实现了尺度连续变化的图像动态分析框架。尺度是自然存在的,不是认为创造的,高斯尺度空间只是表现尺度空间的一种形式。这样,能够更容易获得原图像的本质特征。尺度空间中各尺度图像的模糊程度逐渐变大,能够模拟人在距离目标由近到远时候的目标在视网膜上的过程。尺度空间要满足对图像的分析和图像的位置、大小、角度以及仿射变换无关,也就是说要满足平移不变性、欧几里得不变性、尺度不变性和仿射不变性。总的来说,要满足视觉不变性。视觉不变性的解释如下:比方拿我们人类所拥有的视觉系统解释。当我们用眼睛观察一个物体的时候,假设物体所处的背景的光照变化了,我们的视网膜上形成的图像的比照度和亮度水平就变了,而且我们和物体之间的距离变化的时候,在我们的视网膜上形成的图像信息不同的,就是说我们的视网膜上形成的图像的位置、大小、形状以及角度是不同的。所以,我们所要利用的尺度空间要克服这些变化,总体来说要满足尺度不变性、欧几里得不变性、平移不变性以及仿射不变性。下面我们来看尺度空间如何表示.一幅图像的尺度空间,定义为具有一个变化尺度的高斯函数与原图像I(x,y)的卷积。即*。*表示卷积。上面的公式(2-3)下面的公式(2-4)X,y所指的是原图像的每个点的像素值,也就是说在图像坐标的坐标值。指的是尺度空间参数。值越小表示图像被平滑的越少,相应的尺度也就越小。大尺度对应于图像的概貌特征,小尺度对应于图像的细节特征。m,n表示高斯模板的维度。接下来要构建金字塔,第一步首先利用上述的公式对原图像进行多尺度的高斯模糊,第二部再进行采样后得到一系列多尺度下的高斯金字塔。图2.4如同上面的图,可以看出所谓的金字塔模型就是对原图像进行降采样,从大到小,从下到上,把采样得到的图像序列排列的。每个金字塔模型里有n层,第一层就是原图像。金字塔的层数根据所用到的原图像的大小以及最上面的图像大小来决定。而且看图片就可以不难发现每次滤波的尺度参数值就是前一个参数值的两倍,而每次采样时候我们采纳了降采样,就是个点采样一次。所以大小随着层次的上升就横向纵向各取1/2采样。2.4关键点检测在这节里需要定义尺度空间,这尺度空间叫DoG尺度空间。在上述的内容中提到了用函数表示了图像的尺度空间。它是多尺度的高斯函数和原图像卷积后得到的。DoG尺度空间的定义如下:K为响亮的两个尺度空间倍数的常数。DoG在计算上相邻图像高斯平滑后的图像详见,可见简化了计算。图2.5这样获取的一系列高斯差分图像是DoG尺度空间。我们只要看出图像上的像素点变化情况就可以了,也就是说如果像素值变了就说明那个像素点和其领域内存在特征点,如果没有发生什么变化,那就说明没有特征点。这样找出的特征点连起来,往往都是我们所关心的目标的主轮廓。下面的图告诉我们DoG尺度空间所表达的信息以及其效果。从下面的一系列DoG图像来看我们通过DoG空间,能够获取目标的〔我们所关心的物体〕重要信息,比方轮廓。使用DoG对LoG金丝带来的好处是显而易见的。第一是LoG需要使用两个方向的高斯二维微分卷积核,而DoG直接使用高斯卷积核,省去了对卷积核的生成的运算量;第二是DoG保存了哥哥高斯尺度空间的图像,这样,在省城某以空间尺度的特征时候,可以直接使用产生的尺度空间图像,而无需要重新再次声称该尺度的图像;第三是作为LoG的近似和简化,DoG具有与LoG相同的性质,而且检测特征点检测更加稳定。[2,81]图2.6严密的来说,DoG尺度空间也是金字塔,原因很简单。DoG尺度空间是从LoG尺度空间金字塔模型中获取的。将图像金字塔共分O组〔Octave〕,每组共有S层〔Level〕,下一组的图像由上一组图像按照隔点降采样得到,这样做的目的是为了减少卷积运算的工作量。[2,81]图2.7SIFT特征点空间生成示意图上面的图像就是高斯金字塔与DoG的获取过程。高斯金字塔的第一组图片中相邻的图像相减得到了对应组的DoG空间第一组,要注意的是,这时候因计算的关系少了一个层次,也就是说高斯金字塔第一组里面共有五幅图像,到DoG空间金字塔第一组里面变成了四幅图像。第二组也是这样得出的。以此类推,能够得到高斯金字塔对应的DoG图像金字塔。[2,81]特征点的检测是通过同一组内各DoG相邻层之间比拟完成的。[2,84]为了寻找尺度空间的极值点〔极大值和极小值〕,每个点〔这儿的“点〞就是采样的点〕必须和它所在的层面上的8个领域点、相邻的两个层面上各取18个点,也就是说,要和相邻的26个相邻点进行比拟,确定是否极值点。所以,要进行比拟的领域点形成了3*3*3的立方体领域。这样获取的极值点并不是真正意义上的极值点,原因是所得到的极值点毕竟是采样点,所以我们得到的极值点附近肯定存在连续图像上的极值点。我们要用插值的方法进行曲线拟合,并且要找到这极值点作为特征利用。利用的离散空间点插值得到连续空间极值点的方法叫做子像元插值方法。在这儿我们需要利用三元二次函数来拟合完成插值得到连续的函数,然后根据已得到的极值点来确定真正意义上的极值点。这样就很正确的定位特征点的位置。2.5特征点方向确定以及SIFT特征向量的生成通过上面表达的一系列过程,得到特征点以后,需要给每个特征点赋予其方向,所谓的方向所指的是该特征点的方向参数。特征点方向确实定是一个不可缺少的一个极其重要的环节。因为要知道特征点的方向,就可以在后续的匹配过程中容易找到对应的匹配点〔也可以是对象〕。这样得出来的描述子就可以具备旋转不变性。描述的目的是在关键点〔特征点〕计算后,用一组向量将这个关键点〔特征点〕描述出来,这个描述子不但包括关键点〔特征点〕,也包括关键点〔特征点〕周围对其有奉献的像素点。用来作为目标匹配的依据,也可使关键点〔特征点〕具有更多的不变性,如光照变化、3D视点变化等。描述的思路:通过对关键点周围图像区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象,具有唯一性。下面的两个式就是〔x,y〕点地图的模值和角度〔方向〕。(2.5)(2.6)对每个特征点,利用上面两个式进行计算以后,再用直方图对该特征点领域内所有点的梯度方向进行统计。梯度直方图范围为0~360度,我们每10度一个柱来表示直方图,那就一共36个柱来表示了。主方向,也就是其主峰值对应的方向。峰值大小为主峰值的百分之八十的就是该特征点对应的辅方向。完了上面的整个过程以后,需要生成特征描述符。图2.88个方向直方图以及SIFT算法描述子生成示意图上面是示意图,首先取8*8大小的领域进行统计,然后四个个4*4大小的领域里进行统计,然后从这已经统计好的四个资料再次进行统计,最后得到该特征点〔关键点〕的直方图。其中峰值最高的就是该关键点〔特征点〕的主方向〔第五个柱〕,而第二个正是需要的辅方向。这样得到了关键点〔特征点〕的维数为128维,因为每个点具有8个方向信息,那么每个特征点就对应着128维的向量。这样获得的向量就是对应特征点的SIFT特征向量。为了提高匹配的稳定性,Lowe建议对每个关键点使用4*4共16个种子来描述,这样对于一个关键点就可以产生128维的数据,及最终形成128维的SIFT特征向量。此时的SIFT特征向量已经消除掉了尺度变化、旋转变化等几何变形因素的影响,并具备了稳定性、独特性以及各种不变性〔尺度不变性、旋转不变性等〕。接下来我们要采用特征点特征向量的欧氏距离来作为两幅待匹配的图像中特征点〔关键点〕的相似性进行比拟。从左摄像机拍到的图像中取某个特征点,并找出有摄像机拍下来的图像中欧氏距离最近的前两个特征点。在这两个特征点中,如果最近的距离出一次近的距离小于某个比例阈值,那么接受这一对匹配点。如果我们把这阈值设成小一点,就不难想象,SIFT特征匹配点数目就会减少,但是其稳定性很高。下一步要进行匹配,具体的匹配方法在一节中详细介绍。2.6SIFT特征点匹配从左右两个摄像头拍摄下来的两幅图像中,各取各图片的SIFT特征点后,我们要进行粗匹配。说道粗匹配,其实已经表达过,在上一节内容中提到过用BBF搜索法〔虽然在上述的内容中没有这么叫,但严格的说是BBF搜索法〕确定粗匹配对。但是,这些粗匹配对中正确地匹配也有,错误的匹配也存在。只靠最近邻次近邻距离比法确定粗匹配关系是可以的,而且已经有很多经典算法问世以后被广泛利用着。但是,用这些经典算法来得出来的匹配对在后续的精确匹配工作中会受到很多障碍,因为后续的精确匹配工作中被利用的算法是RANSAC算法。那么有什么经典的算法、具体的BBF搜索法来得出的粗匹配集到底是什么样以及为什么要利用RANSAC算法,我们就一个一个地来看看。2.6.1BBF搜索法当进行特征点粗匹配的时候,Lowe采用了基于特征点最近邻次近邻距离比的BBF〔BestBinFirst〕搜索算法。对特征点集进行各种计算的时候,常常会用到穷尽搜索、分层搜索、牛顿法、最速下降法、动态规划法、遗传算法、方向加速发和神经网络等。2.6.2最近邻次近邻距离比首先定义两个特征点特征向量之间的欧氏距离为两个特征点之间的距离。从两幅〔左右摄像机同步拍下来的〕图像中各取SIFT特征点,这时候两幅图像各取的SIFT特征点数不一样,这是因为左右两个摄像机的内外参数不一样,比方焦距和畸形变形等。从左图的特征点集中取个特征点,然后计算该点和右图的每个特征点之间的距离,再次从左图特征点集〔特征向量〕中取个特征点反复上次的计算,这样计算下来得到一系列计算值。根据左右特征点之间的距离值,从小到大排序。然后选择最小值和次小值,选择完了这两个距离值,我们进行计算这两个值之间的比值。如果比值大于已定好的阈值,就排除掉,如果小于阈值我们就认为满足这最近邻次近邻比的特征点视为左图特征点对应的右图特征点,以此类推,我们得到了粗匹配集。当然,这粗匹配集里存在错匹配对。所以我们要用RANSAC算法精确提纯数据并且计算正确地模型后,最后要进行图像配准。最近邻次近邻比值范围为从0到1之间。我们可以选取距离比阈值为0.8,也就是如果比值比0.8大的时候,我们拒绝该匹配对,如果小于0.8我们视为正确地匹配对。如果我们选取更小的最近邻次近邻比值,比方0.5,或者更小,这时候我们最终得到的匹配对中正确地匹配对占比很高,而且这时候正确匹配的损失也不多,这样一来,保存的正确匹配〔还是存在错误的匹配点对,但是比例小了很多〕数目会少,不过,匹配对集变得更加稳定。在实验中证实了这理论,而且从实验结果来得到一半选取0.3到0.6就可以到达我们所需要的精度。2.6.3RANSAC〔RANdomSAmpleConsensus〕算法所谓RANSAC〔RANdomSAmpleConsensus〕算法是随机抽样一致性。它是一种非常简单而且被广泛使用的算法,是由Fishler和Bolles最先提出的很好用的算法。下面简单介绍RANSAC算法的一般原理。1)RANSAC算法的概述:输入:包含很多局外点〔噪声,感染。可以看成不适合正确模型的数据点〕的观测数据。输出:正确地模型〔或者个别参数〕或者模型参数。RANSAC理念很简单就是首先随机抽取观测数据子集,我们假设视为这子集就是“内点〞〔局内点或者局内数据〕。然后用这子集进行相关的拟合来计算模型参数〔或者估计函数〕。找到这模型〔或者函数〕以后,利用观测点〔数据〕进行是否正确,如果求出来的模型能够满足足够多的数据,我们视为很正确的数据。最后我们采纳。但是,如果不适合,也就是说求出来的模型〔或者函数,也可以是模型参数〕满足的数据点很少,我们就放弃,从新随机抽取观测数据子集,再进行上述的操作。这样的运算进行N次,然后进行比拟,如果第M〔M<N〕次运算求出来的模型满足的观测数据足够多的话,我们视为最终正确的模型〔或者称之为正确地拟合函数〕。可见,所谓的随机抽样一致性算法很适合对包含很多局外点〔噪声,干扰等〕的观测数据的拟合以及模型参数估计。当然最小二乘法也是不错的算法,但是,最小二乘法虽然功能强大,不过,它所适合的范围没有RANSAC那么广。RANSAC算法具体伪代码伪码形式的算法如下所示:

输入:

data:一组观测数据

model:适应于数据的模型

n:适用于模型的最少数据个数

k:算法的迭代次数

t:用于决定数据是否适应于模型的阀值

d:判定模型是否适用于数据集的数据数目

输出:

best_model:跟数据最匹配的模型参数〔如果没有找到好的模型,返回null〕

best_consensus_set:估计出模型的数据点

best_error:跟数据相关的估计出的模型错误

//初始化

iterations=0

best_model=null

best_consensus_set=null

best_error=无穷大//进行RANSAC算法

while(iterations<k)

maybe_inliers=从数据集中随机选择n个点

maybe_model=适合于maybe_inliers的模型参数

consensus_set=maybe_inliers

for(每个数据集中不属于maybe_inliers的点〕

if(如果点适合于maybe_model,且错误小于t〕

将点添加到consensus_set

if〔consensus_set中的元素数目大于d〕

已经找到了好的模型,现在测试该模型到底有多好

better_model=适合于consensus_set中所有点的模型参数

this_error=better_model究竟如何适合这些点的度量

if(this_error<best_error)

我们发现了比以前好的模型,保存该模型直到更好的模型出现

best_model=better_model

best_consensus_set=consensus_set

best_error=this_error

增加迭代次数

返回best_model,best_consensus_set,best_error

RANSAC算法的可能变化包括以下几种:

〔1〕如果发现了一种足够好的模型〔该模型有足够小的错误率〕,那么跳出主循环。这样可能会节约计算额外参数的时间。

〔2〕直接从maybe_model计算this_error,而不从consensus_set重新估计模型。这样可能会节约比拟两种模型错误的时间,但可能会对噪声更敏感。

参数我们不得不根据特定的问题和数据集通过实验来确定参数t和d。然而参数k〔迭代次数〕可以从理论结果推断。当我们从估计模型参数时,用p表示一些迭代过程中从数据集内随机选取出的点均为局内点的概率;此时,结果模型很可能有用,因此p也表征了算法产生有用结果的概率。用w表示每次从数据集中选取一个局内点的概率,如下式所示:

w=局内点的数目/数据集的数目

通常情况下,我们事先并不知道w的值,但是可以给出一些鲁棒的值。假设估计模型需要选定n个点,wn是所有n个点均为局内点的概率;1−wn是n个点中至少有一个点为局外点的概率,此时说明我们从数据集中估计出了一个不好的模型。(1−wn)k表示算法永远都不会选择到n个点均为局内点的概率,它和1-p相同。因此,

1−p=(1−wn)k

我们对上式的两边取对数,得出

(2.7)

值得注意的是,这个结果假设n个点都是独立选择的;也就是说,某个点被选定之后,它可能会被后续的迭代过程重复选定到。这种方法通常都不合理,由此推导出的k值被看作是选取不重复点的上限。例如,要从上图中的数据集寻找适合的直线,RANSAC算法通常在每次迭代时选取2个点,计算通过这两点的直线maybe_model,要求这两点必须唯一。

为了得到更可信的参数,标准偏差或它的乘积可以被加到k上。k的标准偏差定义为:

(2.8)4〕RANSAC算法的优点与缺点RANSAC的优点是它能鲁棒地估计模型参数。例如,它能从包含大量局外点的数据集中估计出高精度的参数。RANSAC的缺点是它计算参数的迭代次数没有上限;如果设置迭代次数的上限,得到的结果可能不是最优的结果,甚至可能得到错误的结果。RANSAC只有一定的概率得到可信的模型,概率与迭代次数成正比。RANSAC的另一个缺点是它要求设置跟问题相关的阀值。

RANSAC只能从特定的数据集中估计出一个模型,如果存在两个〔或多个〕模型,RANSAC不能找到别的模型。例子左图为包含局外点的数据右图为用RANSAC算法求出的模型内点图2.9RANSAC算法示意图6)应用方面它适合估计包含很多局外点的观测数据的模型,鲁棒性好。所以经常在计算机视觉方面被广泛利用,特别是图像配准和立体摄像机内外参数估计。2.7本章小结本章里着重介绍了有关SIFT算法的原理以及提取,描述子的生成方法等。为后续的内容奠定了根底。最后介绍了RANSAC算法的一般原理〔通用方法〕。第三章基于RANSAC算法的图像拼接系统设计本章将介绍从左右两个摄像头中拍下来的图片的无缝拼接过程,以及用OpenCV开源库来设计拼接系统的时候所利用和改良的各种算法,以及遇到的困难和克服的方法。3.1对开源库OpenCV的简单的介绍本论文所采用的程序设计语言为VisualStudio2023和开源库OpenCV2.3.1。OpenCV(OpenSourceComputerVisionLibrary)于1999年由Intel建立,如今由WillowGarage提供支持。OpenCV开源库是一个基于〔开源〕发行的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上。他轻量级而且高效由一系列C函数和少量C++雷构成,同时提供了Python、Ruby、Matlab等语言的接口,实现了图像处理和计算机视觉方面的很多同用算法。至今最新版本为2.4.5。OpenCV拥有包括300多个C函数的跨平台和中、高层API,不依赖于其他的外部库一一尽管也可以使用某些外部库。OpenCV的历史开展1999年1月,CVL工程启动。主要目标是人机界面,能被UI调用的实时计算机视觉库,为Intel处理器做了特定优化。2000年6月,第一个开源版本OpenCValpha3发布。2000年12月,针对linux平台的OpenCVbeta1发布。期间,继续各种研究。。。2006年,支持MacOS的OpenCV1.0发布。2023年9月,OpenCV1.2〔beta2.0〕发布。2023年10月1日,Version2.0发布。2023年12月6日,OpenCV2.2发布。2023年8月,OpenCV2.3发布。2023年4月2日,发布OpenCV2.4.OpenCV提供的视觉处理算法非常丰富,并且它局部以C语言编写,加上其开源的特性,处理得当,不需要添加新的外部支持也可以完整的编译链接生成执行程序,所以很多人用它来做算法的移植,OpenCV的代码经过适当改写可以正常的运行在DSP系统和单片机系统中。而且对外开放的,也就是说非商业应用和商业应用都是免费的。3.2开发环境的搭建〔VS2023+OpenCV2.3.1〕第一步:解压OpenCV2.3.1软件包装在D盘上。然后把软件的路径拷到电脑环境变量PATH里面。第二部:属性页下面的VC++里设置好包含目录和库目录。就把OpenCV的lib文件夹 和include文件夹的路径拷到里面去。图3.1然后点击链接器下面的输入,然后再点击右边的附加依赖项,点击最右边的图标后出来的窗口中输入OpenCV的.lib文件。这样完成了VS2023和OpenCV2.3.1的搭建。图3.23.3实时采集图像本文所利用的摄像头是两个USB摄像头。两个摄像头的像素数均为2MEGApixel。首先要设置禁用笔记本自带的摄像头,这样能够无错误的运行两个USB摄像头。首先为了能够实时采集图像我们需要声明两个CvCapture变量。利用cvCreateCameraCapture函数从摄像头读取每个帧信息。CvCapture*cap1;CvCapture*cap2;利用cvCreateCameraCapture函数从摄像头读取每个帧信息。然后需要从这些读取的每次两个帧转换成两个图像处理有力的数据型。在OpenCV里Mat就是处理图像的变量。Matframe1,frame2;然后利用cvQueryFrame函数从cap变量转换成Mat变量,转好了就显示在屏幕上,这样能够知道是否正常运行。3.4图像变换模型〔矩阵〕从两幅图像的SIFT特征空间中找到包含少量局外点的观测数据〔粗匹配的特征匹配对集〕中,我们要用变换模型来求出两幅图像之间的关系。因为两个USB摄像头的相对位置不同,也就是说他们在横向有固定的距离,好比说人的两个眼睛,所以从这两个摄像头拍下来的〔同步实时采集〕图片中存在视差。也就是两幅图像各有共同区域。所以我们需要一个图像利用变换矩阵变换到另一幅图像坐标下。这样,我们能够实现统一视点下的图像。下面来简单介绍刚体变换、仿射变换和投影变换。3.4.1刚体变换矩阵图像的大小跟图像像素点位置关系都不变。这样的变换矩阵如下所示:(3.1)其中是图像旋转的角度,h2和h5为平移量。这矩阵的自由度为3,理论上选择至少两队点就可以确定H矩阵了。3.4.2仿射变换如果一幅图像中的一条直线经过变换后变换到另一幅图像上,仍然是直线,而且保持平行关系,那么这样的变换成为仿射变换,变换矩阵形式为如下:(3.2)如果一幅图像中的一条直线经过变换后变换到另一幅图像上,仍然是直线,而且保持平行关系,那么这样的变换成为仿射变换,变换矩阵形式为如下:看上面的矩阵形式就可以容易知道,这仿射变换矩阵有6个自由度。所以,理论上选择至少三对不共线的控制点〔在本论文中为SIFT特征点〕就可以解出所有的参数。3.4.3投影变换从一个图像平面到另外一个图像平面的过程,我们称为投影变换。变换矩阵为如下:(3.3)可见,上面的矩阵具有8个自由度。所以,我们选择的时候,至少要选择4对匹配对,这样我们能够求出H矩阵。3.5基于RANSAC的图像拼接这一节着重介绍从左右摄像头中读取的两幅图像的拼接技术以及其实现过程。左右摄像头每隔45ms采集一次,而且同步采集的。图像拼接算法流程如下:右摄像头左摄像头右摄像头左摄像头图像预处理图像预处理图像预处理图像预处理SIFT特征点提取SIFT特征点提取SIFT特征点提取SIFT特征点提取进行特征点匹配进行特征点匹配获取粗匹配后的获取粗匹配后的特征点粗匹配对集利用利用RANSAC算法进行透视矩阵参数估计利用求出来的透视矩阵进行图像配准利用求出来的透视矩阵进行图像配准图3.3OpenCV提供了良好的通用算法。其中已经有封装好的SIFT特征点提取函数,我们通过上一节的理论内容了解到了SIFT特征提取理论以及提取方法。在这儿不用在表达。下面通过简单的代码来看看已封装好的SIFT特征点提取函数的利用方法以及内部参数设置。利用OpenCV里面的cvtColor函数来对已采集的两幅〔左右〕图像进行预处理,这儿的预处理就是把已经读入进来的两幅彩色图像转换成灰度图。这时候三个通道色度的权值是默认的,因为调整这些参数〔权值〕并不影响程序的速度以及最后结果。然后对两幅灰度图进行SIFT特征点提取。这时候用SiftFeatureDetector类。首先声明SiftFeatureDetector类的类变量。我们在这儿定为detector。用vector<KeyPoint>模板类,先声明该类的变量。我们这儿声明keypoint为该模板类的变量。然后用detector变量的成员函数detect来检测第一幅和第二幅图像的SIFT特征点。这样我们就获取了两幅灰度图的SIFT特征点集,而且各图片的SIFT特征点存储在keypoint1,keypoint2变量里面。在这两个变量里头的SIFT特征点数各不相同。因为左右摄像头的内外参数不同,而且他们所读取的图像中除了共同局部其他局部包含的SIFT特征点不一样。用SiftDescriptorExtractor类,声明extractor变量,然后利用其变量的成员函数compute进行描述符的产生〔两个图像的描述字存储在descriptor1,descriptor1里面〕。进行了上面的编程过程以后,我们要对其进行粗匹配。用BruteForceMatcher<L2<float>>模板类,声明该类的变量为matcher。利用matcher变量的成员函数match进行粗匹配。得到vector<DMatch>模板类变量matches。该变量存储着两个SIFT特征点集之间粗匹配后的状态。它存储着粗匹配后的粗匹配对数和具体对应关系。图3.4原图像图3.5图像预处理后进行SIFT特征点提取图3.6SIFT特征点粗匹配为了提纯数据,我们要利用OpenCV自带的函数findFundamentalMat来进行RANSAC提纯操作。为了让读取粗匹配数据,首先要使用Point2f型变量Point1,Point2存储matches里的粗匹配对信息。赋值过程进行完了以后用上述的函数findFundamentalMat来进行提纯数据过程。这样下来,我们就得到了vector<uchar>型变量m_ransacstatus,这变量里面以数组的形式存储着提纯数据过程以后〔过滤〕的匹配状态。然后利用m_ransacstatus[i]的值,确认是否可以利用在后续的程序。如果其动态为0表示外点,如果是1表示内点。不过,这样计算下来的最后匹配对里还存在错误匹配点。所以我们要用RANSAC算法进行透视变换矩阵参数的估计。图3.7RANSAC提纯特征点后的匹配状态〔还是存在少量错误匹配对〕RANSAC〔随机抽样一致性〕算法的具体的一般原理已经在上述过。在这儿不用再表达。下面是本论文所设计的改良RANSAC算法流程图。随机抽取四对匹配点随机抽取四对匹配点检查是否存在任意的三个点共线检查是否存在任意的三个点共线存在不存在利用四对匹配点的x,y坐标建立8元1次线性方程组利用四对匹配点的x,y坐标建立8元1次线性方程组利用高斯消元法对已建立的线性方程组求解。利用高斯消元法对已建立的线性方程组求解。用上面求出来的透视矩阵参数计算满足其模型的匹配对数用上面求出来的透视矩阵参数计算满足其模型的匹配对数图3.8看上面的流程图不难发现这样计算出来的模型不一定很正确,所以,我们要进行250次同样的计算,这时候每次记录每次计算出来的模型参数值以及对应的内点数。250次反复进行以后根据满足模型的内点数来评估模型的好坏程度。显然,满足模型参数〔透视矩阵参数〕的内点数最多的那一次的模型就是我们所期待的最好的模型。图3.9用RANSAC算法后的图像拼接用OpenCV来编程设计匹配系统的时候遇到过的问题以及解决的方法:确保建立的线性方程组系数矩阵的秩为8.随机抽取四对匹配对后建立8元一次线性方程组。本人在本论文中所编程的求解线性方程组的方法为高斯消元方法。如果要能够顺利求解,要进行检查线性方程组系数矩阵的对角线的元素是否等于零。因为至少有一个主对角元素等于零,就会崩溃,因为计算机无法进行除以零的计算。所以,本人在这问题上,为了能够进行求解,在理论上主对角线上等于零的行跟不为零的行进行交换,这样的交换对整个计算过程起不了什么作用,而且这样求出来的解仍然不失一般性,符合要求的。拼接图片中出现线条,还出现两幅图片的交界局部不融合拼接后结果图中会出现线条,这不属于图片,是没有找到最正确的模型而导致出现这样的线条。这样的错误可以优化代码来实现,而且已经实现了。两幅图片中间可以看出交叉线,要想方法解决这错误,为了解决这问题,采取了加权平均法来进行无缝拼接。所谓的无缝拼接无疑是进行插值来消掉线条〔图像变形而导致的〕。主要的插值方法有前向插值和后向插值。前向插值法是一个点的色度值映射在其映射点周围四个点上,这样就容易消掉线条等不均匀现象。但是,这样的方法不能有效地实现光度的变化,因为两个通用USB摄像头中读取的图像都存在着显眼的光度差异,也就是说摄像头虽然型号一样,但做不到他拍下来的图像质感一样。所以,要采取加权平均算法来解决拼接后容易看出的缝条。3.6本章小结 本章里介绍了本论文最核心的两幅实时采集的图像的拼接以及配准方法。还提出了其实现过程中遇到的问题以及解决方法。介绍了利用RANSAC算法估计透视矩阵参数的方法。最后着重介绍了本论文所采取的配准方法。第四章基于OpenCV的摄像头标定以及测距针对双目视频图像跟踪系统研制过程中的摄像机标定步骤,分析了计算机视觉函数库OpenCV中的摄像机模型,其中的非线性畸变和径向畸变,采用Bouguet角点提取算法,实现了基于OpenCV的摄像机标定。该算法具有很高的标定精度和计算效率、良好的跨平台移植性,可以满足双目视频跟踪系统的需要。4.1摄像机标定一般模型〔针孔相机模型〕说到双摄像头测距,首先要看看针孔相机模型测距原理。图4.1.双摄像头模型俯视图图4.2,双摄像头模型立体视图图1解释了双摄像头测距的原理,书中Z的公式如下:(4-1)(4-2)在OpenCV中,f的量纲是像素点,Tx的量纲由定标棋盘格的实际尺寸和用户输入值确定,一般总是设成毫米,当然为了精度提高也可以设置为0.1毫米量级,d=xl-xr的量纲也是像素点。因此分子分母约去,z的量纲与Tx相同。图4.2解释了双摄像头获取空间中某点三维坐标的原理。空间中某点的三维坐标就是(X/W,Y/W,Z/W)。因此,为了精确地求得某个点在三维空间里的距离,我们需要获得的参数有焦距f、视差d、摄像头中心距Tx。如果还需要获得X坐标和Y坐标的话,那么还需要额外知道左右像平面的坐标系与立体坐标系中原点的偏移Cx和Cy。其中f,Tx,cx和cy可以通过立体标定获得初始值,并通过立体校准优化,使得两个摄像头在数学上完全平行放置,并且左右摄像头的cx,cy和f相同(也就是实现图2中左右视图完全平行对准的理想形式)。而立体匹配所做的工作,就是在之前的根底上,求取最后一个变量:视差d(这个d一般需要到达亚像素精度)。从而最终完成求一个点三维坐标所需要的准备工作。在清楚了上述原理之后,我们也就知道了,所有的这几步:标定、校准和匹配,都是围绕着如何更加精确获得f、d、Tx、Cx、Cy而设计的。4.2基于OpenCV的测距原理用上面的理论进行基于OpenCV摄像头标定。如果按照LearningOp

温馨提示

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

评论

0/150

提交评论