毕业论文-小型旋翼飞行器的图像识别_第1页
毕业论文-小型旋翼飞行器的图像识别_第2页
毕业论文-小型旋翼飞行器的图像识别_第3页
毕业论文-小型旋翼飞行器的图像识别_第4页
毕业论文-小型旋翼飞行器的图像识别_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

小型旋翼飞行器的图像识别摘要四旋翼飞行器体积小,结构简单,操作容易,飞行灵活。其特殊的飞行特点使其在军用和民用方面均有很大的用途。而图像识别部分则为四旋翼飞行器的关键部分,本文旨在对飞行器飞行过程中图像识别部分做详细的介绍,并介绍基于opencv平台的图像处理的特点及实例。一,绪论1小型四旋翼飞行器的研究现状无人飞行器(UAV)是近些年的一个热点,无论在民用还是在军用市场,无人飞行器都展现出了其巨大的应用潜力与价值,如低空侦察,救灾抢险,地面监视等。由于无人飞行器具有机动性好,续航能力强,隐蔽性高,成本低等特点,其在军事民用等方面的地位不断提高,同时无人飞行器的研究趋势也向小型化发展。人类历史上很早就有飞翔于天空的梦想,比如许多古老的神话中传说人类插上鸟类一样的一对翅膀,而相比于鸟类一样的翅膀类的飞机,直升机的研究历史要短得多,最早出现直升机的概念是在中国,在1490年,达芬奇第一次对直升机进行了实质性的开发。1863年共轴直升机的模型和操作方法被设计出来,1877年出现了第一台蒸汽动力的直升机,1887年出现了第一台电力驱动的直升机,直到1907年由法国人Louis,JacquesBrequet和Richet制造了第一台电力驱动的直升机才成功起飞。这架直升机的名字叫Brequet—Richet。该直升机在“十”字形机架的顶端分别安装了四只旋翼,分为逆时针旋翼组和顺时针旋翼组,这样可以抵消旋翼旋转带来的反扭矩。虽然试飞结果不尽如人意,但这是第一次采用螺旋桨的正反旋转来抵消反扭矩的思想,为之后的研究工作提供了很重要的思想和宝贵的经验。在第一架直升机升空后的几年,陀螺仪的发明保证了直升机的平稳,于是加速了无人机的产生。如今,无人机的研究趋于小型化,自动化,空气动力学的研究以及新能源的开发利用等。在20世纪的前半个世纪里比较有成果的研究是在1921至1922年间,美国军方为了提高无人侦察的能力与GeorgedeBothezat和IvanJerome共同设计制造的一种军用四旋翼飞行器。尽管由于能源动力不足,机械结构机构复杂等诸多因素的限制并没有达到设计要求的功能和性能指标,但其进行的数百次试验,积累了大量的飞行数据,对后来的研究起到了很大的帮助,但美国军方最终放弃了该计划。其后在1924年,四旋翼飞行器的实际应用的可能性才得到证实,一架名为Oemichen的四旋翼飞行器试飞成功,并首次完成了1千米以上的长距离飞行,这在四旋翼飞行器的发展史上具有里程碑的意义。其后30余年里四旋翼飞行器的研究并未出现有意义的进展,直至1956年美国的一架飞行器叫Converawings从飞行器的动力系统和机械结构方面进行优化改良设计,同时对控制方法进行完善,尽管没有得到推广和应用,却在飞行性能方面较好的满足了设计的要求。在之后的数十年里,四旋翼飞行器的研究又进入了一个停滞期,但近些年来,国内外很多高校和公司都对小型四旋翼飞行器进行了大量的研究工作,其中包括四旋翼飞行器机械设计的研究,自动导航的研究,避障功能的研究等,随着很多学术论文的发表,四旋翼飞行器又开始引起人们的兴趣并走入公众的视野里,尤其是在结构上进行优化,并在动力学功能特性发面进行了深入的研究,此外,不断尝试着新的控制方法。基于控制技术的发展,和导航类元件的推行普及,小型四旋翼飞行器已经能够在电力电子系统的帮助下实现完全全方位自主飞行。现在,在复杂的情况下实现全自主飞行仍然是一个艰难的课题,由于结构发展趋于完善,研究方向也集中到了飞行和导航控制领域。2,计算机视觉的发展四旋翼飞行器在飞行过程中要时刻获知自身的位置,图像处理与识别部分发挥着至关重要的作用。在四旋翼飞行器结构的不断优化中与技术的不断成熟中,数字图像处理技术也不断发展,在上世纪五十年代,从统计模式识别开始,计算机视觉主要集中在二位图像分析与识别,主要应用包括符号识别,工件表面检测等等。在上世纪六十年代,其发展到了三维结构,对物体的形状,物体间的空间位置关系进行描述。由对积木世界进行的的研究,引出了边缘,角点等特征提取,图像明暗,纹理,运动及几何成像等研究工作。上世纪七十年代,Marr计算视觉理论,建立一个十分重要的理论框架。九十年代,图像分割算法以及脸部分割算法有了进一步的改进和提高。近些年来,随着人们研究热情的提高,物体的3D结构重构,处理实时性的探索以及场景复杂化的处理等都有着明显的进步,计算机视觉技术正向着多元化的发展。随着机器人技术的兴起,能过模拟人类功能感知外部环境并有效解决人所能解决的问题的智能机器人逐渐成为人们研究的热点,在人类的感知器官中,视觉获取的信息量最大大约占百分之八十,因此对于智能机器人而言,赋予机器人以人类的视觉功能是非常必要的。视觉过程的处理大致可分为三个阶段:在底层处理中是特征提取与区域分割,主要是基于物体的轮廓,纹理,颜色,等信息的处理;在中层处理中是建模与模式表达,主要是基于各种物体的抽象化的模型的信息;高层处理的描述和理解,主要是基于对景物的结构知识。计算机视觉的研究内容,主要在以下几个方面:输入设备的研制;输入原始图像的预处理;确定物体类型;结构描述;用途实现。输入设备(inputdevice)进行研发,包括了成像设备的研制和数字化设备的研制。成像设备的原理是指通过光学摄像机或红外,激光,超声,X射线对周围物体进行探测成像等,得到关于场景的数字化而为或者三维图像。对输入的原始图像进行图像预处理。在这一过程借用了很多的图像处理技术和算法,如图像滤波,图像增强,边缘检测等,以从图像中抽取诸如角点,边缘,线条,边界,特征点,以及色彩等关于场景的基本特征;在这一过程中还包含了各种图像变换(如矫正),图像纹理检测,图像运动检测等等。根据计算机预先存储的模型知识以及形状,色彩等特征,对于图像中各种物体进行识别,确定他们属于那一类物体。建立各个图像中物体的拓扑关系图,给出图像所反映景物的结构描述。体系结构(systemarchitecture),设计一系列相关的课题,并行结构,分层结构,信息流结构,拓扑结构,以及从设计到实现的途径。伴随着计算机技术的发展,图像处理技术也得到了巨大的发展和应用。目前,图像处理技术相关领域的重要核心课程。3四旋翼飞行器的优势在各种类的飞行器中,四旋翼飞行器,软式飞船有着别于其他种类的优势。他们的优势主要表现在可以垂直起落,并且稳定的悬停在空中在缓慢的飞行速度下飞行。软式飞船最优于其它类的优势在于它可以自动升空并且可以用最简单的方法来控制飞行路线。但是四旋翼飞行器相对于软式飞船来说可以做到小型化,这一点对无人机的开发是非常重要的。同轴飞行器的发展要比单发动机飞行器要晚的多,这与同轴飞行器复杂的斜盘有很大的关系。但是当空间十分有限的时候,同轴飞行器相对的的优势就体现出来了,这种优势在无人机领域中很重要。同轴飞行器上下两个螺旋桨反方向转动使飞行器的转动扭矩问题得以解决,上下转动速度不同用来控制飞行器水平旋转,发动机转速可以控制飞行器上升以及下降,斜盘机制可以控制飞行器前后左右平移。同轴飞行器符合无人机系统的要求,然而他的复杂的斜盘结构会给开发者带来很大困扰。第二章,图像处理的方法概要图像处理的方法多种多样,一般可分为图像变换,图像增强与复原,图像分割,图像压缩编码,图像描述和图像识别等几类。1,图像变换由于图像阵列很大的原因,直接在空间域中进行处理会造成涉及的计算量很大,利用正交变换(如傅立叶变换,余弦变换等)的特点,将图像变换到频域中进行处理,不仅可以减少计算量,而且可以获得更有效的处理,如傅立叶变换可以在领域中进行数字滤波处理。目前新兴研究的小波交换在时域和频域中都具有良好的局部化特性,它在图像处理过程中也有着广泛的应用,该部分主要研究各种变换模型和主要方法。2,图像增强和复原图像增强和图像复原都是为了提高图像的质量1)图像增强。利用各种数学方法和变换手段来提高图像中目标与非目标(如背景)的对比度与清晰度,以便达到突出目标,有效的表示和提示图像,以利于人或机器来进行分析处理图像问题的目的。该部分内容主要研究各种增强模型和处理方法。2)图像复原。在景物的成像过程中,由于存在成像设备与物体的相对运动,介质散射,系统畸变(如成像系统的不确定性变焦、成像器材的固有缺陷等问题)、噪声干扰等因素会造成图像质量降低,将此过程称之为“退化”最典型现象是输入的图像模糊。使退化的模糊的图像恢复原来的面目真实反映原景物图像的处理称为图像复原。该部分的内容主要研究各种校正模型,解决方法等。图像增强不把图像降质的原因考虑在内,要突出图像中所感兴趣的部分。如对图像高频分量进行强化可使图像中的物体轮廓更清晰,细节明显。对低频分量的强化,可使图像中噪声影响减少。图像复原需要了解图像降质的原因,一般而言,建立“降质模型”要根据降质的原因,再采用滤波方法等,恢复或重建原来的图像。3)图像压缩编码将数字化的图像数据按一定规则进行排列或运算的过程称为图像编码。内于图像的数据量很大存储要占很大的空间传输也要花费不少时间为此利用图像本身的内在特性(如像素灰度值之间的相关性)按某种特殊方式编码以压缩总的信息量称之为图像压缩编码。该部分主要研究各种高效压缩编码方法。压缩可以在不失真的前提下获得也可以在允许的失真条件进行。编码是压缩技术中最重要的方法它在图像处理技术中是发展最早且比较成熟的技术。4)图像分割图像分割是数字图像处理中的关键技术之—。图像分割是将图像中有意义的特征部分提取出来其有意义的特征有图像中的边缘、区域等这是进一步进行图像识别、分析和理解的基础。虽然目前已研究出不少边缘提取、区域分割的方法但还没有一种普遍适用于各种图像的有效方法。因此对图像分割的研究还在不断深入之中是目前图像处理中研究的热点之一。5)图像描述图像描述是图像识别和理解的必要前提。作为最简单的二值图像可采用其几何特性描述物体的特性一般图像的描述方法采用二维形状描述它有边界描述和区域描述两类方法。对于特殊的纹理图像可采用二维纹理特征描述。随着图像处理研究的深入发展已经开始进行三维物体描述的研究提出了体积描述、表面描述、广义圆柱体描述等方法。3,数字图像系统简介数字图像处理系统是一款简单而又实用的灰度级图像处理软件,是基于Windows平台的应用程序,利用VisualC++6.0的编译环境提高了系统的开发速度,实现数字图像的查看与编辑操作。主要内容有:图像文件的打开和保存,实现了对灰度级图像的操作。图像的几何变换,实现对图像文件的旋转、缩放、以及镜像处理。图像增强和复原,实现对降质的图像进行改善处理和提高图像质量的逼真度。图像的边缘检测和分割产生更适合人观察和识别的图像。图像编码对图像采用不同的表达方法以减小表示图像所需的数据量。4,数字图像处理系统开发技术基础c++语言的优点C语言是一个面向对象的语言,使用C编写的代码更加简捷、高效更具可维护性和可重用性。C++语言的优点主要有以下几点:1、使用new和delete进行动态内存分配和释放运算符new和delete是C新增的运算符提供了存储的动态分配和释放功能。它的作用相当于C语言的函数malloc和free但是性能更为优越。使用new比使用malloc有以下的几个优点:1、new自动计算要分配类型的大小不使用sizeof运算符比较省事可以避免错误。2、它自动地返回正确的指针类型不用进行强制指针类型转换。3、可以用new对分配的对象进行初始化。2、使用inline内连函数替代宏调用对于频繁使用的函数C语言建议使用宏调用代替函数调用以加快代码执行减少调用开销。但是宏调用有许多的弊端可能引起不期望的副作用。例如宏defineabsaa0a当使用abs时这个宏就会出错。所以在C中应该使用inline内连函数替代宏调用这样即可达到宏调用的功能又避免了宏调用的弊端。使用内连函数只需把inline关键字放在函数返回类型的前面。例如inlineintAddintaintb声明Add为内连函数这样编译器在遇到Add函数时不再进行函数调用而是直接嵌入函数代码以加快程序的执行。3、使用函数重载在C语言中两个函数的名称不能相同否则会导致编译错误。而在C中函数名相同而参数不同的两个函数被解释为重载。例如voidPutHz(char*str);//在当前位置输出汉字voidPutHz(intx,inty,char*str);在xy处输出汉字使用函数重载可以帮助程序员应付更多的复杂同时在大型程序中使函数名易于管理和使用而不必绞尽脑汁地去处理函数名。4、使用引用reference代替指针进行参数传递在C语言中如果一个函数需要修改用作参数的变量值的时候参数应该声明为指针类型。例如voidAdd(int*a){(*a)++;}但是对于复杂的程序使用指针容易出错程序也难以读懂。在C中对于上述情况可以使用引用来代替指针使程序更加清晰易懂。引用就是对变量取的一个别名对引用进行操作就相当于对原有变量进行操作。例如使用引用的函数定义为voidAdd(int&a)(a++;);//a为一个整数的引用5、使用“类”对数据进行封装C语言是模块化的程序语言。通过函数的使用和文件的单独编译实现了一定的数据封装功能。但C通过使用“类”的强大功能,在数据封装、继承等很多的方面比C做得更好。通过使用“类”把数据和对数据的所有操作集合封装在一起建立了一个定义良好的接口使程序员在使用一个类的时候可以只关心它的使用而不必关心它的实现。6、类模版类模版使得程序员在设计一个类时可以将数据类型作为类的参数从而定义一个类属类。作为参数的类型既可以是c++语言提供的基本类型与复合数据类型也可以是程序员自定义的类类型。类属类的主要用途是定义包容数据结构。利用类模版以此就可以定义出具有共性,除类型参数除外、其余全相同的一组类。即通过使用类模版可使得所定义类中的某些数据成员、某些成员函数的参数、某些成员参数的返回值都可以使任意类型的包括系统预定义类型以及用户自定义类型从而使得一段程序可用于处理多种不同类型的对象。3,VC++平台简介VC++是在Windows平台下构建32位应用程序的功能强大的开发工具。是目前被使用最广泛的工具之一。VC++的应用很广,从桌面应用程序,服务器端软件,系统软件在到应用软件,从单机程序在到分布式应用程序,从图形图像处理到在游戏开发,遍及人类的生活。VC++是Windows平台上的C++编程环境学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识,难度比较大。VC++DeveloperStudio包含有编写程序源代码的编辑器设计用户界面菜单、对话框、图标等的资源编辑器来建立项目配置的项目管理器或者检查程序错误的集成调式,应用程序向导AppWizard和类向导ClassWizard工具也同时提供。AppWizard用来生成各种各种类型的具有Windows界面风格的应用程序的基本框架。在生成应用程序框架后使用ClassWizard来完成创建新类映射消息、定义消息处理函数、重载虚函数等操作。4,MFC技术简介MFC(MicrosoftFoundationClassLibrary)微软基础类库,是微软开发的一套C++类的集合是一套面向对象的函数库,以类的方式提供给客户使用。利用这些类可以有效的帮助完成Windows应用程序的开发。MFC中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序这是一种相对SDK来说更为简单的方法。因为总体上MFC框架定义了应用程序的轮廓并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。MicrosoftVisualC++提供了相应的工具来完成这个工作AppWizard可以用来生成初步的框架文件代码和资源等资源编辑器用于帮助直观地设计用户接口ClassWizard用来协助添加代码到框架文件最后编译则通过类库实现了应用程序特定的逻辑。5,MDI应用程序的构成,用AppWizard产生一个MDI工程Jia无OLE等支持AppWizard创建了一系列文件,构成了一个应用程序框架等。这些文件可分四类:头文件.h;实现文件.cpp;资源文件.rc;模块定义文件.def等。从CWinApp、CDocument、CView、CMDIFrameWnd、CMDIChildWnd类等对应地派生出了CJiaApp、CJiaDoc、CJiaView、CMainFrame、CChildFrame五个类。这几个类的例子分别是应用程序对象、文档对象、视对象、主框架窗口对象与文档边框窗口对象。主程序窗口包含了视窗口、工具条和状态栏。对这些类或者对象解释如下:1应用程序应用程序类派生于CWinApp。基于框架的应用程序必须有且只有一个应用程序对象它负责应用程序的初始化、运行和结束。2边框窗口如果是SDI应用程序,从CFrameWnd类派生边框窗口类边框视窗的客户子窗口(MDIClient)直接包含边框口。假如是MDI应用程序,从CMDIFrameWnd类派生边框窗口类边框窗口的客户子窗口(MDIClient)直接收入文档边框窗口。假如要支持工具条、状态栏,则派生的边框窗口类需添加CToolBar和CStatusBar类型的成员变量以及在一个OnCreate消息处理函数中初始化这两个控制窗口。边框窗口可用管理文档边框窗口、视窗口、工具条、菜单、加速键等协调模式等,例上下文的帮助(SHIFT+F1模式)和打印预览。3文档边框窗口文档边框窗口类从CMDIChildWnd类衍生MDI应用程序使用文档边框窗口来包入视窗口。4文档文档类从CDocument类衍生用来管理数据。数据的改变、存取均是通过文档来实现。视窗口以文档对象来访问和更新数据。5视视类从CView或它的派生类中派生出来。视和文档联系在一起。在文档和用户之间起中介功能,即视在屏幕上显出文档的内容,并且把用户输入转换成对文档的操作。6文档模板文档模板类可能不需要派生。MDI应用程序使用多文档模板类CMultiDocTemplateSDI应用程序使用单文档模板类CSingleDocTemplate。应用程序以文档模板类对象来管理上述对象应用程序对象、文档对象、主边框窗口对象、文档边框窗口对象、视对象的创建。4,需求分析4.1系统功能需求分析需求分析简单地说就是分析用户的需求。需求分析是设计系统的起点,需求分析的结果是否准确地反映了用户的实际要求将直接影响到以后各个阶段的设计并影响到设计的结果能否合理和用于实际应用。需求分析的任务是通过大量调查要处理的对象,组织、部门、企业等大量的了解原系统手工系统和计算机系统工作情况,了解用户的各种需求,在在此基础上确定新系统的功能。研究的重点是“数据”和“处理”通过调查、收集与分析,获得用户对数据的要求如下1图像的打开、关闭及保存。打开并显示图像,并在处理过图像后关闭或保存图像的修改。2处理要求。指用户要完成什么处理功能,对处理的响应时间有什么要求,处理方式是批处理还是其他处理方式,能够完成图像一般的编辑处理。3处理效果与效率。图像处理中一个很重要的问题就是如何表达有关的知识并以合适的方式引入图像处理。由于图像处理任务很艰巨,现在要找出一个通用的方法适应多种因素是几乎不可能的。另一方面,在建立普通的图像处理方法时经常会忽略某类图像具有的固定属性。然而,针对一些特定问题,则会找到有效的方法。为此有研究者提出基于对象图像处理的概念,限定图像处理的对象为几类特殊的图像JPGGIFBMP考察对象的共有属性,称为先验并将其结合到图像处理的任务中以提供更多的信息从而提升图像处理的性能、提高处理效果。由于图像的处理是通过对一个个像素点进行处理,要想提高处理速度就需要寻找一个快速的处理方法。本系统是Windows应用程序,可以进行图像的导入和导出,视图设置附带和ACDSEE类似功能的图片编辑器编辑完成以后可以对修改进行保存,可以调整图片尺寸旋转和翻转图片,图片增强优化,图像的特效处理以及打印输出图片。4.2系统处理流程分析在对系统的组织结构和功能进行分析时,需从一个现实业务流程的角度将系统调查中关于该业务流程的资料都串起来作更多的分析。业务流程分析能帮助我们了解该业务的具体处理过程,找出并处理系统的调查工作中的错误和疏漏,修改并删除原系统中不合理地方,在新系统基础上改进业务处理流程。业务流程图(transactionflowdiagram简称TFD)就是用很多规定的符号及连接来表示一些具体的业务处理过程。它是用尽量少、尽量简单的方法来描述业务处理阶段的方法。由于它的符号简单明了,所以非常易于阅读和理解业务流程。通过对系统的需求分析系统的基本功能已经确定。整个系统各个模块的业务流程如图4-1所示:图4-1业务流程图5系统总体设计5.1系统功能模块划分。数字图像处理系统的总体功能模块如图4-1所示。模块设计是对处理流程图的注释性书面文件以帮助程序设计人员进一步了解模块的功能和设计要求。本系统采用C++语言开发,由于计算机的硬件和软件发展日新月异,所以对这种语言利用的过程也是不断学习的过程。数字图像处理系统主要分为三个子模块,即文件操作模块、图像编辑模块、图像处理模块模块。系统的具体的模块设计如下1.文件操作:该模块主要实现图像的文件操作,包括打开图像文件、保存图像文件、图像文件的打印等操作。2.图像编辑:该模块主要实现图像的编辑操作,包括图像的复制、图像的粘贴、在图像中添加文字信息等操作。3.图像操作:该模块主要实现图像的特殊处理与缩放处理,包括图像的点运算、图像的几何变换、图像的增强和复原处理、图像的边缘检测和分割、图像编码图像的特效处理等操作。5.2类的设计MFC类库中实现了对GDI位图操作的CBitmap类,但是没有封装处理DIB。Device-IndependentBitmap设备无关位图,位图操作的相关WindowsAPI类。CMyDIB类就是采用面向对象的思想实现了对该类函数以及数字图像处理算法的封装。实现的功能主要有以下几个方面:1读取BMP图像文件2获取图像的相关信息3显示图像4保存图像5图像处理的各种算法实现。CBmpShow、CRectTrackerEx类主要是实现了图像文本的插入处理。5.3系统框架类CJiaApp、CJiaDoc、CJiaView、CMainFrame、CChildFrame五个类主要实现了应用程序的框架及框架内部的各种逻辑、消息响应机制。6系统的详细设计根据前面对系统所需实现功能的分析和系统结构设计,现将对系统进行详细设计,逐步实现系统的各个功能模块。6.1文件模块的设计1文件操作模块文件操作模块是整个系统中最基本的组成成分。文件操作模块主要实现图像文件的打开、打印、修改后的保存以及图像文件的另存为操作。通过对用户的需求分析得出文件操作模块的功能结构图,文件操作模块的功能结构图如图6-1所示应用程序的的启动界面如图6-2所示程序的启动界面由CSplashWnd类实现。在CSplashWnd类中的OnCreate函数中的定时器SetTimer(1,2750,NULL)设置的定时间隔就是启动画面的显示的时间。该系统设置的显示时间是2750ms,然后发送WM_TIMER消息,隐藏启动画面。如果系统收到键盘或者鼠标单击消息时也会自动隐藏启动画面。2文件打开功能的实现,其文件打开界面如图6-3所示通过文档—视图结构简化了数据操作和数据显示。文档只负责数据管理,不涉及用户界面;视只负责数据输出和用户界面的交互,可以不考虑应用程序的数据是如何组织的。通过文档JDoc类中的OnOpenDocument(LPCTSTRlpszPathName)函数实现对文件的打开,而在视图JiaView类中实现图像的显示。3图像的保存图像的保存也是在文档内实现。首先进行声明CMyDIB类的指针变量m_pDibImage。经过存入对话框后,程序下面调用成员函数m_pDibImage->SaveDIB(m_hDIB,file)把图像存为指定文件。另外,只要将文件更名保存,就需把用该图像所属的子窗口的标题更名为新的文件名。这项任务由函数pChildFrame->SetWindowText()负责。4图像的打印图像的打印功能,通过IsPrinting()函数确定CDC对象是否为指向设备上对下文环境的对象。如果是,则执行如下代码实现打印//获取打印页脚宽度(象素)intcxPage=pDC->GetDeviceCaps(HORZRES);//获取打印页教的垂直高度(象素)intcyPage=pDC->GetDeviceCaps(VERTRES);//获取打印机单位内象素数intcxInch=pDC->GetDeviceCaps(LOGPIXELSX);intcyInch=pDC->GetDeviceCaps(LOGPIXELSY);//打印机印图像大小,缩放,根据页面大小来调整图像大小rcDest.top=rcDest.left=0;rcDest.bottom=(int)(((double)cyDIB*cxPage*cyInch)/((double)cxDIB*cxInch));rcDest.right=cxPage;//打印机印图像位置垂直居中inttemp=cy(rcDest.bottom-rcDest.top);rcDest.bottom+=temp/2;rcDest.top+=temp/2;6.2图像编辑模块图像编辑模块是图像处理系统中重要模块,主要实现图像文件的编辑操作。包括图像的复制、粘贴以及在图像中插入文本操作。图像编辑模块的功能结构如图6-4所示图像编辑主要实现对图像的编辑。用户在打开图像之后可以选择复制图像或者剪切图像。如果想要把复制的图像保存下来就需要先将图片保存到剪贴板后进行图像粘贴,保存,操作,这样就可以把原来图像中的一部分保存下来。如果需要添加一些说明性文字可以进行文本的插入:单击编辑/添加字体调出文本插入对话框,进行文本插入说明,这样可以把图像的描述信息添加到图像中。插入文本实现了在图像中任意位置插入文字,没有实现字体和颜色的设置。插入文本的代码如下所示:voidCBmpShow::PaintBmpAndText(){//绘制图像和文字SetDIBits(m_pMemDC->GetSafeHdc(),(HBITMAP)m_pMemBmp->m_hObject,0,m_lpBMPHdr->biHeight,(LPVOID)m_lpDIBits,(BITMAPINFO*)m_lpBMPHdr,DIB_RGB_COLORS);if(m_strBmpText.GetLength()>0){CRectrcText=m_textTracker.m_rect-m_rcDraw.TopLeft();m_pMemDC->SetBkMode(TRANSPARENT);//设置字体m_pMemDC->SetTextColor(RGB(250,0,0));rcText.OffsetRect(1,1);//根据矩形的宽度,插入换行符CStringstrText=NewLineString(m_strBmpText,rcText);//Callthismemberfunctiontoformattextinthegivenrectanglem_pMemDC->DrawText(strText,rcText,DT_LEFT|DT_WORDBREAK);}图像文本插入界面如图6-5所示图6-5文本插入界面6.3图像处理模块图像处理模块主要是实现灰度图像的处理。由于灰度图像的每个像素的位数刚好是8位即一个字节。这样,在进行图像识别时可以不用考虑一些字节的问题。而且因为灰度图调色板的特殊性,进行灰度图像处理时不必考虑调色板的问题。这部分的主要功能是图像的点运算、图像的几何运算、图像的正交变换、图像的增强、图像边缘检测和分割、图像编码。经过分析图像处理的功能得出图像处理的功能模块图如图6-6所示点运算(PointOperation)是一种及简单有重要的技术。它能让用户改变图像数据占据的灰度范围。点运算可以按照预定的方式改变一副图像固有灰度直方图。灰度直方图是进行处理过程中一个最简单、最有用的工具。它描述了该图像的的灰度级内容等。任意一幅图像的直方图都包含了可观的信息。一些类型的图像还可由其直方图完全描述。图像直方图运行效果图如6-7所示灰度的线性变换是点运算中最简单的运算之一,就是将图像中所有的点的灰度按照线性灰度变换函数进行变换。反转是灰度线性变化中最常见的一种情形。图像效果图反色前与反色后的对比如图6-8所示:灰度的阀值变换比较简单,容易实现。可以将一副灰度图像转换成黑白二值图像。如果图像中某像素的灰度值小于该阀值,则将该像素的灰度值设为0,否则灰度值设为255。设置阀值为100的阀值变换前后的图像如图6-9所示:①灰度拉伸灰度拉伸是分段进行线性变换,可以更加方便的控制输出灰度直方图的分布。它能够有选择的拉伸几段灰度区间来改善输出图像。假如某幅图像灰度集中在较暗的地方而导致图像偏暗。应该用灰度拉伸功能来拉伸(斜率>1)实物灰度区间来改善图像,同时假如灰度集中在较亮的区域而导致了图像偏亮,亦可用灰度拉伸功能以压缩(斜率<1)物体的灰度区间以改善图像质量。实现灰度拉伸的算法如下:BOOLCMyDIB::GrayStretch(LPSTRlpDIBBits,LONGlWidth,LONGlHeight,BYTEbX1,BYTEbY1,BYTEbX2,BYTEbY2){unsignedchar*lpSrc;//指向源图像的指针LONGi;LONGj;//循环变量BYTEbMap[256];//灰度映射表LONGlLineBytes;//图像每行的字节数lLineBytes=WIDTHBYTES(lWidth*8);//计算图像每行的字节数//计算灰度映射表for(i=0;i<=bX1;i++){if(bX1>0){//判断bX1是否大于0防止分母为0bMap[i]=(BYTE)bY1*i/bX1;}else{bMap[i]=0;}}for(;i<=bX2;i++){if(bX2!=bX1){//判断bX1是否等于bX2防止分母为0bMap[i]=bY1+(BYTE)((bY2-bY1)*(i-bX1)/(bX2-bX1));}else{bMap[i]=bY1;}}for(;i<256;i++){if(bX2!=255){//判断bX2是否等于255防止分母为0bMap[i]=bY2+(BYTE)((255-bY2)*(i-bX2)/(255-bX2));18}else{bMap[i]=255;}}for(i=0;i<lHeight;i++){//每行for(j=0;j<lWidth;j++){//每列//指向DIB第i行第j个象素的指针lpSrc=(unsignedchar*)lpDIBBits+lLineBytes*(lHeight-1-i)+j;//计算新的灰度值*lpSrc=bMap[*lpSrc];}}returnTRUE;}灰度拉伸前后如图6-10所示系统图像的几何变换是指原始图像按照需要产生大小、形状和位置的变化。使图像处理和分析的基础内容之一。它不仅提供了产生某些特殊效果图像的可能,而且可使图像处理和分析的程序的简单化,特别是当图像具有一定得规律时,一个图像可以由另一个图像通过几何变换来实现。图像镜像变换不改变图像的形状。镜像变换分为两种:一种是水平镜像;另一种是垂直镜像。图像的水平镜像功能是把图像左半部分并右半部分以图像垂直中轴线为中心进行镜像对换。图像的垂直镜像功能是将图像上半部分和下半部分以图像水平中轴线为中心进行镜像对换。镜像变换效果如图6-11所示图像旋转是以图像中心为中心旋转60度DIB图像效果如图6-12所示图像的形状变换,缩放假设图像X轴方向放缩比率fx,y轴方向缩放比率是fy则原图中点(x0,y0)对应于新图中的点(x1,y1)的变换矩阵为:图6-12图像形状变换矩阵图例如,当fx=fy=0.5时,图像被改变到一半大小,此时缩小在图像中的(0,0)像素,(0,1)像素对应着原图中的(0,2)像素,(1,0)像素对应着原图中的(2,0)像素。根据这来推测。在原图上操作,每行隔一个像素找一点,每隔一行来操作。同样道理fx=fy=2时,图像放大2倍。放大后改图中的(0,0)像素对应于原来图像的(0,0)像素,(0,1)像素对应于原来图像中的(0,0.5)该像素不存在,可以近似为(0,0)也可近似为(0,1),(0,2)像素对应于原来图像中的(0,1)像素,由此类推。其实是将原图每行中的像素重复取值一遍然后每行重复一次。图像参数设置及效果图如图6-13所示目前,图像的正交变换被广泛地运用于图像特征提取、图像增强、图像复原、图像压缩的领域。而这一部分主要是图像的频域操作方法,把图像信号从空间域变化到频域。可以从另一个角度来分析图像信号的特性。图像的频域操作最明显的特性是它的运算速度很高。并能采用已有的二位数字滤波技术操作需要的各种图像处理,所以得到了广泛的应用。数字图像的频域操作最关键的为变换操作,即首先把图像从空间域变化到频域,然后进行各种操作,再将所得的结果来进行逆变换,从频域在变换到空间域,从而达到图像操作的目的。数字图像的频域操作主要用三种应用:1.利用某些频域变换可以从图像中提取图像的特征;2.利用图像频域操作可实现图像的高效压缩编码;3.减小计算维数,使计算运算次数大大减少,从而提高图像的处理速度。傅里叶变换、离散余弦变换的处理效果对比如图5-14所示6.4图像的增强和复原1)图像增强的目的是改善图像的视觉效果,或者使图像更适合于人或机器进行分析处理。通过图像增强可以减少图像中的噪声,提高目标于背景的对比度。也可以强调或抑制图像中的某些细节。模版操作是数字图像处理中经常用到的一种运算方式,图像的平滑、锐化及下部分的图像边缘检测都要用到模版操作。图像平滑是一种实用的数字图像处理技术,主要的目的是为了减少图像的噪声。一般情况下,在空间域内可以用领域平均来

温馨提示

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

评论

0/150

提交评论