欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    基于手势识别的幻灯片控制系统的设计论文正文.doc

    • 资源ID:3940490       资源大小:674KB        全文页数:50页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于手势识别的幻灯片控制系统的设计论文正文.doc

    1 绪论 近年来,随着计算机性能的逐步提高和各领域对计算机使用的不断深入,人与计算机的交互活动越来越成为人们日常生活中的一个重要组成部分。而手势交互作为一种新的人机交互方式被越来越多地采用,特别是基于视觉的手势交互,由于其简单、自然、直观等特性已成为手势交互的重要方式之一。人的手势作为人们日常生活中最广泛使用的一种交流方式,手势识别的研究受到了越来越广泛的关注,然而由于手势本身具有的多样性、多义性,以及时间和空间上的差异性等特点,加之人手是复杂的变形体以及视觉本身的不适定性,使手势识别成为一个具有挑战性的多学科交义的研究课题。本论文就是主要围绕手势识别展开,针对手势识别和简单的幻灯片控制系统相结合,及在人机交互中的应用而加以论述。1.1 课题背景及意义 本课题来源于国家973计划项目“混合现实的理论和方法”子课题“虚实混合环境的驱动引擎技术与系统”(编号:2009CB320805)。随着计算机技术的迅猛发展,全世界进入了一个计算机时代。而这一时代的显著特点之一就是提供了一种新型的交互方式,即人机交互(Human-Computer Interaction)。这一新型交互方式的发展经历了分别由键盘和鼠标为主要工具的界面,虽然至今仍是以使用键盘和鼠标为主,但其使用过程中暴露出来的不便捷、不自然,在很大程度上限制了人机交互的进一步发展。所以,为了使计算机朝着高性能、高智能和高可靠性方面发展,我们需要更深度的研究人机交互活动。近几年,随着计算机技术的迅猛发展,研究自然和谐的人机交互技术(HCI)变得异常活跃,同时也取得了可喜的成就。 基于手势识别的交互活动在自然性和易用性上有其独特的优势,这也是该类交互方式成为研究热点的重要原因。而在手势识别中,因手势输入方式的不同也可分为诸多类,其中,以基于视觉的手势识别最为简易且有代表性。所以,如何基于视觉信息对手势进行识别是近来研究人员的关注所在。 手势,是一种普通的肢体语言,指人手或手臂有目的或有意义的运动。作为一种非常重要的交流方式,它不仅是对于口语的补充,其本身也是人类语言发展过程的一部分。也因此,手势在很多方面都有着十分重要的应用。特别是虚拟现实技术的发展,更进一步促进了手势识别的研究。虚拟现实技术作为一种新的人际交互技术,是指利用计算机技术生成虚拟的声音、图像等构成虚拟环境,刺激用户的感官,同时向用户提供三维输入技术,使用户能以日常生活的经验、技能与虚拟环境进行交互。 此外,随着多媒体技术的发展、计算机性能的不断提高,计算机己经具备了处理语音、图形、图像和文字等多种通信媒体的能力,从计算机到用户的通信带宽得到了进一步的提高。所以,未来计算机的发展方向必然是研究新的输入方式,进一步扩大通信带宽,提高计算机的性能,使用户更便捷的与计算机进行交互活动。其中手势识别技术是一种重要的研究内容,以手指的具体形态来标识的手势识别系统已经开始应用在诸多领域。当然,由于研究难度的限制,目前还有很大的空间可以研究。1.2国内外研究现状 基于手势识别的幻灯片控制系统是一个由众多需求引导、涉及多项技术难点、学科综合性强的课题。它不仅包括难点问题的研究,且需要把研究成果在平台上直接表现出来,还涉及到具体的实验验证,所以,研究的综合性很强。从目前的研究背景来看,诸多权威期刊杂志和会议不断涌现出研究相关知识的论文和新的解决方案。1.2.1 现状综述 手势识别的研究目的就是设计实现能够识别人的特定的手势,并以此来传递信息或控制设备的系统。手势识别的研究已经有四十多年的历史。最早的手势识别研究,是基于笔或鼠标之类的二维输入设备的书写识别。书写也可以看作是一种手势,因为书写其实就是手在二维平面上的手势。尤其在线书写(也称动态书写)识别和动态手势识别是同一问题,都是分析时空运动轨迹。而研究动态手势识别就是针对人拿着激光笔在白板上书写形成的手势进行的。严格意义的手势识别开始于基于跟踪器的手势识别,即通过在手上放置传感器,利用传感器传回的数据来进行的手势识别。典型的装置是数据手套,这种方式能够获得手势的精确数据,对手势做准确地分析。尽管这种基于被动感知方式的手势识别在特定应用场合也能够得到有效的使用,但是由于它的侵犯性和操作复杂性,很难在实际中被广泛使用。所以,研究人员开始逐渐关注主动感知方式的基于视觉的手势识别。基于视觉的手势识别,是指对视频采集设备拍摄到的包含手势的图像序列采用计算机视觉技术来处理,最终识别手势。基于视觉的手势识别在 1992 年左右才出现,因为这时才有了彩色视频采集设备,可以用来实时拍摄手势图像序列。在这之后,基于视觉的手势识别便得到了广泛地关注,研究人员对基于视觉的手势识别做了深入地研究。由于人手变形复杂,手势具有多样性和多义性,视觉问题本身存在各种困难,这些使得研究基于视觉的手势识别极富挑战性。研究人员一开始通过在人手上放置特定颜色的标记来简化问题,但是这种方法不方便用于在实际系统中,因此现在研究的重点是如何实现基于视觉的自由的人机交互。一般在设计实现基于手势识别的交互系统时,首先要根据需求而定义相应的手势集合,实现的系统会根据输入的具体手势实现相应的反应或相应的控制。一般的基于手势识别的交互系统会包含有以下几个部分:手势检测和跟踪;静态手势识别和动态手势识别。手势检测和跟踪就是将手势从采集到的图像或图像序列中检测出来,这是手势识别的第一步,包括手的检测和跟踪。静态手势识别针对从图像中检测并分割出来的手,可以识别出手的手形,而动态手势识别则是通过对图像序列中手势运动的跟踪,得到手的运动轨迹,然后根据手势在时间空间或特征状态空间的运动轨迹来区分不同的动态手势。1.2.2 现状分析目前,基于手势识别的人机交互界面分为操作性和交互性两类:一类是利用手势操作计算机中的虚拟对象;另一类则把手势作为计算机和人类的交流的语言。前者,手势操作的虚拟对象一般是计算机产生的图形,如模拟物体、控制面板设备、机器人的手臂、Windows 操作系统中的窗口等。在操纵这些虚拟对象时,会用到跟踪和识别这两项技术。后者,手势被看成是一个直接的交流手段,如美国的手语识别系统可以把手语翻译成语音,这样对于残疾的朋友尤其有意义。一个完整的基于手势识别的交互系统一般由以下几个部分构成。首先,通过摄像设备获取视频数据流,接着,系统根据手势输入的交互模型检测数据流里是否有预定义的手势出现,如果有,则把该手势从视频信号中分割出来。然后,选择手势模型进行手势分析,分析过程包括特征提取和模型参数估计。在识别阶段,根据模型参数对手势进行分类并根据需要生成手势描述,最后,系统根据生成的描述去做相应的控制或者输出识别结果。所以,手势识别的一般步骤可分为:手势分割;手势建模;手势分析;手势识别。而相关的基于手势识别的交互系统,则再根据自身设计的需求进行下一步的设计即可,也就是再将识别出的结果和相应的控制系统相结合,最终达到利用手势控制设备或者其他系统的效果。其中,对于核心的手势识别部分,从识别技术来看,以往的交互系统主要采用基于人工神经网络(ANN),隐 Markov 模型(HMM)和几何边缘特征等方法。模板匹配技术这是一种最简单的识别技术,它将输入的原始数据与预先存储的模板进行匹配,通过测量两个模板之间的相似度来完成识别任务。基于神经网络的手势识别该方法目前广泛应用于静态手势的识别。神经网络是一种大规模并行处理网络,由许多具有非线性映射能力的神经元组成,神经元之间通过权相连,神经网络能实现复杂的非线性映射,映射关系是通过学习(或训练)得到的,神经网络具有很高的计算速度、很强的容错性和鲁棒性,特别适合用于模式识别。神经网络是一种具有高度非线性的超大规模连续时间动力学系统,它的出现标志着人们智能信息处理能力和模拟人脑智能行为能力的一大飞跃。 基于 HMM 的手势识别对于分析区间内的手势信号,通常采取 HMM 方法进行模型化。该技术在动态手势识别领域一直占有主导地位,然而由于 HMM 拓扑结构的一般性,导致这种模型在分析手语信号时过于复杂,使得 HMM 训练和识别计算量过大,尤其是在连续的 HMM 中,由于需要计算大量的状态概率密度,需要估计的参数个数较多,使得训练及识别的速度相对较慢,因而以往手语识别系统所采用的 HMM 一般为离散 HMM。 基于几何矩的手势识别一幅图像可以被认为是一个二维密度分布,那么与空间位置有关的像素值的几何矩函数,就能够提供该图像的形状信息,例如,图像的总面积、图像矩心的坐标以及图像的方位。这些形状特点能被进一步用于构造特征向量,而这些特征向量在图像的平移、旋转、尺度变化时保持不变。这样就能够通过计算原始图像中的一系列几何矩和标准模板库中的几何矩的点乘距离进行判断。手势识别技术在过去的几年的研究成果中主要使用的是 KL 变换、神经网络方法及几何矩,这些方法在拥有较少图像的图像库中识别率较高,但是对于较大的识别库,它的识别率就比较低,因此有待于研究新的适应性强、实用性好的识别算法。1.3 课题目标及内容1.3.1研究目标本课题的研究目的是对现有的手势识别算法进行综合、改进,并与现有的幻灯片控制技术结合,得到一个以手势变换来控制幻灯片的系统,同时根据得到的系统,设计一个虚拟交互环境,来实现真实世界物体与虚拟环境的互动。本课题旨在完成的任务是在目前现有研究技术的基础上,熟悉掌握相关的手势识别知识,并结合大学日常学习生活中较为常见的一种应用软件幻灯片的有关知识,将幻灯片控制与手势识别结合,做成一种简易的人际交互系统,以此进一步加深对人际交互活动的理解,并能够熟悉相关方面的知识。1.3.2 研究内容本课题主要完成将现有的幻灯片控制函数在手势识别后加以调用,使之产生特定的控制效果。系统首先利用摄像头采集用户的手势信息,然后将采集到的信息储存,加以处理,并提取其中的有用信息,与预定义的手势信息加以匹对,如果匹对成功,则调用相应的手势信息所控制的函数(用以控制幻灯片的),从而实现手势控制幻灯片。由于手势的多义性和复杂性,本课题研究时,将特定的三个手势(静态)作为预定义的手势信息,用三种手势之间产生的六种变换实现不同的幻灯片控制功能。同时将相应的控制函数包含在一个总对话框的按钮的定义中,实现可视化的控制。1.4 论文组织结构论文共分为6章,组织结构如下:第一章:绪论。本章介绍了课题研究背景与意义、国内外研究现状、课题的研究内容和目标。概述了手势识别及其相关技术的发展和分类,并进行了国内外研究现状分析。第二章:主要应用技术。介绍了本系统在实现过程中所涉及到的主要技术,以及这些技术的总体概况、最新研究进展情况。阐述了诸如手势图像的处理、提取、分析(图像Hu矩的计算);SVM技术的应用和OpenCV相关知识。第三章:系统总体结构及功能划分。本章主要介绍系统的总体架构和各个模块的功能划分,对每个具体模块涉及的问题进行了介绍。第四章:手势识别的设计与实现。介绍了系统的设计方式及手势识别模块的具体实现方法。详细阐述了各主要算法的工作原理,及在本系统中的实现方式、注意细节。 第五章:接口模块的设计与实现。本章主要是做一个接口,将手势识别模块与幻灯片控制模块联系在一起,使系统能够通过手势达到控制幻灯片的目标。本章还介绍了MFC窗口的部分知识及其OpenCV窗口的前端显示问题和解决办法。第六章:系统测试。本章主要对系统的功能及性能进行测试。2 背景技术本章主要介绍了在实现手势识别中手势图像采集及处理分析所用到的主要技术,主要包括C+编程技术、MFC(微软基础类)相关知识、OpenCV所涉及的相关知识和支持向量机(SVM)的相关知识等。另外,本章还分别介绍了这些技术的研究背景、现状及以后的发展方向。2.1 C+编程技术C+是一种使用非常广泛的计算机编程语言。它是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。2.1.1 C+的编程原则由于C+本身使用的广泛性和代表性,熟悉继而掌握这门编程语言是十分重要的。C+语言在设计时有一定的原则,可以帮助我们很好的理解和掌握它的编程技术,也同时培养了我们的良好的编程习惯。这些原则主要有: C+设计成静态类型、和C同样高效且可移植的多用途程序设计语言。 C+设计成直接的和广泛的支援多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。 C+设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。 C+设计成尽可能与C兼容,籍此提供一个从C到C+的平滑过渡。 C+避免平台限定或没有普遍用途的特性。 C+不使用会带来额外开销的特性。 C+设计成无需复杂的程序设计环境。出于保证语言的简洁和运行高效等方面的考虑,C+的很多特性都是以库(如STL)或其他的形式提供的,而没有直接添加到语言本身里。2.1.2 C+的编程技巧和应用C+在编程中有诸多的设计技巧,可以方便使用者熟悉和掌握。这些技巧都有:使用new和delete进行动态内存分配和释放 运算符new和delete是C+新增的运算符,提供了存储的动态分配和释放功能。它的作用相当于C语言的函数malloc()和free(),但是性能更为优越。使用new较之使用malloc()有以下的几个优点: (1)new自动计算要分配类型的大小,不使用sizeof运算符,比较省事,可以避免错误。(2)自动地返回正确的指针类型,不用进行强制指针类型转换。(3)可以用new对分配的对象进行初始化。举例如下:(1)int* p;p=new int10; /分配一个含有10个整数的整形数组delete p; /删除这个数组(2)int* p;p=new int (100);/动态分配一个整数并初始化使用inline内联函数替代宏调用对于频繁使用的函数,C语言建议使用宏调用代替函数调用以加快代码执行,减少调用开销。但是宏调用有许多的弊端,可能引起不期望的副作用。例如宏:#define abs(a)(a)<0?(-a):(a), 当使用abs(i+)时,这个宏就会出错。所以在C+中应该使用inline内联函数替代宏调用,这样既可达到宏调用的目的,又避免了宏调用的弊端。使用内联函数只须把inline关键字放在函数返回类型的前面。例如:inline int Add(int a,int b);/声明Add()为内联函数这样编译器在遇到Add()函数时,就不再进行函数调用,而是直接嵌入函数代码以加快程序的执行。使用函数重载在C语言中,两个函数的名称不能相同,否则会导致编译错误。而在C+中,函数名相同而参数数据类型不同的两个函数被解释为重载。例如:void PutHz(char* str);/在当前位置输出汉字void PutHz(int x,int y,char * str);/在x,y处输入数字使用函数重载可以帮助程序员处理更多的复杂问题,避免了使用诸如intabs()、fabs()、dabs()等繁杂的函数名称;同时在大型程序中,使函数名易于管理和使用,而不必绞尽脑汁地去处理函数名。同时必须注意,参数数据类型相同,但是函数返回类型不同的两个函数不能重载。用引用(reference)代替指针进行参数传递在C语言中,如果一个函数需要修改用作参数的变量值的时候 ,参数应该声明为指针类型。例如:void Add(int *a) (*a)+;调用时则使用Add(&x); /其中x为int或可以转化为int的类型,如unsigned int, 但这时候编译器通常会给出warning对于复杂的程序,使用指针容易出错,程序也难以读懂。在C+中,对于上述情况 可以使用引用来代替指针,使程序更加清晰易懂。引用就是对变量取的一个别名,对引用进行操作,这就相当于对原有变量进行操作。例如使用引用的函数定义为:void Add(int& a)a+;/a为一个整数的引用调用时使用Add(x);/其中x为int这个函数与使用指针的上一个函数的功能是一样的,然而代码却更为简洁和清晰易懂。使用缺省参数在C+中函数可以使用缺省参数,例如:void PutHzxy(char *str,int x=-1, int y=-1)if(x=-1)x=wherex();if(y=-1)x=wherex();moveto(x,y);PutHx(str);可以有三种方式调用函数PutHzxy(),例如:PutHzxy("C+语言");/使用缺省参数,在当前位置输出PutHzxy("C+语言",10,10);/没有使用缺省参数PutHzxy("C+语言",10);/对y使用缺省参数,指定x的位置通常的情况下,一个函数应该具有尽可能大的灵活性。使用缺省参数为程序员处理更大的复杂性和灵活性问题提供了有效的方法,所以在C+的代码中都大量地使用了缺省参数。需要说明的是,所有的缺省参数必须出现在不缺省参数的右边。亦即,一旦开始定义缺省参数,就不可再说明非缺省的参数。否则当你省略其中一个参数的时候,编译器无法知道你是自定义了这个参数还是利用了缺省参数而定义了非缺省的参数。例如:void PutHzxy(char*str,int x=-1,int y=-1)/正确void PutHzxy(int x=-1,int y=-1,char*str)/错误使用STLSTL(Standard Template Library,标准模板库), STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),并包括一些工具类如auto_ptr。几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。#include<vector>/ 包含相关的头文件/typedef std:vector<int> intvector;/使用typedef 使代码看起来更简洁int main()intvector vi;for(int i=0;i<10,i+)vi.push_back(i);/使用push_back添加元素for(int i=0;i<vi.size();i+)std:cout<<vii<<" "/操作符被重载,使得我们可以像访问数组一样访问vector中的元素2.2 MFC简介2.2.1 MFC简述MFC是一个编程框架。MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C+提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。针对不同的应用和目的,程序员采用不同的模板。例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板,等等。这些模板都采用了以文档-视为中心的思想,每一个模板都包含一组特定的类。为了支持对应用程序概念的封装,MFC内部必须作大量的工作。例如,为了实现消息映射机制,MFC编程框架必须要保证首先得到消息,然后按既定的方法进行处理。总之,MFC封装了Win32 API,OLE API,ODBC API等底层函数的功能,并提供更高一层的接口,简化了Windows编程。同时,MFC支持对底层API的直接调用。MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。MFC是C+类库,程序员就是通过使用、继承和扩展适当的类来实现特定的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是C+对继承的支持,对虚拟函数的支持,以及MFC实现的消息映射机制。MFC类库提供了一组通用的可重用的类库供开发人员使用。大部分类均从CObject 直接或间接派生,只有少部分类例外。MFC 应用程序的总体结构通常由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。MFC 提供了MFC AppWizard 自动生成框架。Windows 应用程序中,MFC 的主包含文件为"afxwin.h"。此外MFC的部分类为MFC/ATL 通用,可以在Win32 应用程序中单独包含并使用这些类。2.2.2 重要的MFC 有一些重要的MFC应用如下:CWnd 窗口,它是大多数“看得见的东西”的父类(Windows里几乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图CView、框架窗口CFrameWnd、工具条CToolBar、对话框CDialog、按钮CButton,等等;一个例外是菜单(CMenu)不是从窗口派生的。CDocument 文档,负责内存数据与磁盘的交互。最重要的是OnOpenDocument(读入),OnSaveDocument(写盘),Serialize(读写)。CView 视图,负责内存数据与用户的交互。包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。最重要的是OnDraw(重画窗口),通常用CWnd:Invalidate()来启动它。另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。CDC 设备文本。无论是显示器还是打印机,都是画图给用户看。这图就抽象为CDC。CDC与其他GDI(图形设备接口)一起,完成文字和图形、图像的显示工作。把CDC想象成一张纸,每个窗口都有一个CDC相联系,负责画窗口。CDC有个常用子类CClientDC(窗口客户区),画图通常通过CClientDC完成。CDialog 对话框。CWinApp 应用程序类。似于C中的main函数,是程序执行的入口和管理者,负责程序建立、消灭,主窗口和文档模板的建立。最常用函数InitInstance():初始化。CGdiObject及子类,用于向设备文本画图。它们都需要在使用前选进DC。CPen 笔,画线。CBrush 刷子,填充。CFont 字体,控制文字输出的字体。CBitmap 位图。CPalette调色板。CRgn 区域,指定一块区域可以用于做特殊处理。CFile 文件。最重要的不外是Open(打开),Read(读入),Write(写)。CString 字符串。封装了C中的字符数组,非常实用。CPoint 点,就是(x,y)对。CRect 矩形,就是(left,top,right,bottom)。CSize 大小,就是(cx,cy)对(宽、高)。2.3 OpenCV简介2.3.1 OpenCV概述OpenCV的全称是:Open Source Computer Vision Library,是Intel公司支持的开源计算机视觉库。它轻量级而且高效由一系列 C 函数和少量 C+ 类构成,实现了图像处理和计算机视觉方面的很多通用算法,功能涵盖图像处理、计算机视觉和模式识别等领域。OpenCV实现了大量通用算法,涉及到图像处理、结构分析、运动检测、摄像机定标、三维重建以及机器学习等方面,并有较高的运行效率。OpenCV 拥有包括 300 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库尽管也可以使用某些外部库。它对非商业应用和商业应用都是免费的。OpenCV 为Intel® Integrated Performance Primitives (IPP) 提供了透明接口。 这意味着如果有为特定处理器优化的的 IPP 库, OpenCV 将在运行时自动加载这些库。首先有必要简单介绍一下计算机视觉的有关知识。计算机视觉(computer vision)是在数字图像处理的基础上发展起来的新兴学科,它从信息处理的层次研究视觉信息的认知过程,研究视觉信息处理的计算理论和表达与计算方法,包括图像特征提取,摄像机定标,立体视觉,运动视觉(或称序列图像分析),由图像灰度恢复三维物体形状的方法,物体建模与识别方法以及距离图像分析方法等方面。作为一门综合性的交叉学科,计算机视觉处理的领域涉及到计算机科学与工程、信号处理、物理学、应用数学与统计学以及神经生理学与认知科学等方面,并在制造业、检验、文档分析、医疗诊断和军事等领域的各种智能自主系统中有着广泛的应用。然后再介绍一下OpenCV的几点特征。OpenCV作为开放的数字图像处理和计算机视觉软件平台,有以下特点: 开放C源码。 基于Intel处理器指令集开发的优化代码。 统一的结构和功能定义。 强大的图像和矩阵运算能力。 方便灵活的用户接口。 同时支持MSWindows和Linux平台。作为一个基本的计算机视觉、图像处理和模式识别的开源项目,OpenCV可以直接应用于很多领域,作为二次开发的理想工具。2.3.2 OpenCV的编程OpenCV具有十分强大的功能,主要包括:1)对图像数据的操作,包括分配、释放、复制、设置和转换数据;2)对图像和视频的输入输出,指文件和摄像头作为输入,图像和视频文件作为输出;3)具有对矩阵和微量的操作以及线性代数的算法程序,包括矩阵积、解方程、特征值以及奇异值等;4)可对动态数据结构,如列表、队列、集合、树和图等进行操作;5)具有基本的数字图像处理能力,如进行滤波、边缘检测、角点检测、采样与差值、色彩转换、形态操作、直方图和图像金字塔等操作;6)可对各种结构进行分析,包括连接部件分、轮廓处理、距离变换、各种距的计算、模板匹配、Hough变换、多边形逼近、直线拟合,椭圆拟合和Delaunay三角划分等;7)对摄像头的定标,包括发现与跟踪定标模式、定标、基本矩阵估计、齐次矩阵估计和立体对应;8)对运动的分析,如对光流、运动分割和跟踪的分析;9)对目标的识别,可采用特征法和隐马可夫模型(HMM)法;10)具有基本的GUI功能,包括图像与视频显示、键盘和鼠标事件处理及滚动条等;11)可对图像进行标注,如对线、二次曲线和多边形进行标注,还可以书写文字;OpenCV 的主要模块有:cv主要的OpenCV 函数;cvaux辅助的(实验性的)OpenCV 函数;cxcore数据结构与线性代数支持;highgui图像界面函数。下面介绍一些OpenCV编程时的特点。函数命名: cvActionTargetMod(.) Action = 核心功能(例如 设定set, 创建create)Target = 操作目标 (例如 轮廓contour, 多边形polygon) Mod =bit_depth>(S|U|F)C<number_of_channels> S = 带符号整数 U = 无符号整数 F =bit_depth>(S|U|F)窗口管理的一些函数: 创建并放置一个窗口: cvNamedWindow("win1", CV_WINDOW_AUTOSIZE); cvMoveWindow("win1", 100, 100); / 以屏幕左上角为起点的偏移量读入图像: IplImage* img=0; img=cvLoadImage(fileName);if(!img) printf("Could not load image file: %sn",fileName);显示图像: cvShowImage("win1",img);可显示彩色或灰度的字节/浮点图像。 彩色图像数据认定为BGR顺序. 关闭窗口: cvDestroyWindow("win1");改变窗口尺寸: cvResizeWindow("win1",100,100); / 新的宽/高值(象素点)再介绍一些图像转换的函数:转为灰度或彩色字节图像: cvConvertImage(src, dst, flags=0);src = float/byte grayscale/color imagedst = byte grayscale/color imagelags = CV_CVTIMG_FLIP (flip vertically)CV_CVTIMG_SWAP_RB (swap the R and B channels)转换彩色图像为灰度图像: 使用OpenCV转换函数: cvCvtColor(cimg,gimg,CV_BGR2GRAY); / cimg -> gimg直接转换: for(i=0;i<cimg->height;i+) for(j=0;j<cimg->width;j+) gimgAij= (uchar)(cimgAij.b*0.114 + cimgAij.g*0.587 + cimgAij.r*0.299);从视频序列中抓取一帧:OpenCV支持从摄像头或视频文件(AVI)中抓取图像.从摄像头获取初始化: CvCapture*capture=cvCaptureFromCAM(0);/capture from video device #0从视频文件获取初始化: CvCapture* capture = cvCaptureFromAVI("infile.avi");抓取帧: IplImage* img = 0; if(!cvGrabFrame(capture) / 抓取一帧printf("Could not grab a framen7");exit(0);img=cvRetrieveFrame(capture); / 恢复获取的帧图像2.4 支持向量机(SVM)简介支持向量机(Support Vector Machine)简称 SVM,是统计学习理论中较年轻的内容,也是最实用的部分,目前仍处在不断发展阶段。它是Vapnik等人根据统计学习理论提出的一种新的机器学习方法,它以结构风险最小化原则为理论基础,通过适当选择函数子集及该子集中的判别函数使学习机的实际风险达到最小,保证了通过有限训练样本得到的小误差分类器对独立测试集的测试误差仍然最小,得到一个具有最优分类能力和推广泛化能力的学习机。该方法从样本集中选择一组特征子集,使得对于特征子集的划分等价于对整个样本集的分割,这组特征子集称为支持向量(SV)。SV 尽管数量少,但却包含了分类所需的信息。SVM的主要思想可以概括为两点: (1) 它是针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分,从而 使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能;(2) 它基于结构风险最小化理论之上在特征空间中建构最优分割超平面,使得学习器得到全局最优化,并且在整个样本空间的期望风险以某个概率满足一定上界。SVM的一般特征主要有:(1)SVM学习问题可以表示为凸优化问题,因此可以利用已知的有效算法发现目标函数的全局最小值。而其他分类方法(如基于规则的分类器和人工神经网络)都采用一种基于贪心学习的策略来搜索假设空间,这种方法一般只能获得局部最优解。 (2)SVM通过最大化决策边界的边缘来控制模型的能力。尽管如此,用户必须提供其他参数,如使用核函数类型和引入松弛变量等。 (3)通过对数据中每个分类属性引入一个哑变量,SVM可以应用与分类数据。(4)SVM不仅可以用在二类问题,还可以很好的处理多类问题。2.5 本章小结本章主要介绍了再这次系统的设计中能用到的背景技术的大致情况。如C+编程中的一些技巧和注意的地方;MFC的概况和几个重要的MFC应用;OpenCV的概述及编程中的注意事项;支持向量机(SVM)的简单介绍和一般特征。3 系统总体结构和功能划分本章将详细讲述系统的总体结构,以及系统各模块的功能。3.1 系统总体结构本系统主要完成使用摄像头采集使用者的手势,并将手势加以处理后计算其Hu矩特征,然后根据训练的SVM模型进行预测匹配,同时将手势识别模块与简单的幻灯片控制按钮功能相结合,在匹配成功后,调用相应的函数,控制幻灯片的翻页操作。系统首先要做好一个幻灯片的控制系统(在简单的对话框上添加控制按钮即可完成),再做一个接口将之与手势识别部分结合起来,然后将摄像头采集到的图像信息处理后提取几何矩特征,再将训练好的SVM模型加载进去,加以预测匹配,进行相应的操作。本系统的总体结构如图3-1所示:图3-1 系统总体结构Fig.3-1 System general structure在图3-1中,手势识别主要包括手势图像的获取,提取后图像的预处理(包括灰度化和二值化处理),图像几何矩的提取,SVM模型的训练以及最后的匹对。获取手势图像是由与PC机相连的摄像头捕捉,其余的工作则主要由计算机完成。而在手势识别这一大的模块,又可细分出很多问题。用摄像头捕捉人的手势,有一个如何获取准确手区域的问题,另外还要对采集到的图像进行预处理,此外光照对于图像获取的影响也很大,如何尽量小的减小其他的干扰也是个问题。我们可以采用转换色彩空间然后灰度化的方法来克服光照的影响,而在各种二值化的方法中,我们选择Ostu的全局自动阈值分割法获取手所在区域,然后采用灰度投影的办法获取准确的手区域。然后就是对于静态图像的处理问题,如何提取有效的图像特征是一个难点,在几种相关的图像描述方法中我们选择矩描述子来提取手区域图像的特征。另外我们对于SVM的训练模型如何使用以及SVM在整个统计最小化理论中如何体现其优势都需要加以研究和掌握。进而需要将手势识别模块嵌入到幻灯片控制模块中。 这需要一个接口,我们通过设置中间变量来传递特征值,实现当图像状态发生改变时

    注意事项

    本文(基于手势识别的幻灯片控制系统的设计论文正文.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开