双目立体视觉测距系统的研究
姓名:刘建坡申请学位级别:硕士专业:电路与系统指导教师:胡方明
20100101
摘要摘要双目立体视觉距离测量系统在三维重构、非接触式精确定量测量和危险场景感知等领域有着广阔的应用前景。本文研究了双目立体视觉测距系统的理论并将系统在基于FPGA的嵌入式平台上实现。’本文首先针对摄像机成像的特点,介绍了图像坐标系、摄像机坐标系和世界坐标系,并在此基础上提出了双目立体视觉距离测量的理论。接下来本文研究了标定算法,给出了标定实验的结果。最终提出了以人眼瞳孔为特征点,先定位人脸区域,再定位瞳孔的方法,这样就可以利用标定结果和瞳孔图像坐标重构世界坐标系下的瞳孔坐标。本课题选用基于FPGACycloneIIEP2C20F484C7的嵌入式开发板DEl作为嵌入式实现平台,辅以SDRAM、拨码开关、LED和自定义外部加速设备实现嵌入式双目立体视觉测距系统。鉴于嵌入式处理器NiosII处理速度较慢,不能满足实时性需求,本文提出了两种提高处理速度的方法:①硬件逻辑实现IEEE规格浮点数取整运算,将该模块作为自定义指令添加进ALU。②设计图像处理加速外设,使用硬件逻辑完成边缘检测等功能,然后通过设计主设备和从设备接口模块将外设挂载在Avalon总线上,使NiosII可以调用该设备加速图像处理。最终实验证明该方法使处理速度提高了约536倍。本文实现的嵌入式双目立体视觉测距系统具有操作简便和测量准确等优势,适用于移动环境以及对成本和实时控制要求较高的场合。关键字:双目测距嵌入式系统NiosII浮点数取整硬件加速AbstractAbstractDistancemeasurememsystemasofbinocularstereovisioniSwidelyusedindomainssuchsensetri-dimensionalreconstruction,untangentprecisemeasurementandofdangerousscene.Inthisthesis,thetheoryofdistancemeasurementsystemisstudiedandthesystemonisrealizedinembeddedsystemwhichisbasedonFPGA.Atfirst,basedofthecharacteristicsofcameraimagingmodule,referenceframesonimage,cameraandrealworldisintroducedinthisthesis,theprincipleandtheoryvisiondistancemeasurememofbinocularstereoisputforwardulteriorly.ThenaScalibrationarithmeticandexperimentisstudied.Takehumaneyepupilfirstlythispaperlocatefeaturepoint,humanfaceareawhichisusedtofindthecoordinatesofeyepupilbydetectingcircularity.Oncewehavecalculatedthecoordinatesofeyepupilinimageandcalibrationresult,it’Spossibletoreconstructionthecoordinatesofeyepupiloninrealworld.Inthisthesis,DE1whichisbasedistakenasFPGACycloneIIEP2C20F484C7theembeddedplatform.AsembeddedprocessorNiosIIistooslowtomeettoacceleraterequirementofrealtimeprocessing,thispaperintroducestwomethodsthesystem:designhardmoduletotranslateIEEEfloatnumberintointegerandaSacustominstruction,themoduleisaddedintoALU;designimageprocessingdeviceofedgedetectingetcandmountitonAvalonBusbydesigningAvalonmasterandslavemoduleinordertomakeitaccessibleforembeddedprocessorNiosII.Experimentsdemonstratethatthismethodis536timesfasterthanpuresoftwareimplement.Distancemeasurementsystemofbinocularstereovisionhasprecisemeasurementotherfieldswhicharecharacteristicofandeasyimplement.ItCanstrictwithcostbeusedinmobileenvironmentoperation.andandreal—timeKeywords:BinocularstereovisionacceleratingEmbeddedsystemNiosIIHardware西安电子科技大学学位论文创新性声明秉承学校严谨的学分和优良的科学道德,本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不包含其他人已经发表或撰写过的研究成果;也不包含为获得西安电子科技大学或其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中做了明确的说明并表示了谢意。申请学位论文与资料若有不实之处,本人承担一切的法律责任。本人签名:塞I连垄嬖日期丝!兰:!!!Z西安电子科技大学关于论文使用授权的说明本人完全了解西安电子科技大学有关保留和使用学位论文的规定,即:研究生在校攻读学位期间论文工作的知识产权单位属西安电子科技大学。学校有权保留送交论文的复印件,允许查阅和借阅论文;学校可以公布论文的全部或部分内容,可以允许采用影印、缩印或其它复制手段保存论文。同时本人保证,毕业后结合学位论文研究课题再攥写的文章一律署名单位为西安电子科技大学。(保密的论文在解密后遵守此规定)本学位论文属于保密,在一年解密后适用本授权书。日期丝!!!!。13*A-签g:纠迂盈导师签名:五i丛型!刍同期釜塑!:211翌第一章绪论第一章绪论1.1课题研究背景视觉是人类观察世界、认知世界的重要功能手段,人类感知外部世界主要通过视觉、触觉、听觉和嗅觉等感觉器官,其中80%的信息是由视觉获取的flJ。计算机视觉是人类利用计算机实现人的视觉功能——对客观世界三维场景的感知、识别和理解,计算机视觉是一个相当新而且发展迅速的研究领域。在对生物视觉系统的研究中,人们早就注意到,几乎所有具有视觉的生物都有两只眼睛。用两只眼睛同时观察物体,会有深度或远近的感觉,我们称之为视差12J。因此在计算机视觉系统中,也常用两台或多台摄像机从两个或多个视点去观察同一场景,从而获得在不同视角下的一组图像,然后通过同一场景点在不同图像中的视差,推断出场景中目标物体的空间几何形状和位置,这种方法称为立体视觉。它是计算机视觉的一个重要分支,也是计算机视觉的核心研究内容之一。双目立体视觉理论建立在对人类视觉系统研究的基础上,通过双目立体图像的处理,获取场景的三维信息,其结果表现为深度图,再经过进一步处理就可得到三维空间中的景物,实现二维图像到三维空间的重构。Marr和Poggio以及Grimson[3l最早提出并实现了一种基于人类视觉系统的计算视觉模型及算法。双目立体视觉系统中,获取深度信息的方法比其它方式较为直接,它是被动方式的,因而较主动方式适用面宽,这是它的突出特点。双目视觉是最接近于人类视觉的三维数据恢复方式,也是计算机被动测距方法中最重要的距离感知技术。双目视觉系统的工作原理是基于人眼视差的原理,它的构成包括硬件系统和软件系统两方面。双目立体视觉技术越来越广泛的应用于各个领域,特别是在许多人类视觉无法感知的场合,如精确定量感知、危险场景感知以及不可见物体感知等,计算机立体视觉更显示出其无可比拟的优越性。由此可以看出,双目立体视觉属于影像的重构技术,具有非接触性测量、实施简易的特点,在很多领域都有着广阔的应用前景,对其基本理论的研究也具有重大的理论意义和实际意义。1.2国内外研究现状虽然双目立体视觉经过二十多年的研究,其技术已经有了很大的发展。但无论是从视觉生理的角度,还是从实际应用方面来看,现有的双目立体视觉技术还处在十分不成熟的阶段。这不仅仅是理论发展与计算机硬件水平的原因,而且也2双目立体视觉测距系统的研究与人类生理学有关。由于人类对自身的视觉机理的了解还十分有限,这无疑给计算机视觉技术的发展带来了一定的限制。作为双目立体视觉核心的立体匹配,在理论上和技术上都存在着很多问题。因此,双目立体视觉问题的彻底解决还有待于对人类自身视觉机理的深入研究。当然,经过多年的研究,双目立体视觉己经有了很大的发展,其性能不断提高,相关的理论不断地得到发展与完善,双目技术也逐渐走向实用化。双目体视目前主要应用于四个领域:机器人导航、微操作系统的参数检测、三维测量和虚拟现实【4J。在国外,法国Rouen大学的A.Bensrhair等人基于机器视觉系统就车辆检测提出新的算法,该方法的检测效果可靠性更高,同时对摄像机获取的车辆之间距离的计算更为准确【5】。韩INPohang科技大学在炼钢厂的无人驾驶起重机上安装视觉系统,为起重机吊运钢卷提供目标物体的具体空间信息【6J。日本冈山大学使用立体显微镜、两个CCD摄像头、微操作器等研制了使用立体显微镜控制微操作器的视觉反馈系统,用于对细胞进行操作,对种子进行基因注射和微装配等。麻省理工学院计算机系提出了一种新的用于智能交通工具的传感器融合方式,由雷达系统提供目标深度的大致范围,利用双目立体视觉提供粗略的目标深度信息,结合改进的图像分割算法,能够在高速环境下对视频图像中的目标位置进行分割17】。在国内,中国科学院自动化研究所研究的三维重建技术,采用自动关键点匹配、双目重建、表面三角化和三维点拼接技术,经过图像对提取,图像对关键点匹配,图像关键点的重建,三角化以及数据融合生成物体完整的三维结构瞪J。东南大学电子工程系基于双目立体视觉,提出了一种灰度相关多峰值视差绝对值极小化立体匹配新方法,可对三维不规则物体(偏转线圈)的三维空间坐标进行非接触精密测量。哈工大采用异构双目活动视觉系统实现了全自主足球机器人导航。火星863计划课题“人体三维尺寸的非接触测量”采用双视点投影光栅三维测量原理,由双摄像机获取图像对,通过计算机进行图像数据处理,不仅可以获取服装设计所需的特征尺寸,还可根据需要获取人体图像上任意一点的三维坐标。从当前的发展来看,其发展方向可归纳如下:(1)以全面的观点将双目立体视觉系统的各个模块联系起来。(2)由传统的双目视觉向多目视觉、完全静态的视觉向动态视觉发展,通过增加信息输入降低视觉计算的难度。(3)向智能化发展,建立基于知识的,模型的和规则的双目立体视觉方法。(4)算法向并行化发展,采用并行流水线机制和专用的信号处理器件,增强双目立体视觉系统的实用性。第一章绪论31.3双目立体视觉测距系统关键技术一个完整的双目立体视觉测距系统通常可分为摄像机标定、图像获取、图像预处理、目标检测与特征提取、立体匹配、三维重建等六个步骤【91。双目测距整体流程如图1.1所示。图1.I双目测距整体流程(1)摄像机标定摄像机标定是为了确定摄像机的位置、内部参数和外部参数,以建立成像模型,确定世界坐标系中物体点同它在图像平面上像点之间的对应关系。立体视觉的基本任务之一是从摄像机获取的图像信息出发计算三维空间中物体的几何信息,并由此重建和识别物体,而摄像机成像的几何模型决定了空间物体表面某点的三维几何位置与图像中对应点之间的相互关系,这些几何模型参数就是摄像机参数。一般情况下这些参数必须通过实验才能得到,这个过程被称为是摄像机标定。摄像机标定需要确定摄像机内部几何和光学特性(内部参数)和相对一个世界坐标系的摄像机坐标系的三维位置和方向(外部参数)。在计算机视觉中,如果使用多个摄像机,对每个摄像机都要校准。(2)图像获取双目立体视觉的图像获取是由不同位置的两台或者一台摄像机经过移动或旋转拍摄同一个场景,获取两幅不同视角的图像。双目立体视觉系统中,深度信息的获得是分两步进行的。(3)图像预处理二维图像由光学成像系统生成,包含了受环境影响各种各样的随机噪声和畸使图像变得更有利于计算机的处理,便于各种特征分析。(4)目标检测和特征提取目标检测是指从经过预处理的图像中提取待检测的目标物体。特征提取是指变,因此需要对原始图像进行预处理,以抑制无用信息、突出有用信息、改善图像质量。图像预处理的目的主要有两个:改善图像的视觉效果,提高图像清晰度;从检测到的目标中提取出指定的特征点。由于目前尚没有一种普遍适用的理论可运用于图像特征的提取,从而导致了立体视觉研究中匹配特征的多样性。目前,常用的匹配特征主要有区域特征、线状特征和点状特征等。一般来讲,大尺度特4双目立体视觉测距系统的研究征含有较丰富的图像信息,易于得到快速的匹配,但是在图像中的数目较少,定位精度差,特征提取与描述困难。而小尺度特征数目较多,但所含信息较少,因而在匹配时为克服歧义匹配和提高运算效率,需要较强的约束准则和匹配策略。良好的匹配特征应具有稳定性、不变性、可区分性、唯一性以及有效解决歧义匹配的能力。(5)立体匹配立体匹配是指根据对所选特征的计算,建立特征之间的对应关系,将同一个空间物理点在不同图像中的映像点对应起来。当空间三维场景被投影为二维图像时,同一景物在不同视角下的图像会有很大不同,而且场景中的诸多因素,如景物几何形状和物理特性、噪声干扰、光照条件和摄像机畸变等,都被综合成单一的图像中的灰度值【101。因此,要准确地对包含了如此之多不利因素的图像进行无歧义的匹配是十分困难的,至今这个问题还没有得到很好的解决。立体匹配的有效性有赖于三个问题的解决:寻找特征间的本质属性,选择正确的匹配特征及建立能正确匹配所选择特征的稳定算法。(6)深度确定当通过立体匹配得到视差图像之后,便可以确定深度图像,并恢复场景3.D信息。影响距离测量精度的因素主要有摄像机标定误差、数字量化效应、特征检测与匹配定位精度等。计算机视觉中实施三维空间的重构过程,是由几个主要的技术环节组成的,每个环节都有主要的影响因素和关键性技术。根据本文的研究对象和研究内容有如下几个方面:摄像机参数的标定方法、图像特征的选取、特征点的提取和三维重构方法。1.4主要研究工作和论文内容安排本文的主要任务是研究双目立体视觉中深度测量方法,以及相关算法的嵌入式实现。在PC平台实现了两个摄像头的联合标定,对左右摄像头采集到的数字图像进行处理,提取出入的右瞳孔的图像坐标,代入投影矩阵计算出特征点在世界坐标系中的坐标。最后使用友晶公司的嵌入式处理器NiosII开发板DEl验证了本课题。开发板的FPGA型号为AlteraCycloneII2C20,辅以七段数码管和LED实现人机交互。同时在嵌入式实现过程中采用了自定义指令、硬件加速等方法优化本设计,使之所占用的处理时间极大缩短,体现了NiosII处理器的优势。本文内容结构安排如下:第一章介绍了选题背景、研究现状以及双目立体视觉的关键技术。第二章对双目立体视觉距离测量系统进行理论分析。简要介绍摄像机成像模型,详细介绍了摄像机的标定原理和三维重构的原理。第一章绪论5第三章阐述了获取目标物体特征点的思想。首先介绍了人脸检测的研究现状和各种方法,重点介绍了机器学习、分类器检测的方法。然后简要介绍了OpenCv的应用。接下来在检测出脸部区域的基础上介绍了检测人的瞳孔以及定位瞳孔坐标的方法。最后将瞳孔坐标代入第二章得到的结论,得到实验结果。第四章首先简要介绍了所选用的嵌入式开发平台DEl和SOPC技术,然后介绍了各个模块的功能结构。最后详细介绍了算法嵌入式移植和OpenCv库移植的流程。第五章简要对比了PC机和嵌入式平台性能,详细介绍了使用自定义指令优化浮点数取整等运算和边缘检测硬件加速器的设计,最后给出了仿真结果。第六章对完成的实践工作做出总结,指出需要改进的地方和系统设计的前景。第二章双目测距理论分析第二章双目立体视觉测距理论阐述在本章中,将首先简要介绍摄像机成像模型,然后论述摄像机标定算法和标定流程,最后对双目立体视觉测距系统中的三维坐标重构进行了分析。2.1摄像机模型2.1.1摄像机工作原理数字图像是计算机视觉的出发点,而摄像机是最常用的图像获取装置,它应用对象广泛,有使用方便、灵敏度高、输入速度快等特点。摄像机通常由摄像镜头、摄像器件、电源、放大电路、偏转电路、同步信号发生电路等部分组成。按照摄像器件的组成,可将摄像机分为很多种。目前计算机视觉系统中常用的是电荷耦合元件(Charge.CoupledDevice)摄像机,简称CCD摄像机【l¨。其工作原理是在硅单晶片上生成很薄的一层二氧化硅,再于其上蒸发一层间距很小的铝电极条。加电压于电极上后,电场穿透二氧化硅薄层,并排斥硅中多数载流子,从而在电极下的硅单晶片上形成电荷耗尽层,又称势阱。当硅改变电极电压,使势阱内的电荷从一个电极传送到另一个电极,取出这移动的电荷就形成输出信号。扫描系统顺序扫描各像素,在一个扫描周期内,用较长的时间感光、积累电荷,用极短的时间读耿图像信号。由于图像各处的光亮不同,耗尽层内“捕捉”的电荷量存在差异,这就完成了图像的光电转换。2.1.2图像坐标系与世界坐标系摄像机采集的图像经过模数转换变成数字图像。对于基于灰度值的图像,每幅数字图像在计算机内为MXN数组,M行N列的图像中的每一个元素的数值即是图像点的灰度。在二维平面图像上定义直角坐标系u、v,坐标(u,v)代表该像素在数组中的列数与行数11引。所以,(u,v)是以像素为单位的图像坐标系的坐标。由于(u,v)只表示像素位于数组中的列数与行数,并没有用物理单位表示出该像素在图像中的位置,因而,需要再建立以物理单位表示的图像坐标系。该坐标系以图像内某一点O’为原点,X轴和Y轴分别与u,v轴平行。图像坐标系如图2.1所示。8双目立体视觉测距系统的研究oUO’一V.7y图2.1图像坐标系在X,y坐标系中,原点0’定义在摄像机光轴与图像平面的交点,该点一般位于图像中心处,但由于摄像机制作的原因,一般情况下会有些偏离。若O’在u,v坐标系中的坐标为(‰,%),每一个像素在X轴与y轴方向上的物理尺寸为dX,dy,则图像中任意一个像素在两个坐标系下的坐标关系可表示为下面的公式:甜=÷+Uo甜=一十AIZ‘lJ式(2—1)1,=姜+vo方”式(2-2)我们用齐次坐标与矩阵形式将上式表示为式(2—3)以方便使用:1,、瓦。材。0÷vo砂OOl】式(2-3)摄像机成像几何关系可由图2.2表示,其中O点称为摄像机光心,置轴和℃轴与图像的x轴与y轴平行,zc轴为摄像机的光轴,它与图像平面垂直。光轴与图像平面的交点即为图像坐标系原点。由点O与鼍,艺,Zc轴组成的直角坐标系成为摄像机坐标系。00’为摄像机焦距。第二章双目测距理论分析9Zc图2.2摄像机成像几何关系摄像机的摆放角度和位置是任意的,因此摄像机坐标系在环境中并不固定。我们需要在环境中选择一个基准坐标系来描述摄像机的相对位置,进而描述环境中的任何物体的位置,该坐标系称为世界坐标系。它由X,Y,Z轴组成。摄像机坐标系与世界坐标系之间的关系可以用旋转矩阵R与平移向量t来描述【l31。因此,如果空间中某一点P在世界坐标系与摄像机坐标系下的齐次坐标分别是(%,%,Z0,1)71与(鼍,圪,Zc,1)r,于是存在:XCXwXw圪zc=刚%=M场式(2—4)ZⅣZw11l其中R为3×3正交单位矩阵;t为三维平移向量,0=(O,0,O)r;M为4x4矩阵。空间任何一点P在图像上的成像位置可以用针孔模型近似表示,如图2.2,即任意点P和光心O的连线PO与图像平面xO’y的交点P’就是P点在图像平面上的投影。这种关系也称为中心摄影或透视投影。由比例关系有如下关系式:x=等式(2.5)2.1.3线性摄像机模型10双目立体视觉测距系统的研究y:盈Z7式(2.6)’、、一。7其中,(x,y)为P点的图像坐标,(K,屹,Zc)为空间点P在摄像机下的坐标。我们用齐次坐标与矩阵表示上述透视投影关系:0]00JX0=001Xc乙y,,Of0圪0lZcl式(2.7)将式(2-3)与式(2.4)代入上式,我们得到以世界坐标系表示的P点坐标与其投影点P的坐标(u,v)关系:料=雕U。0=Il标定实验。瓦1o11lloXwo万v0OOl㈥妒门叫xwxw场ZwlXw‘Vo00010。即-IllⅣ,llL%zwl=MIM2砀乙l=M%乙1式(2.7)其中,工=f/dx,‘=f/dy,M为3x4矩阵,称为投影矩阵。M。完全由Z,乃,‰,vo决定,由于正,‘,Uo,%只与摄像机内部结构有关,称这些为摄像机内部参数;M2完全由摄像机相对世界坐标系的方位决定,称为摄像机外部参数。要确定某一摄像机的内部参数矩阵、外部参数矩阵和投影矩阵,需对摄像机进行2.2摄像机标定摄像机标定就是根据一组己知其参考坐标系坐标和图像坐标系坐标的控制点来确定摄像机的内部参数和外部参数的过程。摄像机标定的目的是为世界坐标系中的三维物点和图像坐标系中二维像点之间建立~种映射关系,而空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系是由摄像机成像的几何模型决定的。利用这个几何模型,已知三维物点的世界坐标系坐标以及二维像点第二章双目测距理论分析的图像坐标,通过标定算法得到摄像机内部参数和外部参数的过程叫做摄像机标定。2.2.1摄像机标定的研究传统的摄像机标定方法是在一定的摄像机模型下,基于形状、尺寸已知的标定参照物,经过一系列数学变换求取摄像机模型的内部参数和外部参数。传统的标定方法需要使用精密加工的标定参照物,通过建立标定参照物上三维坐标己知的点与其图像点之间的对应,来计算摄像机的内外参数。标定参照物可以是三维的,也可以是二维共面的。在具有三维参照物的条件下,只需一幅图像,就可以标出摄像机的全部参数。然而包括整个测量空间的高精度三维标定参照物,其加工和维护非常困难。二维共面参照物的加工和维护十分方便,但一幅图不足以标出所有的摄像机参数。因此必须简化摄像机模型,或者从不同的角度,获取多幅图像来同时标出所有摄像机参数,但获取的图像的不同位置之间的相互关系也是标定过程的一个难点。传统的标定方法的优点在于可以获得较高的精度,但标定过程费时费力,不适用于在线标定和不可能使用标定参照物的场合从计算思路的角度看,传统的摄像机标定方法可以分为四类:利用最优化算法的标定方法、线型模型摄像机标定方法、考虑畸变补偿的两步法和采用更为合理的摄像机成像模型的双平面标定方法lI引。(1)利用最优化算法的标定方法。该方法假设摄像机的光学成像模型不复杂,包括成像过程中各种因素,通过求解线性方程的手段来求取摄像机模型的参数。但是这种方法完全没有把摄像机的非线性畸变问题计算进去,所以为了提高标定精度,需要使用非线性优化算法。该方法主要有两个方面的缺点:摄像机标定的结果受摄像机的初始给定值影响较大,如果初始值给的不恰当,通过优化程序得到标定结果会存在很大误差;优化程序的实时性差,无法实时得到标定结果。(2)线型模型摄像机标定方法。刻画世界坐标系与二维图像坐标系关系的方程一般说来是摄像机内部参数和外部参数的非线性方程。如果忽略摄像机镜头的非线性畸变并且把透视变换矩阵中的元素作为未知数,给定一组三维控制点和对应的图像点,就可以利用线性方法求解透视变换矩阵中的各个元素。这一类标定方法的缺点是标定过程中不考虑摄像机镜头的非线性畸变,标定精度受到影响。但是线型模型摄像机标定方法不需要利用最优化方法来求解摄像机的参数,具有很快的运算速度,能够实现摄像机参数的实时的计算。利用透视变换矩阵的摄像机标定方法被广泛应用于实际的系统,并取得了满意的结果【l孓№J。(3)两步法。两步法是先利用直接线性变换方法或者透视变换矩阵方法求解摄像机内部参数和外部参数,在考虑畸变因素的同时以求得的参数为初始值,并利12双目立体视觉测距系统的研究用最优化算法进一步提高精度的摄像机标定方法。Tsai所使用的摄像机标定方法就是一种典型的两步法。在该方法中,CCD阵列中感光元的横向间距和纵向间距被认为是已知的,其数值由摄像机厂家提供。该方法假设的摄像机内部和外部参数分别是:镜头畸变参数、等效焦距、非确定性标度因子(由摄像机横向扫描与采样定时误差所引起)、图像中心、三维空间坐标系与摄像机坐标系之间的平移向量和旋转矩阵。该方法只能校正径向畸变,不能扩展到校正其它类型的畸变,因为没有充分利用控制点提供的全部信息,也不是最优化的方法。但该方法的优点也很明显:假设摄像机的镜头的畸变是径向的,无论畸变如何变化,从图像中心到图像点方向的向量保持不变,这就减少了参数空间的维数,同时假设主点既是图像平面的中心,又是径向畸变的中心,这样就不必求解主点,而运用非线性搜索来估计其中三个参数,此外,整个求解方法只运用了线性关系,因此,该方法是相当可靠的。另外,主点位置的细微变化不会对三维测量造成很大的影响。此外,两步法的优点在于大部分摄像机的参数可通过线性方法求解出来,并且不受畸变影响,而需要通过反复迭代求解的参数相对于其它非线性求解方法要少一些。(4)双平面标定方法。以上方法都是基于针孔成像的计算机模型进行研究的,然而很多情况下这种线性模型不能准确描述摄像机成像的几何关系,如在近距、广角时的情形。为寻找更合理的摄像机模型,使之能更全面、更有效地表示CCD摄像机实际成像过程,Martins等首先提出了双平面模型(two-planemodel)。双平面模型与针孔模型的基本区别在于,双平面模型不像针孔模型那样要求所有投射到面像平面上的光线必须经过光心,只要给定成像平面上的任意一个图像点,便能够计算出两个标定平面上的相应点,从而确定了投射到成像平面上产生该图像点的光线。2.2.2两步法标定两步法是近年来发展迅速并取得成功的摄像机标定方法,其特点是将摄像机的内外参数与畸变参数分离,并利用最优化算法提高精度的摄像机标定方法。标定的结果常常取决于给定的初始值,如果初始值给定不合适,就很难得到正确的结果。直接线性变换方法或者投影矩阵方法可以利用线性方法求解摄像机参数,其缺点是没有考虑镜头的非线性畸变、精度不高。如果先利用直接线性变换方法或者透视变换矩阵方法求解摄像机参数,再考虑畸变因素,以求得的参数为初始值,利用最优化算法就可以进一步提高标定精度。基本处理思路如下g(1)不考虑畸变参数,选取图像中心附近畸变较小的点,将它们的世界坐标系坐标值和图像坐标值作为已知条件代入,由线性方法求解摄像机的内外参数。(2)利用优化算法提高摄像机内外参数的精度。第二章双目测距理论分析(3)将第二步计算出来的内外参数作为初始值,然后选取模板平面上的所有点,建立一个优化模型求得摄像机的内部参数,外部参数以及畸变参数的最优解。目前典型的两步法有Zhang的方法和Tsai的方法,我们重点介绍Zhang的方法。实际上,该方法是介于传统标定方法和自标定之间的一种方法,它只需要摄像机对一标定板在不同的方向拍摄图片即可进行标定。由于使用方便,准确率高,鲁棒性好,得到了广泛的应用。它在标定方法的灵活性以及准确性方面都作出了较大突破。但是此方法也有一定的适用范围。由于标定得到的内外参数矩阵是针对摄像机的每一个状态的,也就是说当摄像机发生平移或旋转运动时,之前所标定的参数是无效的。所以,Zhang的方法只能用于摄像机静止的情况下,比如固定场景监测或者机械加工流水线。根据针孔成像原理,将式(2.7)中由世界坐标系点到图像坐标系点的齐次变换写成如下形式【l7J:Xwxw朴小明场Z甲l=Ap,r2r3r4】%Zwl式(2.8)为方便计算,取模板所在平面为世界坐标系的Z=0平面。用I表示R的第i列向量。那么对于模板平面上的点都有:Xw廿叱吃吩这里令面=【xY%01=彳【‘r2式(2—9)l】71,鬲=【甜v1]r则上式写为:sm=HM式(2-10)啊:绣:l啊,其中:H=彳hr2啊。I式(2-11)f】=【拐如绣】=l镌。如:吃,ll魄t鸭,jH被称为单应性矩阵或投影矩阵,是模板平面上点和它的像点之间的一个映射,如果己知模板点的空间坐标和图像坐标,那么就已知m和M,可以求解单应性矩阵,而且每幅模板的图像都对应一个单应性矩阵。下面讨论求解单应性矩阵的方法。由式(2-lO)可以推出:14双目立体视觉测距系统的研究Is材=^IX+啊2】,+啊3{sV=%lX+红2J,+鸭3【s=呜lx+吃2Y+1所以有:式(2-12)甜:—/鼍,X+]h—2Y+hu魄lx+呜2】,+1鬼lx+忽2】,+1~红lX+红2】,+吃3V=—=L————』=————=将分母乘到等式左边,则有:式(2-13)甓:麓麓臻冀Y乏【V.聊%l+V,7毛2+’,=红lx+%2+吃3又令:蛔4,。7h’=【矗。扛:啊,%。/'22k绣。h32】r则:式(2.15)l0U一-YXEu一-:0y呈1l0xy0Xlr1—1己Y一1,】,v;:I办。=。一1,I式c2一·6,’、多个对应点的方程叠加起来可以看成Sh’=0,则该方程的最dx--乘解即是S7’S最小的特征值所对应的特征向量。将该向量归一化即得到要求的h‘,进而得到H。但是这样线性解法得到的解通常都不是最优的,可以利用上面两组等式中的任意一组,构造评价函数,用Levenberg.Marquarat算法进一步求更精确的计算结果。这样就得到了图像和模板平面问的单应性矩阵。在求取单应性矩阵后,我们进一步要求得摄像机的内外参数。首先令忽表示H的每一列向量,需要注意到上述方法求得的H和真J下的单应性矩阵之间可能相差一个比例因子,则式(2.11)中的H可写成:【啊%鸭】=A彳【吒眨f】式(2—17)又因为‘和吒是单位正交向量,即‘71,i=巧乏=1,且‘7’r2=0,所以有:砰么。A叫吃=0式(2.18)第二章双目测距理论分析巧么。A‘1啊=h;A玎A一红式(2—19)l蜀。蜀:蜀,IB=A玎A~=l岛lB2垦3l式(2-20)LB。垦:忍sJb=[且.且:垦:骂,垦,B,】7x-£(2·21)令H的第i列向量为吃=【忽,曩:7jI,】,则红7’耽=圪7’b式(2-22)其中巧=[曩。乃。岛.乃:+曩:哆。Jjl:嘭:魄。嘭。+哆.勺,呜。嘭。+魄,勺,红,吃,]7将内参数的两个约束写成关于b的两个方程为:[Ki堡吆]6=。式c2-23,Vb=0式(2.24)其中,V是一个2n×6的矩阵,如果聍≥3,则可以列出6个以上的方程,从而解出带有一个比例因子的b,因为B=ZA_r彳~,利用choleski分解就可以得到内部参数,然后利用内部参数矩阵A和单应性矩阵H,对每幅图像计算它的外部参数,公式如下:11=九彳-1啊,吒=九么.1红,吩=‘×眨卜‘1¨2南2南础2乏5’摄像机的内部参数和外部参数都已经求解出来,但是通过以上方法求得的结果并不是最优的,还需要采用极大似然估计对结果进行优化。对于多幅同一模板从不同视角拍摄的图像,假设每幅图像中有m个标定点,每个标定点的数据都包取}J直体视觉刹距系统的研究含独立同分布的噪声。建立目标函数如式(2—26)。…捌%一;c绷圳2式(2-26,其中,%是第i幅图像中第j点在图像上的坐标,A为初始求解的内参矩阵-作为初始值.总和‘分别是初始求解的第i幅图像坐标系的旋转矩阵和平移矩阵,吖,是第i幅图像中的第j个点的世界坐标,扁(一,足,‘,M,)是通过投影模型求解得到的像点坐标。这是一个典型的非线性最小二乘问题,使用Levcnberg-Marquarat算法即可求得稳定解。2.2.3标定实验本文的标定对象为两只相对位置固定的摄像头。采用一张8×8的棋盘平面作为标定模板,正方格的边长为228mm。实验中将模板平面放在两个摄像头的视野中,采集像素为640×480的图像。然后调整模板的角度和位嚣,左、右摄像头分别采集I‘张图片。左、右摄像头采集到的第一张标定图片如图23所示。酴趱瓣鞯如图2.4所示。圈2.3标定左右摄像机采集的图片图像采集完成后,用于标定的图片以BMP格式存储在讨算机中。计算机执行标定程序,读入图像,分别对左、右摄像头采集到的图像检测角点坐标,然后利用上述两步法求解投影矩阵、内部参数矩阵和外部参数矩阵。标定程序流程图第二章双目测距理论分析17图2.4标定程序流程图实验中对图2.3采集的图像进行角点检测得到的结果如表2.1所示。18双目立体视觉测距系统的研究表2.1角点检测结果表角点号12345678910左图像坐标u38741218722l392394402403403372左图像坐标v23823914514814217616l186344344右图像坐标U178204334336326330404380445441右图像坐标V227227167187164190296294138158左摄像头标定得到的内部参数矩阵为:一631一224l一0.1120l0783.0046O395O0O21,j9500O1右摄像头标定得到的内部参数矩阵为:0779.0734O2Jl9500O21J95OO0l对图2.3,左摄像头的外部参数矩阵和投影矩阵分别为:0.97800.0472-0.203l-0.1759-0.3361—O.925260.8758-1.0942699.5626IlI—ll0.9406I—O.3204Ll—189.5163lIIll695.9415_432.4996—11.6666-0.2031-484.7998--0.92522.7086e+51.6668e+5699.5626l659.7647lIl一0.3204对图2.3,右摄像头的外部参数矩阵和投影矩阵分别为:1I0.08040.94490.9730-5.49050.23050.2160-0.327l-0.9199—127.2177一10.4821IIl1Il一0.3171695.7233I第二章双目测距理论分析19一929824.282950.92760.2305-127.2376-475.1793--0.91991.2414P+5]1.584.5e+56957233.60I2引拍钾"毋刀n●弱酏Ⅲ一jI2.3双目立体视觉测距系统的三维坐标重构双目立体视觉测距系统中存在左右两个摄像机,需要对两个摄像机进行联合标定。虽然对于指定的摄像机而言,每次标定时的内部参数可以认为是不变的,但是外部参数会随着标定模板选取的不同而变化,即最后得到的投影矩阵也会因标定模板的不同而产生改变。实验中首先固定两个摄像机的位置,确保两个摄像机的世界参考坐标系一致,然后采用上一节所述标定算法进行标定。最后对于每个摄像机都会得到一组与标定模板位置一一对应的投影矩阵。现将式(2.7)中左、右两摄像机的投影矩阵、图像坐标系和世界坐标系的映射关系写成如下两式。M13乙=Mn式(2.27)%‰‰M吃Mill,乙|Ir‰‰‰一Mr,M吨Mr,Mr。。MlI式(2—28)一隅‰¨其中(z,,,_,1)7’和(甜,,U,1)7’分别代表特征点在左、右图像坐标系下的齐次坐标。该坐标的获取将在第三章中详细描述。上式消去乙和乙可得到式(2—29)。(Ml—M9U,)X+(鸠2一蝎lo¨fU)y+(M3一够ll约)z=M12ut—M4(鸩s—M,vt)X+(Ms—M-。_)J,+(M,一M-·M)z=鸠-zvt—Ms(鸠l一鸠9U,)X+(Mr2一鸠mU)】,+(M,3一犯ll¨,U)z=Mrl2¨,U一鸠4(鸠5一M,9v,)X+(M6一M。ov,)】厂+(鸠7一MrllU)z=鸠。2v,一M,8令Mn2ut—M14D=式(2.29)。’M!L—Ml≯IC=M12一MluoutMt6一M|。◇{rM}3一MmujM11一MtI—lM|lF|一M嚏M|s—Ml≯IMrl2U,一M,4Mrl2咋一M8M,l—M日UM,2一Mrloz,rM呜一Mr。◇rMr3一MrlIUrM6一Mr≯rM1一Mn—r20双目立体视觉测距系统的研究驴引度。根据最小二乘法公式,得到式(2—31)。闩式(2.30)则有c昨=D。可以看到,C为超定矩阵。在实际应用中,由于内部参数和外部参数都存在误差,睇通常没有解或者有多个解,可以使用最小二乘法提高精%=(C7’C)一C7’D式(2—31)%即为最后待求解的特征点在世界坐标系下的坐标。2.4小结本章首先简要的介绍了摄像机的成像模型,图像坐标系、摄像机坐标系和世界坐标系的映射转换关系。接着详细地阐述了摄像机标定的各种方法,重点论述了两步法标定。通过实验,实现了双目摄像机的标定,并给出了标定结果。最后论述了双目测距系统三维重构理论。第三章数字图像特征点的提取第三章双目测距中数字图像特征点的提取上一章中在重构三维坐标时使用到了特征点的图像坐标,本文中该坐标由计算机或者嵌入式系统检测得到,该过程称为数字图像特征点的提取。由于与人体相关的检测、识别技术一直是模式识别领域的热点和研究方向,本文以人的瞳孔中心作为待检测和定位的特征点。本章将详细介绍机器学习法检测人的脸部区域,在此基础上检测人的右眼瞳孔中心,并将提取出的瞳孔中心坐标代入标定得到的投影矩阵,得到人眼在世界坐标系中的坐标。3.1引言由第二章第三节可知,为了得到空间某点的三维几何信息,必须从不同视角获取的两幅或多幅图像中正确的找到这一点对应的投影点,这一过程叫做匹配。图像匹配是计算机视觉研究领域的一个基本问题。图像处理的最终目的是用计算机代替人去认识图像和找出一幅图像中人们感兴趣的目标。若要对图像进行正确地理解和识别,就必须对图像中的目标作定性或定量的分析,这些分析是建立在图像物体的某些特征基础上的。为了识别某一物体,我们就要对物体在视场中的图像特征进行描述。对图像的特征描述有许多种方法。图像特征选取是否恰当直接影响到后续的目标识别。所谓的图像特征是图像内部最基本属性或特征,用于区别其它图像的最本质属性,它们可以是原景物中人类视觉可以鉴别的自然特征,如亮度、颜色等;也可以是通过对图像进行处理和测量从而人为定义的某些特性或参数,即人工特征,如图像频谱、直方图等。作为良好的图像特征应具有以下五个特点:(1)不敏感性,图像特征对物体在部分被遮挡的情况下应不敏感。(2)特征的数量应较少,以降低识别系统的复杂度。(3)独立性,所用的各特征值应该彼此不相关。(4)可区分性,对于属于不同类别的图像来说,它们的特征值应具有明显的差异。(5)物体的位置应该与鲁棒性选取的特征无关。特征提取关键是选取适合于该图像的特征提取方法,以便于后面的图像识别。现阶段特征提取的算法有统计特征提取、纹理特征提取、几何特征提取、灰度特征提取以及一些高级特征提取等。特征提取的好坏在于提取的特征是否有利于图像的谚{别。我们希望找到的目标特征具有不变性,既要保证目标在旋转、缩放、22双目立体视觉测距系统的研究平移等情况下的特征不变性,又可以对不同物体具有明显的特征差异并能够进行良好的区分。3.2人脸区域的检测3.2.1人脸检测的背景早期的人脸检测问题可以追溯至lJ20世纪70年代,当时主要采用的是一些启发式的和人体测量技术的方法。这些技术大部分依赖于各种假设条件,如简单的背景,正面的人脸等。在这些早期的系统里,任何图像环境的改变都意味着需要重新调整系统,甚至重新设计系统。因为这些问题的困扰,人脸检测的研究一直处于止步状态。直到20世纪90年代,由于人脸识别系统和视频解码的大量运用,人脸检测的研究才得到了新的发展,利用运动、颜色和综合信息等更具有鲁棒性的方法提出来,而变形模板,弹性曲线等在特征提取方面的许多进展使得人脸特征的定位变得更为准确【I引。目前,国内外对人脸检测问题的研究非常多,比较著名的有国外的MIT、CMU等,国内的清华大学、北京工业大学、中国科学院计算技术研究所和中国科学院自动化研究所等。3.2.2人脸检测的方法人脸检测算法总体上分为两大类【19J:首先是基于显式特征的方法。其主要利用人类脸部几何特征、肤色特征以及运动信息等特征,这类方法的检测速度较快,但是检测率较低。其次是基于隐式特征的方法,这类方法相对于显式特征的方法利用了模式识别理论,使用事先训练好的分类器判断图像中的大量窗口是否为人脸,这类方法的检测率较好,而且适用的范围比较广,但是检测的速度比较慢,不能满足实际的要求。下面根据这种分类对其中一些检测算法结构,及其近期进展进行综合评述,并讨论当前存在的问题和发展趋势。所谓显式特征是指对人类的眼睛来说直观可见的特征,如脸部轮廓、肤色、脸部结构等。基于显式特征的方法是指由人通过肉眼观察,总结出人脸区别于“非人脸”区域的特征,然后根据被检测区域是否满足这些特征,判定该区域是否包含人脸。根据所选择的特征,把基于显式特征的方法分以下三个方法综述。(1)基于局部特征的方法人脸局部总是存在一定的规律,例如:人的两个眼睛总是对称分布在人脸的上半部分,鼻子和嘴唇中心点的连线与两眼之间的连线大体垂直,狄度图像中眼第三章数字图像特征点的提取睛要比脸上其他地方暗等。这些规则可以表述为人脸局部特征之间的相对距离和位置关系,当满足这些规则的图像区域找到后,就认为一幅人脸图像已被检测出来。这种方法所存在的问题主要是:检测率不高,如果图像背景中存在类人脸区域,则必然会导致误检:对于不同视角的人由于某些人脸特征不可见,所以不能使用这种方法检测;用于描述人脸特征之间关系的规则不易设计,规则制定的过高或者过低会造成拒识或误识。此外,因为列举所有的情况非常困难,所以很难将这种方法扩展到在不同的位姿下检测人脸。基于模板匹配的方法,首先建立一个标准的人脸模板,在检测和定位人脸时,在图像灰度层次上直接将待检测人脸图像的模板与这个标准模板相比较,求两者的相似程度,其中又包括预定模板匹配法和变形模板法。预定模板匹配法:根据人脸的先验知识确定出人脸轮廓模板以及各个器官特征的子模板,先通过计算图像中区域和人脸轮廓模板的相关值来检测出入脸候选区域,然后利用器官特征子模板验证上一步检测出的人脸候选区域是否包含人脸。变形模板法:其主要思想是定义一个可变形的参数模板和一个能量函数来描述特征,通过一个非线性最优化方法求得能使能量函数最小的参数模板,此模板即被认为是所求特征的描述。Yuille等提出用可变形模板来描述人脸的形状信息,通过和输入图像的边缘、峰、谷和可变形模板中参数进行动态性交互、修正,采用优化算法,在参数空间内进行能量函数极小化来判定人脸。这种方法充分考虑到人脸是变形体的特点,稳定可靠,而且与姿态和光照无关,但仍然存在能量函数的系数难以适应一般情况和计算量巨大的问题。肤色是人脸的重要信息,不依赖于面部的细节特征,对于旋转,表情等变化情况都能适用,具有相对的稳定性,对于同一种族的人来说,其肤色具有较强的共性,并且一般都明显有别于大多数背景的颜色。利用这一点,可以快速地大致框出人脸可能存在的区域。具体实现中,主要是根据皮肤颜色在颜色空间中的分布,用统计的方法进行分割算法的设计以判断某个像素点是否属于人脸区域。同时,为了增强算法对光照条件改变的鲁棒性,通常将像素点的颜色从RGB空间变换到其他空间中,只利用其中的色度和饱和度的信息进行判断。由于彩色图像获取的广泛使用,利用色彩信息进行人脸检测,具有直观、简单、快速的特点,适用于人脸的检测与定位。其算法关键是肤色模型的描述,使用何种形式的肤色模型与色度空间的选择密切相关,而最终限制检测性能的因素是不同色度空间中“肤色"与“非肤色”区域的重叠程度。(2)基于隐式特征的人脸检测基于隐式特征的人脸检测方法是将人脸看做一类样本,首先通过学习,在大量训练样本集的基础上建立一个能对人脸和非人脸进行正确识别的分类器,然后对被检测图像进行全局扫描,用分类器检测扫描到的图像窗口是否包含人脸,若双目立体视觉测距系统的研究有,则给出人脸所在的位置。实际上,人脸检测问题被转化为统计模式识别中的二分类问题。采用这种方法进行人脸检测的例子有以下几种:基于人工神经网络(ArtificialNeuralNetwork,ANN)的方法:基于人工神经网络的方法是一种基于样本的学习方法,是仿效生物处理模式,着眼于脑的微观网络结构,通过大量神经元的复杂连接,采用由底到顶的方法,通过自学习、自组织和非线性动力学所形成的并行分布方式,来处理难于语言化的人脸模式信息,进行人脸与背景分类以获得人脸检测结果的智能信息处理方式。这种方法对于复杂的、难以显式描述的模式,把模式的统计特性隐含在神经网络的结构和参数之中,具有独特的优势,但计算量特别大,难于实现实时处理。基于予空间的方法:基于子空间的方法将主分量分析应用到人脸检测中,对人脸训练样本集进行主分量分析得到特征脸子空间,将图像区域投影到特征脸子空间,并计算到特征脸子空间的距离,以此作为标准检测入脸。标准特征脸方法即以上简述的方法,可用于人脸检测和人脸识别。对人脸检测,通过计算图像与“人脸空间"之间的距离,可决定一幅图像是否为人脸。对于人脸识别,两个人脸之间的相似性可通过计算它们的投影加权系数之间的距离来测量。这种方法的优点是简单和通用性,不需要获取更多的脸部信息。支持向量机法:支持向量机(SupportVectorMachine,SVM)法是在统计学习理论的基础上发展出一种新的模式识别方法,它是基于结构风险最小化原理的方法,较之于基于经验风险最小化的人工神经网络,一些难以逾越的问题,如模型选择和过学习问题、非线性和维数灾难问题、局部极小点问题等,得到了很大程度上的解决。但是直接使用SVM方法进行人脸识别有两个方面的困难:①训练SVM需要求解二次规划问题,计算复杂度高,内存需求量巨大;②在非人脸样本不受限制时,需要极大规模的训练集合,得到的支持矢量会很多,使得分类器的计算量过高。综上所述,由于肤色检测针对彩色图像而言,检测速度快,适用于对检测实时性要求较高的视频检测与跟踪,鲁棒性好,算法简单,在人脸识别初期阶段采用这种方法,并对算法的准确率进行改进,将会取得较好的结果,大大降低识别阶段需处理信息量。本文中人脸区域检测所采用的就是支持向量机法。3.2.3基于OpenCv库的人脸区域检测OpenCv是Intel开源计算机视觉库,全称为OpensourceComputerVisionLibrary。它由一系列C函数和少量C++类构成,实现了图像处理和计算机视觉方面的很多通用算法。OpenCv拥有包括500多个C函数的跨平台的中、高层API。它不依赖于其它的外部库一尽管也可以使用某些外部库。它为IntelIntegratedPerformancePrimitives(IPP)提供了透明接13。这意味着如果有为特第三章数字图像特征点的提取定处理器优化的IPP库,OpenCv将在运行时自动加载这些库。同时OpenCv提供的视觉处理算法非常丰富,并且绝大部分以C语言编写,加上其开源的特性,处理得当,不需要添加新的外部支持也可以完整的编译链接生成执行程序,所以很多人用它来做算法的移植,OpenCv的代码经过适当改写可以正常的运行在DSP系统和单片机系统中。计算机视觉市场巨大但是这方面没有标准API,目前的计算机视觉软件又存在着不稳定、耗费高、依赖硬件等缺点。鉴于以上现状,OpenCv致力于成为这样的标准APIl20J。对于本文需要的基于支持向量机法的人脸检测,OpenCv提供了多种方便使用且功能强大的API,如evLoad,cvLoadImage,evHaarDetectObjects。(1)cvLoad,该函数可以用于从文件中打开对象分类器。(2)cvLoadImage,可以将数字图像从外部存储器读入内存,同时指定读入图像的颜色和深度。指定的颜色可以将输入的图片转为3信道,单信道,或者保持不变。深度指定输入的图像是否转为每个颜色信道每像素8位,或者同输入的图像一样保持不变。(3)cvHaarDetectObjects,该函数使用针对某目标物体训练的级联分类器在图像中找到包含目标物体的矩形区域,并且将这些区域作为一序列的矩形框返回。函数以不同比例大小的扫描窗口对图像进行几次搜索。每次都要对图像中的这些重叠区域利用cvRunHaarClassifierCascade进行检测。有时候也会利用某些继承(heuristics)技术以减少分析的候选区域,例如利用Canny裁减(pruning)方法。函数在处理和收集到候选的方框(全部通过级联分类器各层的区域)之后,接着对这些区域进行组合并且返回一系列各个足够大的组合中的平均矩形。调节程序中的缺省参数(scalefactor=1.1,rainneighbors=3,flags=0)用于对目标进行更精确同时也是耗时较长的进一步检测。3.3瞳孔位置提取在已经确定人脸区域的基础上,需要进一步确定人眼右瞳孔的位置坐标。由于人的瞳孔有圆形特征,该特征利于检测,因此比较理想的流程分为三个步骤:经验区域选取,对经验区域进行基于灰度的边缘检测,定位圆心坐标。令width和height分别表示人脸区域的水平和垂直方向上的像素点个数,经过大量的分析对比,本文在U方向上选定0至width/2,在v方向上选定height/4至height/2作为为人眼的经验区域。本节主要讨论如何边缘检测和定位圆心坐标。26双目立体视觉测距系统的研究3.3.1边缘检测边缘部分集中了图像的大部分形状信息,且广泛存在于物体与背景之间、物体与物体之间,基元与基元之间。图像边缘的确定与提取对于整个图像场景的识别与理解是非常重要的。首先,人眼通过追踪未知物体的轮廓(轮廓是由一段段的边缘片段组成的)而扫视一个未知的物体。其次,经验告诉我们:如果能成功地得到图像的边缘,那么图像分析就会大大简化,图像识别就会容易得多。第三,很多图像并没有具体的物体,对这些图像的理解取决于它们的纹理性质,而提取这些纹理性质与提取边缘有极其密切的关系。由于人的瞳孔呈圆形,并且有明显的轮廓,与眼球其余部分有明显的灰度对比,非常适合采用边缘检测处理与其余事物区分。比较经典的边缘检测算法有:基于灰度直方图的门限化边缘检测,基于梯度的边缘检测算子,Laplace边缘算子,LOG算子,Canny边缘检测算子【211。下面主要介绍本文使用的基于灰度值的边缘检测的算子。梯度对应于一阶导数,梯度算子是一阶导数算子,在边缘检测灰度值过滤比较尖锐且图像中噪声比较小时,梯度算子工作效果较好。对连续函数f(x,J,),它的x方向,Y方向和9方向的一阶方向导数为:正(x,y):—af_(x,y)式(3.1)驰∽=等fo(x,y)=L(x,y)sin0+‘(x,y)cos0它在位置(x,Y)处的梯度定义为:式(3—2)式(3-3)夥∽舻晒卜[期r这是一个矢量,需要用两个模板分别沿x和y方向计算。其模(以2为模)对应的欧式距离:料,f、i妖:,}=瑚嚏谚ge、i:,’,==[(罟)2——(号)2]ij戈e3—5,第三章数字图像特征点的提取方向角:吣川…an(茅/鬈)=剐矧鼬,式(3—7)实际应用中,为了计算方便,也可以利用城区(city—block)gE离(以1为模):或利用棋盘距离(以OO为模):酬…删劫栅,梯度幅度G[f(x,y)】是一个各向同性的微分算子,并且是f(x,Y)沿向量G方向上的最大变化率。边缘检测算子检查每个像素的邻域并对灰度变化率进行量化,通常也包括方向的确定。以上各式中的偏导数需对每一个像素位置计算,在实际应用中常用小区域模板卷积来近似计算。对G;和G,各用一个模板,两个模板组合起来构成一个梯度算子【221。根据模板的大小,其中元素的值不同,人们提出了许多不同的算子,最常用的有以下几个:Roberts算子、Sobel算子、Prewitt算子、Krisch算子等。Sobel边缘检测算子采用在3×3邻域内计算梯度:Gs=√研+G;其中:式(3-9)G(墨力=l行印一1,y+1)+2歹hy+1)+/b+1,y+1)一/b一1,y一1)一::,by—D—。,b+l,y一叫K(3-10)Gy(x,y)=Lf(x+l,y—1)+2:厂b+1,力十/@+l,y+D一/酝一1,y—1)一2矿b一1’力一.7rb一1,少+叫式(3-11)雕叭}i{]双日立体视觉测距系统的"}究Sobel算子很容易在空问上实现,Sobel边缘检测算于不但产生较好的边缘检测效果,同时,因为Sobel算于引入了局部平均,使其受噪声的影响也比较小。当使用大的邻域时,抗噪声特性会更好,但是这样做会增加计算量,并且得到的边缘也较粗。Sobel算子利用像素上下、左右相邻点的灰度加权算法。根据在边缘点处达到极值这一现象进行边缘检测。因此Sobel算子对噪声具有平滑作用.提供较为精确的边缘方向信息,但是正是由于局部平均的影响,它同时也会检测出许多伪边缘,且边缘定位精度不够高。所以,当对精度要求不是很高时,这是一种较为常用的边缘检测方法。图3.2为实验中左右两摄像机采集到的灰度图像以及经过Sobel边缘检测并对一阶差分结果做二值化后得到的图像。实验证明该方法可以有效的应用于本文。厍睚磊—一幽3.2原始图像和边缘检测结果3.3.2瞳孔中心位置计算在已经提取出瞳孔轮廓的基础上,本文需要最终精确定位双眼瞳孔在图像中的具体坐标。通过圈32可以看到,瞳孔有明显的圆形特征,本文采用检测圆形轮廓的方法定位瞳孔。Hough变换田1是检测圆形轮廓。种常用的方法。该方法是一种利用图像全局特性将边缘像素连接起来组成区域封闭边界的一种形状分析方法。其主要思想是试图寻找一种从区域边界到参数空间的变换,并用大多数处于区域边界的边缘点所满足的对应参数来描述该区域的边界。具体在检测圆形时,浚方法将参数空间适当量化,得到一个三维的累加器阵列。令二值化后的边缘检测图像中边缘点到任一像素点的距离为h假设该图像上任一点(“,一)都是可能的圆心点,遍历该图像所有的像素点,计算与边缘上的每一点像素的距离,+同时将对应于立方小格(“+,v,r)的累加器累加。对全部边缘点遍历完成后.再改变r“’,v1的取值,直至遍历完成所有可能的圆心点。当对全部圆心点遍历完成后,对三维阵列的所有累加嚣进行峰值检测.最大值即对应于待检测圜形的圆心坐标和半径。由于该方法对时间和空间的开销比较大,而应用于本课题时瞳孔中心叉已经确定在待检测图像区域,因此可以缩小遍历范围。对于可能的圆心点可以限定宽在width/4至widthX3/4,高度在height/4至height×3/4之间。实验中利用以第三章数字型像特祉点的提】缸上算法对左、右摄像机拍摄的人眼图像进行瞳孔检测,定位瞳孔中心,井利用OpenCv提供的API函数用红色填充检测到的圆形,瞳孔检测结果如图33所示。两图像中瞳孔中心的在整幅图像上的图像坐标分别为(309,265)和(82,25s)。在人眼区域的图像坐标分别为(23,16)和(25,11)。实验证明利用该法,可以相对准确地定位瞳孔中心的位置。”舡埘《f¥_o暖圉3.3瞳孔检测结果3.4双II立体视觉测距实验实验中使用两个摄像头,采用第二章论述的方法标定完成后,对同一目标采集图像。采集到的图像如图3.4所示。∞Ⅺ二kaI图3.4左、右摄像头采集的图像利用分类器检测脸部区域,并利用OpenCv提供的API函数在检测到的人脸区域画圆。人脸区域检测结果如图3.5所示。趔簟io零圈3.5脸部区域检涮结果函—■■■在准确检测出脸部区域的结果上继续检测瞳孔中心,并利用OpenCv提供的般闩●体视觉W蚶,系统的“宄API函数填充检测到的圆形(晡孔中心)。瞳孔检测结粜如图3.6所示实验中将左右瞳孔的图像坐标(309.265)和(82,258)代入式(2—27),使用最小二乘法求解得到右眼瞳孔在世界坐标系r的串标为(36264370,76497986,34483“函一目3.6瞳7L检测结震233369446,一10016205597,62600875376609)。山2.2节所阐述的标定理沦可以得到,左摄像机坐标系的三维平移向量t即为左摄像机光心在世界坐标系下的坐标。甲移向量t己经在2以占:摄像机光心的世界坐标为(683节中得出,所72094727)。计mm。实算两向量的拥对范数得到左摄像机光心和右限垃孔的距离为988际测量值为942mm。可见系统汁算结果与实际测量结果误差约为48%,基本满足了应用的需求。本章简要介绍了人脸检测的研究现状和各种方法.详细论述了支持向量机检测方法和丌源计算机视觉库OpenCv。接F来论述了如何在n:确检测人腧医域的基础L定位瞳孔中心,并在实验中汪明系统可以重构瞳孔中心的三维坐标,进而计算出目标特征点々某一指定点(本论文中为左摄像机光心)的距离。本章为后续的算法移植实现提供了可靠的理|仑依据。第四章双目测距系统嵌入式实现第四章双目立体视觉测距系统嵌入式实现实验证明PC机平台上的双目测距系统可以从两幅数字图像中重构出目标特征点的三维坐标,然而步入后PC时代的今天,嵌入式系统将拥有最大的市场份额。基于成本、功耗和专用性等因素,本文采用低功耗、低成本的嵌入式处理器NiosII,辅以外围专用处理电路,替代现有的PC机平台,实现成本较低、有良好性能的嵌入式双目测距系统。4.1嵌入式系统概述嵌入式系统(EmbeddedSystem)是指用于执行独立功能的专用计算机系统【241。它由包括微处理器、定时器、微控制器、存储器、传感器等一系列微电子芯片与器件和嵌入在存储器中的微型操作系统、控制应用软件组成,共同实现诸如实时控制、监视、管理、移动计算、数据处理等各种自动化处理任务。嵌入式系统以应用为中心,以微电子技术、控制技术、计算机技术和通讯技术为基础,结合微处理器或微控制器的系统电路与其专属的软件系统,强调硬件软件的协同性与整合性,以满足系统对功能、成本、体积和功耗等要求,达到系统操作效率与成本的最高比。最简单的嵌入式系统仅有执行单一功能的控制能力,在唯一的ROM中仅有实现单一功能的控制程序,无微型操作系统。复杂的嵌入式系统,例如个人数字助理、手持电脑等,具有与PC几乎一样的功能,实质上与PC的区别仅仅是将微型操作系统与应用软件嵌入在ROM、RAM或Flash存储器中,而不是存贮于磁盘等载体中。很多复杂的嵌入式系统又是由若干个小型嵌入式系统组成的。随着后PC时代的来临,家电、玩具、汽车、手机、医疗仪器以及智能房屋、智能办公室等都少不了嵌入式系统这个核心技术。4.2嵌入式系统总体方案4.2.1方案论证SOPC技术与NiosII简介4.2.1.1由于IC设计与工艺水平提高,集成电路的规模越来越大,复杂程度也越来越高,同时随着系统向高速度、低功耗、低电压和多媒体、网络化、移动化的发展,对电路的要求越来越高。传统的集成电路设计方法已经不再适应当前设计的需要,32双目立体视觉测距系统的研究从而产生了一种新的设计方法——SoC(SystemonChip)瞄J。SoC从整个系统的角度出发,把处理机制、模型算法、芯片结构、各层次电路,直至器件的实际紧密连接起来,在单个(少数几个)芯片上完成整个系统的功能【261。SOPC,即SystemonaProgrammableChip,片上可编程系统,是由Altera公司于2000年提出的一种灵活高效的SoC解决方案。SOPC是以PLD(可编程逻辑器件)取代ASIC,更加灵活、高效的解决方案。SOPC结合了SOC和可编程逻辑器件各自的优点,一般具备以下基本特征:(1)至少包含一个嵌入式处理器内核;(2)具有小容量片内高速RAM资源;(3)丰富的IP核资源可供选择;(4)足够的片上可编程逻辑资源:(5)处理器调试接口和FPGA编程接口;SOPC代表一种新的系统设计技术,也是一种初级的软硬件协同设计技术。设计师使用Altera公司提供的专用开发工具,在PLD上创建硬软件开发的基础平台,也即用SOPCBuilder仓J]建软核CPU-NiosII和参数化的接口总线Avalon。在此基础上可以很快的将硬件系统(包括处理器、存储器、外设接口和用户逻辑电路)与常规软件集成在单一可编程的芯片中。SOPC是PLD和ASIC技术融合的结果,它可编程的灵活性和IP设计的重用性,易于保证产品之间的差异性,降低了开发风险【2。71。SOPC技术中嵌入式处理器处于核心地位,Altera公司在2004年5月正式推出的第二代NiosII软核处理器,以其超过200DMIPS(DhrystoneMIPS)的性能成为灵活、低成本嵌入式处理器的选择。NiosII是基于RISC架构的嵌入式处理器软内核,它专门为可编程逻辑进行了优化设计,也为SOPC设计了一整套综合解决方案。主要包括一个CPU、I/O中断申请、计时器、UART口及大量的通用寄存器。NiosII的数据总线和地址总线宽度由用户定义(最大为32位),也可以根据具体需求增加并行输入输出端、连接外设的接口逻辑等。Nios11只占用FPGA芯片很少的资源,可以嵌入在任何一个Altem主流器件FPGA系列中与PLD模块同步运行。NiosII具有很高的灵活性,具有完全可定制和重新配置特性,及丰富的外围设备,所实现的产品可满足现在和今后的需求。NiosII是有弹性的,如果多加一项功能,只要再重新编译。但PLD(programmablelogicdevice)需预留一些空间,否则即使是NiosII有了新的功能,也不可能更改。而传统意义上的处理器则不能新增功能,如果要增加功能,就需更换CPU。NiosII软核处理器主要特性:(1)定制特性集采用NiosII处理器,不会局限于预先制造的处理器技术,而是根据自己的标第四章双目测距系统嵌入式实现准定制处理器,按照需要选择合适的外设、存储器和接口。此外,还可以轻松集成自己专有的功能,使设计具有独特的竞争优势。(2)配置系统性能设计所需要的处理器,应该能够满足当前和今后的设计性能需求。由于今后发展具有不确定性,因此,NiosII设计人员必须能够更改其设计,加入多个NiosIICPU、定制指令集、硬件加速器,以达到新的性能目标。采用NiosII处理器,可以通过Avalon交换架构来调整系统性能,该架构是Altera的专有互联技术,支持多种并行数据通道,实现大吞吐量应用。(3)低成本实现在选择处理器时,为了实现需要的功能,可能要购买比实际所需数量多的处理器,也可能为了节省成本,而不得不购买比实际需要数量少的处理器。低成本、可定制NiosII处理器能够帮助解决这一难题。采用NiosII处理器,可以根据需要,设置功能,可以降低系统总体成本。(4)产品生存周期管理为实现一个成功的产品,需要将其尽快推向市场,增强其功能特性以延长使用时间,避免出现处理器逐渐过时。可以在短时间内,将NiosII嵌入式处理器由最初概念设想转为系统实现。由于在FPGA中实现软核处理器,因此可以方便实现现场硬件和软件升级,产品能够符合最新的规范、具备最新特性。(5)很强的灵活性NiosII具有完全可定制和重新配置特性,所实现的产品可满足现在和今后的需求。NiosII根据性能与成本的不同,可分为3种设置,分别是:a)NiosII/f(快速),最高的系统性能,中等FPGA使用量;b)NiosIlls(标准),高性能,低FPGA使用量;c)NiosII/e(经济),低性能,最低的FPGA使用量。这3种产品具有32位处理器的基本结构单元:32位指令大小,32位数据和地址路径,32位通用寄存器和32个外部中断源;使用同样的指令集架构(ISA)[28】。loo%二进制代码兼容,设计者可以根据系统需求的变化更改CPU。选择满足性能和成本的最佳方案,而不会影响已有的软件投入。特别是NiosII处理器支持使用专用指令(专用指令是指用户增加的自己设计的硬件模块),NiosII处理器在内部还增加了算术逻辑单元(ALU),极大提高了处理器的运行效率。4.2.1.2硬件平台DEl简介本文选用友晶科技公司推出的NiosII丌发板DEl。该开发板以FPGA双日立体视觉测距系统的研究Cyclone112C20为核心,拥有484个引脚。所有重要的元件都连接在FPGA的引脚上,允许用户根据其设计的特性操作开发板上的各个元件。对于简单的应用,DEl开发板拥有各种开关(如拨码开关,按键开关)、多种颜色的LED和七段数码管。对于更加复杂的应用,开发板有SRAM,SDRAM和Flash存储器。对于需要处理器和简单IO接口的应用,用户可以方便的使用Altera公司的NiosII处理器和RS.232,PS/2等标准接口。同时,DEl开发板还提供了丰富的音频和视频输入输出接口,以及相关的音频编解码芯片,视频数模转换芯片。最后,开发板还有2个扩展接口用于和其他设备或者开发板交互。各种元件具体介绍如下:(1)FPGA●CycloneIIEP2C20F484C7FPGA◆EPCS4串行配置设备(2)I幻Device●内建的RS.232配置FPGAUSBBlaster●VGA数模转换器●PS/2鼠标与键盘接口·音频输入输出接口●MicroPhone输入接口●外部扩展接口(76根引脚)(3)存储器●◆8MBSDRAM512KBSRAM●4MBFlash●SD卡插槽(4)开关、LED、时钟●10个拨码开关●4个按钮开关·10个红色LED,·4个七段数码管●27MHz与50MHz晶体振荡器●外部晶体振荡器接口4.2.2系统结构8个绿色LED嵌入式系统功能模块如图4.2所示。第四章双目测距系统嵌入式实现图4.2嵌入式系统功能模块下面分别介绍上述模块的作用。拨码开关:用于人机交互。本文中主要使用拨码开关作为控制参数的输入。如特征检测函数cvHaarDetectObjectsO中的参数scalefactor表示在前后两次相继的扫描中,搜索窗口的比例系数。如当scalefactor为1.1时指将搜索窗口依次扩大lO%。当scalefactor越小时,函数的鲁棒性越好,但是同时该函数的执行时间也将增加。当scalefactor增大时,函数执行较快,但是可能会错过特征。拨码开关作为用户的输入,控制着scalefactor的值。例如当第一个拨码开关置为1时,嵌入式处理器通过读取该值就将scalefactor置为1.1。用户通过配置拨码开关可以满足不同场合的鲁棒性和实时性的要求。LED:发光二极管的主要作用是将当前状态和检测结果通知用户。当程序未执行时,LED全部点亮;当处理器开始执行程序,检测特征点时,红灯点亮,其余变暗;当检测完成时,红灯变暗,绿灯点亮。七段数码管:将双目测距的最终执行结果以数字的形式显示出来。EPCS4:FPGA串行配置设备。SD洲:程序运行时的内存。Flash:固化开发板上电自举时的程序,并存储图片等数据。数字图像处理加速器:自定义的设备,用于加速某些比较占用时间的函数,减少整体算法执行的时间,使系统尽量满足实时性的要求。本设计中主要用于加速边缘检测和图像平滑等基本图像处理算法,使用该设备可提高约536倍的处理36双目立体视觉测距系统的研究速度。该设计将在第五章第三节详细介绍。4.3算法的嵌入式移植在PC机平台上的双目立体视觉测距系统是程序移植的基础,程序移植的目的是要把在PC上实现的算法程序修改为可以在嵌入式系统中编译运行的程序。本文选用的嵌入式开发环境为NiosIIEDS。不同的开发和编译环境决定了移植时需要考虑如下几点:(1)编译器有关的修改NiosIIEDS的编译器是GNU编译器,支持ANSIC。而在VisualC++下编译通过的程序并不一定符合GNU编译器支持的C版本。所以首先完成的工作就应该是把原来的算法程序改为用标准C语言编写。如:for(inti--O;i<imagc_width;i++){….)以上语句在VisualC++环境下可以编译通过,然而在NiosIIEDS环境下,编译器会报错。因为GNU编译器所支持的ANSIC不允许在for语句中声明变量。应改为:inti;for(i--0;i<image_width;i州{….)同样,ANSIC也不允许出现C99中才有默认参数。例如:voidcvSobel(constCvArr幸src,CvArr·dst,imxorder,imyorder,intaperturesize=3);该函数实现最基本的Sobel边缘检测。参数的意义分别是输入图像指针、输出图像指针、x方向差分阶数、Y方向差分阶数和算子核大小。最后一个参数aperturesize是默认参数,即如果不显式声明,编译器会按照aperture理函数cvSobel的这个入口参数。但是在NiosIIEDS编译环境下,如果按照上面的方式声明函数,编译器会出现错误。应将cvSobel声明如下:voidcvSobel(constCvArr·SrC,CvArr奎dst,imxorder,int),order,intaperture_size);在调用该函数时要正常指定入口参数aperturesize的值。(2)与处理器有关的修改CPU不同,其寄存器的位宽也会不同。NiosII是32位的处理器,它支持的数据类型如表4.1【291所示。第四章双目测距系统嵌入式实现表4.1类型char,signedcharNios11支持的数据类型表示法二进制补码二进制二进制补码二进制二进制补码二进制二进制补码二进制lEEEIEEE大小(字节)1122444448488unsignedcharshort,signedunsignedshortshortint,signedintunsignedintlong,signedlongunsignedlongnoatdoublepointerlonglong二进制二进制补码二进制unsignedlonglong可以看出NiosII的数据类型与32位VisualC++的数据类型基本一致,只是NiosII不支持longdouble类型,故需要在不影响原来的精度范围内将原来的该类型数据修改为double。另外,在读取图像像素值时需要用到对字节的操作,通常像素总数不一定满足内存对齐的约定,即像素总数不一定是4的倍数,这时就需要人为对内存进行调整。因此内存对齐也是移植时需要考虑的。NiosII中对内存对齐的约定如下:>函数必须支持最小为32位(4字节)的边界对齐。>数据对齐取决于数据本身的大小,而超过32位的数据元素将以32为边界对齐。>结构体、联合体、位域以及字符串等复杂数据以32位的边界对齐。>堆空间、栈空间以及帧空间都是以32位的边界对齐。最后NiosII与PC机平台的X86CPU同样使用LiUle.endian的数据模式并且在本课题中未用到与X86寄存器有关的汇编语言,所以这部分可以不必考虑。4.4OpenCv的移植在PC机平台上的双目立体视觉测距系统使用OpenCv提供的API函数,这些函数最终连接到OpenCv的动态链接库。OpenCv为使整个库便于管理和扩充,将整个库分成若干子库f301,包括cxcore.1ib,CV.1ib,cvaux.1ib,cvcam.1ib,highgui.1ib。38双目立体视觉测距系统的研究下面分别简要介绍各个库的作用。cxcore是最重要的一个子库,从“cole核心’’名字可以看出,该库提供了所有OpenCv运行时的一些最基本的数据结构,包括矩阵,数组的基本运算,包括出错处理的一些基本函数。具体分为基础结构、数组操作、动态结构、绘图函数、数据保存和运行时的类型信息、错误处理和系统函数。ev.1ib主要的作用是提供图像处理、结构分析和运动分析与对象跟踪等功能强大的接口函数,完善地实现各种场合需要的图像处理任务。CVaUX.1ib提供多种辅助性的和还处于实验阶段的高级应用函数如立体匹配,3D跟踪,特征投影等功能。highgui.1ib是用来建立快速软件原形或是实验用的标准库。它的设计意图是为用户提供简单易用的图形用户接口。cvcam.1ib是可以读取摄像头数据的模块。嵌入式系统的资源有限,有些在PC平台经常使用的库在嵌入式系统中是不必要。如highgui.1ib,由于嵌入式系统中不存在显示卡和类似显示器这样的标准输出设备,该库是无法直接应用于嵌入式系统的。同时,OpenCv的库函数是建立在windows操作系统之上的,这也会使得很多函数无法在嵌入式系统中工作。因此有必要在NiosII开发环境NiosIIEDS中对源文件进行修改,然后重新编译,生成新的静态链接库。对于OpenCv中针对windows操作系统进行多线程优化的部分,由于嵌入式系统中不存在windows,可以直接不添加。对于cvaux.1ib,由于算法中未用到该库中的函数,所以可以不添加该库中的源文件。对于cvcam.1ib,由于嵌入式系统可以直接读取外部存储设备中的BMP图像,所以可以不使用读取摄像头数据的模块。对于highgui.1ib,移植后只用到读取cvLoadlmage函数,可以手动重新编写从外部存储设备读取BMP文件的函数Loadlmage.cpp,将其添加到待编译的工程目录。对于cxcore.1ib,cv.1ib,可以将两个库的源文件按照上一节所描述的嵌入式移植的要求修改。修改完成后,编译通过即生成了最终可以连接的OpenCv静态链接库。4.5小结本章简要介绍了嵌入式系统的概念,详细介绍了SOPC技术和嵌入式处理器NiosII以及DEl开发板,以及该算法移植在嵌入式系统的可行性。同时,论文给出了双目测距系统嵌入式实现的结构图。接下来介绍了算法和OpenCv库的移植过程。结果证明了双目测距系统在FPGA平台上的嵌入式移植是成功的。但是由于处理器NiosII本身存在的不足,系统在实时性方面存在着不足。本文将在下一章详细介绍如何对本系统进行优化。第五章系统性能优化第五章系统性能优化一般而言,嵌入式处理器NiosII主频可以达到200MHz,但远远无法与PC机强大的处理器想媲美。这导致很多从PC机平台上移植到嵌入式系统中的算法占用太多的执行时间,导致系统最终无法满足实时性的需求。本章将介绍如何使用自定义指令和自定义外设对基于FPGA的嵌入式系统进行性能优化,并给出了优化仿真结果。5.1嵌入式系统与PC机性能对比本文实验中对分辨率为640X480,深度为8位的三通道BMP图像执行一次完整的双目测距算法,两平台在硬件和处理时间上的对比如表5.1所示。表5.1PC机与嵌入式环境比较处理器类型处理器主频OS内存处理时间AMDAthlon2.3GHzWindowsDDR2546.072ms双核4400+NiosII100MHz无SDRAM(IS42S8800)36.31s可以看出嵌入式系统在处理速度上还存在着很大的不足,不足以满足实际中的应用。本文首先考虑使用如下两种方法提高处理效率。(1)选用NiosII编译器提供的优化选项每种编译器都提供一定的速度和代码尺寸的优化选项。NiosII集成开发环境NiosEDS的编译器nios—elf-gcc提供了如下的优化选项。.00级不采取任何优化,按照原始代码进行编译连接。.01级进行简单优化,简化控制流程,把变量安排到寄存器,简化循环,忽略未用代码,简化语句和表达式,把调用函数扩展为内嵌函数等。.02级在.01级优化的基础上,进一步采取局部优化措施,如进行COPY扩展,删除未用分配,忽略局部公共表达式等。.03级在.02级优化的基础上,进一步采取全局部优化措施,如进行循环优化,删除全局公共子表达式,删除全局未用分配等。.OS级是最大可能的优化级别,生成最小的可执行文件。(2)内联函数(inlineFunction)当程序调用一个嵌入函数时,会把该函数的代码插入到调用处。嵌入函数有双目立体视觉测距系统的研究助于提高代码的运行效率,主要有以下两个优点:第一,省去了函数调用的有关操作。第二,优化器可以把嵌入函数代码和周围代码放在一起自由地进行优化。但是,嵌入函数会大幅度地增加程序代码长度,适合于小函数和调用次数较少的场合。本文主要将浮点数取整运算等函数声明为inline型函数以加快执行速度。经过测试,经过上述优化后的算法仍难以满足实时性的需求。整个处理过程中,使用分类器检测人脸特征区域的函数cvHaarDetectObjects占用大部分时间。调整该函数影响处理速度的入口参数,发现把前后两次相继的扫描中,搜索窗口的比例系数scalefactor由1.1修改为1.2之后,处理时间由36.31s减少为31.25s。但是在处理时间上仍然偏长。经过进一步分析,cvHaarDetectObjects函数和其他部分函数频繁地调用了cvRound函数。该函数用于对双精度浮点数取整。因此本文首先考虑使用自定义方式对cvRound函数进行优化。5.2自定义指令优化浮点数取整运算5.2.1IEEE双精度浮点数表示浮点数是属于有理数中某特定子集的数的数字表示,指小数点在数据中的位置可以左右移动的数据,通常在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法【311。设存在任意实数N,用公式表示为:N=(一1)sM×2P式(5.1)这里S是实数的符号位,M被称为浮点数的尾数,P被称为阶的阶码。因此,要表示浮点数,一是要给出尾数M的值,通常用定点小数形式表示,它决定了浮点数表示的精度,即可以给出的有效数字的位数。二是要给出阶码,通常用整数形式表示,它指出的是小数点在数据中的位置,决定了浮点数的表示范围。S表示浮点数的符号位,决定了浮点数的正负吲。在计算机中,IEEE规格浮点数通常被表示为如表5.2所示。表5.2IEEE标准浮点数格式PISMI按照国际电子电气工程师协会IEEE标准,常用的32位单精度浮点数(4字第五章系统性能优化节)和64位双精度浮点数(8字节)的格式以及两者的S,P,和表示方法如表5.3所示。表5.3IEEE标准浮点数表示M所占的位数S1lP8llM2352表示公式偏移鼍1271023(一1)sX2‘川27’X1.M(一1)s×2‘N023’×1.M以双精度浮点数为例,可以得到其二进制的内存表示如表5.4所示。表5.4浮点数的内存表示若不对浮点数的表示格式作出明确规定,同一个浮点数的表示就不是唯一的。例如0.5也可以表示为O.05×101,50×10_2等,为了提高数据的表示精度,也为了方便浮点数之间的运算与比较,规定计算机内浮点数的尾数部分使用纯小数形式给出,而且当尾数的值不为0时,其绝对值应大于或者等于O.5,这被称为浮点数的规格化表示。对不符合这一规定的浮点数,要通过修改阶码并同时左右移尾数的办法使其变成满足这一要求的表示形式,这种操作被称为规格化处理,对浮点数运算结果经常需要规格化处理。对于规格化后的浮点数,当尾数不为0时,其最高位必定为1,在将这样的浮点数写入内存或者磁盘时,不必给出该位,,可左移一位去掉它,这种处理技术称为隐藏技术,目的是用同样多位的尾数能多保存一位二进制位。在将浮点数取回运算器执行运算时,再回复该隐藏位的值。另外按照IEEE标准,双精度浮点数阶码共11位,可以表示的范围是.102和1023。因为指数可以为负,为便于计算,规定都先加上1023。在实际运算时需要将阶码减掉1023才可以使用。5.2.2硬件逻辑实现浮点数取整由于系统频繁调用cvRound函数进行双精度浮点数取整,本文考虑将该函数使用自定义指令方式优化。由于未优化前cvRound完全使用软件命令执行浮点数取整功能,执行时取数据、移位和运算等占用较多的时钟周期。使用自定义指令的方式可以将cvRound函数的功能以硬件逻辑的形式添加进嵌入式处理器NiosII的ALU,这样就可以用硬件完成占用大量CPU时钟周期的动作。对于处理器而言,自定义指令的地位近似于ALU的加法或者移位指令。自定义指令如图5.1所示,用户自定义逻辑模块在本文中指用硬件描述语言实现的功能模块,该模块可42双日立体视觉测距系统的研究以实现双精度浮点数取整运算。dataB图5.1自定义指令不意图为了适应各种情况,Nios11支持以下四类自定义指令:●组合逻辑指令组合逻辑指令接收两个变量输)、 ̄.(dataa,datab),经过组合逻辑运算后输出结果result。其中变量的输入个数可以是2个,1个或O个,但必须有结果输出。因为只涉及到组合逻辑运算,因此在一个系统周期便可以完成。●多周期用户自定义指令在组合逻辑指令中,设计人员只能进行组合逻辑运算,对于一些时序逻辑等功能更强大的运算则无能为力,这就需要设计多周期用户自定义指令。●扩展用户自定义指令扩展用户自定义指令在一条指令中可以执行多种功能,有序号N来决定每次调用指令时执行什么功能(比如N=0时执行翻转功能,N-1时执行直接翻转功能,N=2时执行半字翻转功能等),N最大为8Bit宽,因此一条指令最多可以有256种功能。·内部寄存器自定义指令内部寄存器自定义指令可以读取指令的硬件描述文件中内部定义的寄存器的值作为指令的变量输入。指令通过输入控制端口readra,readrb来控制读取的变量是dataa,datab还是内部寄存器的值以及使用writerc来控制输出到result还是第五章系统性能优化43到内部寄存器,如果readra,readrb和writerc输入高电平,指令读取dataa和datab作为变量输入,并把结果输出到result中,如果readra和readrb输入低电平,则指令读取内部寄存器的值,并把结果输出到内部寄存器中,具体读取和输入到哪一个寄存器由a,b,c决定,内部寄存器的读写数量可以达到32个。对于本文所需要的双精度浮点数取整运算,多周期用户自定义指令即可满足要求。由于NiosII处理器数据总线是32位的,每次可以从内存中取出32位数据,而双精度浮点数在内存中占8个字节(64位),共需要取两次。经过一定周期的运算后输出结果。该自定义指令的硬件逻辑使用VerilogHDL编写。逻辑实现浮点数取整运算流程如图5.2所示。分别读取浮点数的高4位和低4位字节T尾数右移52+1.阶码位023’最低位加l,符号位赋值tI拉高处理完成标志}位并输出取整结果’r\结束/、图5.2逻辑实现浮点数取整流程图实验中对双精度浮点数1.75进行取整。按照前一节中IEEE对浮点数的规定,存储在内存中的十进制数l。75的双精度浮点数以十六进制表示为3FFC000000000000。其中符号位为0,指数位为3FF,尾数位为C000000000000。高四个字节对应程序中的doublehigh,低四个字节对应于doublelow。处理结果为integ。程序仿真结果如图5.3所示,从图中可以看到start开始后的第四个时钟周期即可以得到正确的取整结果2,同时处理完成的标志位done也被拉高。般目立体视觉测距系统的{IJf究——lp0厂]几几厂]厂]厂1广1厂__]r]n几_]厂———_一——L———一田doⅡblehi曲田do吐leJo_田index田integ曲t-_’2商3画3608e苛82Ⅱp115lpIl6_-一图5.3逻辑实现浮点敦取招仿真结果最后将该设计添加进定制的NiosII处理器,并按照多周期用户自定义指令对麻入口参数,将doublelow对应于dataa,doublehi曲对应与datab。壤后在生成的NiosII系统描述头文件systemh中可以看到系统为浚设汁自动生成函数hdama,imdamb).调用该函数时,NiosII将其ALTCITESTROUNDINSTfim作为一个指令。因为该指令是用户自定义的,所以称之为自定义指令。调用该自定义指令的关键程序如下:doubleimintreal_num-I,75;+l,:(im+、&real_hum;integer-ALT_CI_TESTROUNDINST(+P,’(p十1));integer即为最后返回的浮点数取整后的整型数。实验巾处理器Nlos11工作于IOOMHz,定时器工作于timcstamp模式。若使用纯软件方式执行,进行次耻整运算需要约231“j,而使用自定义指令优化后,只需要约lⅣs,速度提高了约23倍。5.3边缘检测的硬件加速双目立体视觉测距算法中大量用到边缘检测等基础图像处理函数。测试表明,当NiosII处理器工作于IOOMHz时,对一幅分辨率为200×270的灰度图像使用软件方式执行一次Sobel边缘检测需要约2,753,621Ⅳj,显然这严重影响了系统的实时性。考虑到边缘检测处理过程比较复杂。不适合使用自定义指令方式加速,本文用硬件逻辑实现边缘检测功能,将该设计作为一个外设挂载在NiosII处理器AvMon总线。这样就可以在不牺牲NiosII处理器灵活性的前提下,发挥FPOA在图像处理方面的优势,快速完成各种基本的图像处理算法。第五章系统性能优化455.3.1总体方案设计NiosII处理器采用的是地址总线、数据总线、控制总线相分离的Avalon总线规范。处理器在用软件执行图像处理时,需要首先从作为内存的内部RAM或外部RAM中读取图像像素值,送进ALU,再把ALU处理过的数据写进RAM。对于存在大量像素值的图片来说,这显然会严重影响系统的实时性,因为要产生任何一个最终的像素值,都可能需要对多个现有像素值进行操作,这样整个处理过程就会重复读写某一现有像素值多次。同时,每个操作都还可能需要等待Avalon的仲裁。这会给主频不高的NiosII处理器带来执行周期过长等问题。本文介绍的解决方案是首先用硬件描述语言实现可以完成处理任务的模块,然后设计该模块与Avalon总线的主接口和从接口,这样就可以将该模块挂载在Avalon总线上,通过NiosII核调用该模块完成处理任务。由于这种方法只需读取一次待处理的像素值,且整个处理的过程不需要NiosII核或ALU参与,仅由FPGA逻辑实现,在保留NiosII灵活性的同时,大大加速了处理速度。数字图像处理加速器硬件方案如图5.4所示。图5.4图像处理加速器硬件框图双目立体视觉测距系统的研究上图中时钟输入/复位接口负责将Avalon总线的时钟和复位信号提供给其余三个模块,用于驱动或者复位三个逻辑模块。总线从接口模块作为NiosII的从设备,用于接收NiosII处理器的命令,包括NiosII发出的待处理数据的地址、长度、开始工作等信息,并储存处理完成的标志位,以供NiosII判断是否已经完成任务并向下执行指令。它将收到的必要信息提供给总线主接口模块和图像处理逻辑模块。总线主接口模块作为读写RAM的主接口,用于接收从接口的配置信息,按照这个信息读写存储着像素值的RAM,将读到的像素值输出给图像处理模块,将处理得到的结果写到指定的RAM地址。同时,通过内部的逻辑运算判断何时向用户逻辑发出clkenable信号,何时向从接口模块发出任务完成的done信号。数字图像处理模块主要完成数据处理的任务。它接收总线从接口的modecontrol信息以判断进行什么类型的图像处理(如边缘检测、平滑滤波等),接收从总线主接口模块传递的像素值处理,同时将处理结果写给总线主接口模块。5.3.2从接口模块设计从接口主要用于接收CPU的配置数据并将其传递给主接口和图像处理模块。整个外设作为寄存器型外设,CPU写出的配置数据存储在从接口模块的寄存器中。整个从接El模块使用VerilogHDL编写,采用状态机实现。本模块中主要存在5个32位的寄存器,它们分别是:ADDRESSSRC,LENGTH,CONTROL,STATUS,ADDRESS—DST。对应的偏移地址分别为OxO,Oxl,Ox2,Ox3,0x4。因Avalon总线为32位,在本模块采用静态地址对齐,所以每个寄存器都设计成是32位,在FPGA内以M4K实现。Avalon总线从接口读传输和写传输的时序图如图5.5所示。read-n———、厂——一clk厂]广]厂]wrlte_nchipselect-n—]厂—一,eaddata二二二二二二二二)正[二二二)(二二=。Ik厂——]厂——]addr。ss二二二K互二二二二二二二二二)C二二二二’●■rnCW●"IⅡorm■一write—n———_\、厂———一readnn......。........._/、、、、.......................一。dd,。ss二二==)王互二二二二二×二二==二洲tedata二二二二)j匠二二二二二×二二二二二chlpselect图5.5Avolon总线从接口时序图第五章系统性能优化47当CPU开始调用本外设时,需要首先将待处理图像像素地址和待处理的图像像素长度(以字节为单位)写给从接口的寄存器。具体为当write信号和CS信号使能(低电平)时,从接口的逻辑将根据偏移地址的值决定将writedata写给相应的寄存器。如当偏移地址为0xl且writedata为0xFF时,LENGTH寄存器的值将被赋为0xFF。当NiosII配置完这些寄存器,就会不断读取STATUS寄存器的值,以判断硬件是否已经处理完成。5.3.3主接口模块设计总线主接口模块的主要作用为:接收总线从接口模块传递的配置信息:读RAM中的像素值,将其传递给图像处理模块;接收图像处理模块输出的结果,写到RAM。整个主接口模块采用VerilogHDL编写,用状态机实现。Avalon总线主接口的写传输和读传输时序图如图5.6所示。7审Itl哺ritteV晴_■ofbrmcIkread_nwrite—n—\厂]厂一twaItrequest二二3[二二了——_、[二二二;writ。data二二题正二Ⅺ五二][二二延[二二二二][二二address二]压二二珏[二][二二](至二二二二二K二二lb归enabIe二]匝互]匝[][二]睡二二二二]C二二‘’’”啼’ReadWhu蕾釉rm——…。——………‘cIkwriteread—n—_、厂]厂一{n_:waitreauest==广——、[二二][二二address二]压[二二二二X互二](二二]压二二K二readdata二==二二Ⅺ夏二](亘二=[二=X叵二][二=图5.6吼eenabIe二]匹E二二二]|正[][二]唾二][Avolon总线主接口时序图一1厂]厂]门厂]厂]厂]{厂]广]厂]厂]厂]厂]i主接口模块设计比较复杂。由于不能同时读写RAM,需要先从指定地址读取像素值,送给用户逻辑处理后再接收处理后的数据,最后写给RAM。根据不同的处理阶段,该模块分为五个状态:waiting_go_bit,reading,processing,writing,done。状态转移如图5.7所示,各个状态对应的功能如下。waitinggoreading:按照处理器指定的地址从内存(SDRAM)中读取32位像素值。processing:将32位数据送入图像处理模块,并接收处理完成的数据。writing:将处理完成的数据写入内存中处理器指定的地址。done:所有像素值处理完成,为从设备接口模块发送控制信号。复位寄存器。48双目立体视觉测距系统的研究图5.7主接口状态转移图5.3.4数字图像处理模块设计数字图像处理模块主要完成比较占用软件执行时间的算法。将图像数据考虑成离散信号序列,将算法的算子模板考虑成滤波器。对图像数据的处理实际上就是将图像信号序列与算子模板的频率响应进行卷积。只要适当调整算子模板的参数,就可以达到不同的处理目的。具体使用时,本模块将根据从总线从接口模块传递的modecontrol的值决定使用何种算法模板。如当modecontrol为O,bll时,代表将使用Sobel算子进行X方向和Y方向的边缘检测。下面以Sobel边缘检测算法为例介绍如何实现本模块。Sobel算法及其算子核已经在第三章第三节中详细介绍,这里不再赘述。为了实现对输入数据的实时处理,至少需要缓冲3行像素点。如图5.8为X方向Sobel算子的实现框架。Line0至Line2表示用于缓存三行像素值的移位寄存器。只至只为经过行缓存的8.bit像素点。五至五代表算子核中的数值。对于采用X方向的Sobel算子,五至K的数值分别为.1,.2,.1,0,0,0,1,2,1。该算子核的数值存储在图像处理模块的ROM中,通过判断从接口模块传递的mode值来选择执行何种算子。control第五章系统性能优化49图5.8Sobel算子硬件实现图中Data为经过并串转换的8位无符号二进制数,代表1个像素点的值。Line0至Line3采用QuartusII提供的IP核LPMSHIFTREG(移位寄存器)实现。每个Line的长度由待处理图像的width决定。3个Linebuffer出来的数据分别被传递给3个移位寄存乘加器,乘加器的参数X(或者Y)由Sobel算子的核决定。这3个乘加器都采用QuartusII提供的IP核ALTMULTADD实现。同样的方法可以实现Y方向的算子。最后根据modecontrol的值,决定是否对x方向和Y方向的结果做先求平方和再开方的运算。这样,在经过2倍行缓存长度的时钟周期后,每一个有效时钟的到来,都将会产生一个有效的8位二进制数据。这个数据会被输出给总线主接口模块。总线主接口端在收集到4个有效的像素值后会进入写状态,将它们写给RAM。5.3.5软件调用编写完硬件逻辑后就可以将本设计挂载在Avalon总线上了。首先为设计好的NiosIIModule添加自定义逻辑,加入以上模块的HDL文件,选择顶层设计模块。在signal标签中选择符合要求的接口类型和信号类型【33】。NiosII处理器添加该外设时所需定义和设置的接口类型如图5.9所示。烈U正体视觉洲Fn系统的I口f究幽5.9Avalon接口信号设定将外没挂载在Avalon总线后,就可以使用本外设了。但是为了使用的方便,也为了其他人便于调用率设计,需要编写奉设备的驱动程序。对于寄存器型外设,为了使外笈正常上作,首先需要编写寄存器映射文件。寄存器映射文件主要的作用是定义寄存器操作的宏命令,这样用户在驱动程序中就可以利用NiosII处理器米配置从接口的寄存器值。可以配置的寄存器包括ADDRESSCONTROL,ADDRESSSRC,LENGTH,DST,这些寄存器的偏移地址已在前文描述。这些寄存器的作用介绍如F:ADDRESSSRC:源图像(待处理图像)在内存中的存储地址。由用广在软件调用时指定,驱动程序将指针值赋给改寄存器。土接【】模块会从酸地址读入待处理的图像数据,送入图像处理模块处理。LENGTH:源图像以字节为单位的数据长度。CONTROL:片j户指定的处理类型,聚用何种算子列源图像处理。ADDRESSDST;图像处理完成后在内存中的存储地址。山用户在软件谢用时指定,驱动程序将指针值赋给该寄存器,最终总线主接口模块会将处理完成的图像数据写入该地址。以配置ADDRESSSRC为例,在寄存器映射头文件中有如F定义:#defineIOADDRALTERAAVALONSOBELADDR(base)IOCALCADDRESSNATⅣErbase,01#defineIORDALTERAAVALONSOBELADDR(base)lORD(base,01#defineIOWR_ALTERAAVALOHSOBELADDR(base,data)IOWR(base,次读写32位0,data)因为本外设采用静态地址对齐,所以采用IORD干¨IOWR进制数ⅢI。E而的宏定义中的base为外设在NiosII系统中的地址,町以往SOPCBuilder中找刮.也可以在systemh中拽到棚关的定义。0代表的是ADDRESS—SRC第五章系统性能优化寄存器映射的偏移地址。data为图像数据的起始地址。对于基于OpenCv的Ipllmage型图像结构体,可由data=(1pllmage’1image@imageData;获取。其中,image为软件调用时传递进来的待处理图像的Ipllmage型指针。定义好寄存器映射文件后,就可以正式编写驱动程序。以做一次x方向的Sobel边缘检测为例,需要利用前面的宏定义分别配置从接口寄存器。首先配置的是ADDRESSSRC,ADDRESSDST寄存器。接下来配置LENGTH寄存器,该寄存器存储的是待处理数据的长度(以字节为单位),可由length=image@width·image--)height;获得。晟后要配置的是CONTROL寄存器,该寄存器存储的是外设的工作模式,即采用何种算子进行图像处理,其最低位为开始工作的标志位(go_bit)。当寄存器都配置好了,NiosII需要不停地读取状态寄存器的值,如果读到的标志位变为1。则代表硬件已经完成处理任务,NiosII可以继续执行。关键代码如下;while(!(status)){status-IORD_ALTERA_AVALON_SOBEL_STATUS(SOBEL一0_BASE);j本设计最终测试平台选用DEI开发板,Nios11处理器工作于100MHz。原始图像为BMP图像,其size为200×270,深度为8位的灰度图像。采用工作于timestamp模式的定时器测得如下结果:若使用基于OpcnCv的库函数Sobel进行边缘检测共用时2,753,621“5。若使用本lP核执行,同样的操作只需要5,141ⅣJ。速度提高了大约536倍。原始图像和用硬件加速处理后得到的图像如图510所示。图510原始图片币顺什处理后的图片52双目立体视觉测距系统的研究5.4小结本章对比了基于FPGA的嵌入式平台在性能上与PC机的差距,说明针对嵌入式处理器NiosII进行优化的必要性。阐述了IEEE标准的浮点数表示和通过添加自定义指令方式优化浮点数运算的可行性,最后给出了逻辑实现浮点数取整的仿真结果图并给出优化后和优化前的时间效率对比。针对图像处理中边缘检测等常用又占用时间的运算采用硬件加速。根据图形处理的特点,设计独立完成图像处理任务的模块,在此基础上设计完成总线主接口模块和从接口模块以将该外设挂载在NiosII处理器的Avalon总线上。最后编写了驱动程序使得NiosII处理器可以调用该外设,提高处理速度。实验结果证明,该外设使得一次Sobel边缘检测与纯软件执行相比速度提高了约536倍。第八章总结与展望第六章总结与展望结合近年来计算机视觉的发展趋势和研究状况,本论文围绕双目立体视觉距离测量系统做了研究。在PC机平台上完成了双目立体视觉测距系统有关的理论分析与测试,并将其移植到基于FPGA的嵌入式平台,最后利用嵌入式处理器NiosII的特点对本设计进行性能优化。经过半年时间的研究与实践,已经基本完成了预定的设计任务。本论文完成过程中进行的主要工作及成果如下:1.了解了摄像机成像模型,在此基础上完成对双目视觉系统中两摄像机联合标定的研究和实验,提出了双目测距系统中对二维图像坐标进行三维重构的理论。2.研究了双目测距系统所需要获取的左、右图像上的特征点,确定以人眼瞳孔为待检测的目标特征点。提出了先检测人脸区域,再检测人眼区域的思想。分别给出了人脸检测和人眼检测方法和实验结果,并通过最终的双目测距实验,验证了前文所论述理论的正确性与可行性。3.分析了将双目测距系统在嵌入式平台实现的意义,设计了嵌入式系统的硬件功能架构。实现了PC机平台的算法正确移植在基于FPGA的嵌入式处理器Nios并同时将应用广泛的开源计算机视觉库OpenCv移植于NiosII。II,4.实现了对基于NiosII处理器的双目测距系统的优化。针对软件中频繁调用的浮点数取整函数cvRotmd和边缘检测等图像处理函数,利用FPGA平台和NiosII的特点,分别采用了自定义指令和自定义硬件加速外设等方法对嵌入式双目测距系统进行优化,提高了系统处理速度。通过本文的研究,本人熟悉了计算机视觉和嵌入式系统的开发流程,获得了许多软硬件开发和调试经验,使自己的科研能力有了很大提高。由于时间和本人能力有限,论文中仍存在不少需要进一步改进的地方:1.双目摄像机联合标定的理论研究不够成熟。本论文在其他论文中提出的单目摄像机标定的基础上加以改进,实现了双目摄像机标定,但理论上不够成熟。双目摄像机标定结果的精度将直接影响后续三维重构结果的精度,应加以改进。2.人脸区域检测的功能依赖于分类器,分类器和分类算法的鲁棒性决定了算法的实际应用的价值。而优秀的分类器和检测算法又占用较大的内存空间和执行时间,同时检测结果对摄像机与人的相对位置、光照效果都比较敏感。因此,选择一种有更好的鲁棒性、更加适宜检测人脸区域的方法是有必要的。3.考虑在嵌入式系统中实现将处理结果存储或者实时发送给上位机的功能。致谢致谢光阴似箭,转眼问三年的研究生生活就要结束了,在三年当中我取得的所有成绩和收获都离不开那些曾经给予我指导和帮助的人们。这里我向一直以来默默关心着我的亲人,老师,同学,朋友表示感谢。首先感谢导师胡方明教授,感谢胡老师在我三年的研究生生活中给予的无微不至的关怀和谆谆教导。感谢胡老师给我们提供了良好的学习环境,使我在学习工作中迅速的提高了自己;感谢胡老师在生活上对我的热切关怀,待人真诚,和蔼可亲,给我留下了很深的印象;感谢胡老师在学习上对我的帮助,胡老师以其精深的学术造诣给予了我悉心的指导,也熏陶了我工作学习的态度。没有胡老师的指导和帮助,本文是不可能顺利完成的。在此研究生即将毕业之际,我衷心的祝愿胡老师身体健康、事业有成!感谢罗明老师在课题研究方向上的指导,罗老师坚实的理论知识,严谨务实的工作态度,丰富的实践经验是我值得永远为之奋斗的目标。祝愿罗老师在以后的工作中一帆风顺!感谢初秀琴教授和任爱锋教授,在研究生的学习和科研生活中,自始至终得到了任老师和初老师的精心指导和热心关怀。任老师开阔的胸怀、深厚的学术造诣和诲人不倦的精神、初老师兢兢业业、细节入手的挚诚都深深地影响着我,使我一生受益匪浅。一直以来,我都为能有初老师和任老师这样的良师益友而感到骄傲。感谢马晓霞老师在生活上无微不至的关怀,她敬业、负责,待人友善,帮我们解决了很多生活上的问题,在此祝愿她身体健康、万事如意!感谢901室所有的师兄师姐师弟师妹们,他们在生活学习上给我提供了很大的帮助。祝他们学业有成,工作上宏图大展!.最后衷心感谢我的父母和亲人,是他们多年来我在求学的道路上给予我始终如一的关心和支持,使我充满信心的完成了学业。在未来的工作中,我一定不辜负这些曾经给予我关心和帮助的师长、父母和家人的殷切期望,尽职尽责地做好我的工作!参考文献57参考文献【l】周国清,唐晓芳.计算机视觉及应用.计算机用户.1996,13(8).3-6.【2】吴立德.计算机视觉.上海:复旦大学出版社,1993.4.·【3】MarrD.andConferenceonPoggioT.Acomputationaltheoryofhumanstereovision.IEEEDecisionandContr01.1979,6(12).301—328.StereoVisionforIntelligentRobots【4】ClarkEOlson,HabibAbi—Rached,SingYe.Wide—BaselineonMarsandRovers,Proceedingofthe2003IEEE/RSJIntl.ConferenceSystems.October2003.5-9.【5】A.Bensrhair,M.bertozzi.StereoVision-basedFeayureExtractionforVehicleDetection.MachineIntelligence.2001,25(3).465-470.【6】SungjinKIM,Seun西ooncrameusingElectronicstereoCHOL.TheCoilrecognitionsystemfor30mAnnualanunmannedvision.TheConferenceoftheIEEEindustrialSociety,November,Busan,Korea.2004.1235.1239.【7】祝琨,基于双目视觉信息的运动物体实时跟踪.北京:北京交通大学出版社,2008.8.9.[8】RosenfeldA.ComputerVision:Basic21(4).76.Principles.ProceedingoftheIEEE.1998,[9】游素亚,徐光祜.立体视觉研究的现状与进展.中国图像图形学报.1997.17.24.【10】JainR.Expensivevision.CVGIPimageUnderstanding.1994,5(1).86—88.[11】张广军.机器视觉.北京:科学出版社,2005.18.21.【12】马颂德,张正友.计算机视觉.计算机理论与算法基础.北京:科学出版社,1998.12.[13】YanYongiie,ZhuQidan,LinZhuang.CameraCalibrationinBinocularStereoonVisionofMovingRobot.ProceedingsoftheSixthWorldCongressControlIntelligentandAutomation.IEEERoboticsandAutomationSocietyPress.2006,34(3).9257.9261.[14】邱茂林,马颂德,李毅等.计算机视觉中摄像机标定综述.自动化学报.2000,26(1).43—55.[15】YakimovskyY,CunninghamR.Asystemforextractingthreedimensionalameasurementfromstereopairofcameras.ComputerGraphicsandImageProcessing.1978,8(7).195—210.【16】HallEJ,ioM.B.K,McphersonC.A.Curvedsurfacemeasurementandrecognition58双目立体视觉测距系统的研究forrobotvision.in:Proc.IEEEWorkshoponIndustrialApplicationofMachineVision.1982,27(9).2.[17】ZhangZhengyou.AlexiblenewtechniqueforcameracalibrationIEEEonTransactionpaRemAnalysisandMachineIntelligence.2000,31(2).1330—1334.【18】黄琛.基于距离模版的行人检测算法与研究.清华大学,2006.1.3.[19】FromherzT.FaceRecognition:ASummaryof1995·1997.TechRepICSITR一98—027.InternationalScienceInstitute,Herkekey.1998,9(2).3.[20】MasonR,BurdickJ.Experimentsincarangidformroboticfishlocomotion.Proe.IEEEInt.Conf.RoboticsandAutomation.NewYork.IEEEComputerSocietyPress.2000,31(15).428—435【21】LungP,wangYF.LocalScaleControlledAnisotropicDiffusionwithLocalNoiseEstimateforImageSmoothingandEdgeDetection.In:Procofthe6mInternationalConferenceonComputerVision,Bombay,India.1998,11(3).193-200.【22】李红.数字图像边缘检测算法研究.西安:西安电子科技大学出版社,2008.2.【23】PHough.Methods2003,24(3).1.【24】王田苗.嵌入式系统设计与实例开发.北京:清华大学出版社,2003.15.16.【25】任爱锋,初秀琴,常存等.基于FPGA的嵌入式系统设计.西安:西安电子科技大学出版社,2004.10.andmeansforRecongnizingComplexPatterns.USPatent.【26】幕春棣.嵌入式系统的构建.北京:清华大学出版社,2004.9.【27】彭澄廉.基于挑战SOC——基于NiosII的SOPC设计与实践.北京:清华大学出版社,2004.43-47.[28】许光辉,程东旭等.基于FPGA的嵌入式开发与应用.北京:电子工业出版社,2006.5-8.【29】蔡伟纲.NiosII软件架构解析.西安:西安电子科技大学出版社,2007.125.126.【30】刘瑞祯,于仕琪.OpenCv中文教程.北京:清华大学出版社,2007.7-9[31】王永山,杨宏五,杨婵娟.西安:西安电子科技大学出版社,1999.25—26.【32】Cblmjer.IEEE浮点数表示法.http://hi。baidu.com]cnlmjer/blog/item.2007.【33】江国强.SOPC技术与应用.北京:机械工业出版社,2006.119.123.【34】Altera.NiosIIProcessorImplementationandReference.http://www.altera.C2006lv5iin..5—2.pdfi.om/literature/hb/Nios112/n2cpu研究成果59研究成果在硕士研究生阶段,参加的科研项目:【l】核心网CGP软件平台组件一呼叫日志.【2】基于SOPC的数字图像处理IP核设计.
因篇幅问题不能全部显示,请点此查看更多更全内容