基于VC++的图像处理软件模块设计(共21页)_第1页
基于VC++的图像处理软件模块设计(共21页)_第2页
基于VC++的图像处理软件模块设计(共21页)_第3页
基于VC++的图像处理软件模块设计(共21页)_第4页
基于VC++的图像处理软件模块设计(共21页)_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上 本科生毕业论文(设计)题 目:基于VC+的嵌入网页图像处理软件模块设计 姓 名: 学 院: 工学院 专 业: 电子信息科学与技术 班 级: 信息84 学 号: 指导教师: 职称: 2012 年 5月 1 日专心-专注-专业目 录基于VC+的嵌入网页图像处理软件模块设计电子信息科学与技术专业学生 指导教师 摘要:随着计算机技术和网络技术的快速发展,社会生产力和精确农业技术也得到逐步发展,人们对农田除害智能识别技术的要求也越来越高,因此,需要将机器人技术计算机技术网络技术等应用于农田除害。该课题在windows XP平台上实现,采用Visual C+作为编程工具,采用面

2、向对象的程序设计技术完成一个嵌入网页的图像处理(图像只要指农田害虫)的应用软件。图形方面主要是设计图形基类,以及继承图形基类的具体图形类。此外,通过对独立功能的封装,可以为今后需要的图形图像的应用奠定基础。系统的优点有:充分体现了面向对象的设计思想,充分运用了C+的特性,比如封装、继承、多态。程序结构清晰,可读性好,程序中做了充分的注释。关键词:Visual C+;图像处理;农田害虫; Based on VC+ image processing software module design of embedded webpageStudent majoring in Electronic an

3、d Information Science and Technology Tutor Abstract:With the rapid development computer technology and network technology, the development of social productive forces and the development of precision agriculture technology people's demand of agricultural pest identification technology more and m

4、ore high need to robotics technology, computer technology network used in agricultural pesticides. The topic realizes under the windows XP platform, use Visual C+ as a programming tool, use object-oriented programming techniques to achieve a image processing software. The graph aspect is designs the

5、 graph base class , as well as inherits the graph base classs specific graph class. Through independent function's encapsulation, for the futures needs of the graphic images lays the foundation. The system merit has: the object-oriented designs thought application of the C+ properties, for examp

6、le encapsulation, polymorphism, and inheritance. Programs structure is clear, good readability, codes has the full annotation in the program. The graph plans part has avoided complicated structure of the traditional switch case. Easy expansion and transplantation.Key words: Visual C+;image processin

7、g;Agricultural pest;引言 数字图像处理( Digital Image Processing) 是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。图像处理中, 输入的是质量低的图像, 输出的是改善质量后的图像, 图像处理的方法多种多样, 一般可分为图像变换、图像增强和复原、图像分割、图像压缩编码、图像描述和图像识别等几类。目前,图像处理的应用领域已涉及到人们工作生活中的方方面面。 1论文概述1.1课题的研究目的和意义本文所介绍的数字图像处理系统是一款简单而又实用的灰度级图像处理软件, 是基于Windows 平台 的应用程序,利用Visual C+ + 6. 0 的编

8、译环境提高了系统的开发速度,实现数字图像的查看与编辑操作1。应该说,目前已有种类繁多的图形图像处理专用软件工具,如AutoCAD、和PhotoShop等,利用这些图形图像处理软件可以实现同样的功能。即便如此,研究这些图形图像处理技术仍具有一定使用价值。首先,利用一个设计良好的简单的小图形处理程序可以用于教学演示的目的,展示基本的图形图像处理技术和面向对象技术在这一领域的应用效果。其次,在很多应用中需要提供自己的图形图像处理功能,例如,在一个正在连接网络的任务中可能就希望显示一幅示意性的动画,此时,不能依赖一个图形软件来实现。因此,通过对独立功能的封装,可以为今后需要的图形图像的应用奠定基础2。

9、此外,借助Visual C+语言这种典型的面向对象编程环境,能够充分挖掘硬件的潜能,得到性能优良的程序代码。1.2国内外发展状况数字图像处理(DigitalImageProcessing)是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。数字图像处理的产生和迅速发展主要受三个因素的影响:一是的发展;二是数学的发展(特别是离散数学理论的创立和完善);三是广泛的农牧业、林业、环境、军事、工业和医学等方面的应用需求的增长。20世纪20年代,图像处理首次应用于改善伦敦和纽约之间海底电缆发送的图片质量。到20世纪50年代,数字计算机发展到一定的水平后,数字图像处理才真正引起人

10、们的兴趣。1964年美国喷气推进实验室用计算机对“徘徊者七号”太空船发回的大批月球照片进行处理,收到明显的效果。20世纪60年代末,数字图像处理具备了比较完整的体系,形成了一门新兴的学科。20世纪70年代,数字图像处理技术得到迅猛的发展,理论和方法进一步完善,应用范围更加广泛。在这一时期,图像处理主要和模式识别及图像理解系统的研究相联系,如文字识别、医学图像处理、遥感图像的处理等。20世纪70年代后期到现在,各个应用领域对数字图像处理提出越来越高的要求,促进了这门学科向更高级的方向发展。特别是在景物理解和计算机视觉(即机器视觉)方面,图像处理已由二维处理发展到三维理解或解释。近年来,随着计算机

11、和其它各有关领域的迅速发展,例如在图像表现、科学计算可视化、多媒体计算技术等方面的发展,数字图像处理已从一个专门的研究领域变成了科学研究和人机界面中的一种普遍应用的工具。图形与图像处理是计算机最早应用的领域之一,从简单的图形显示到复杂的图像分析、模式识别,使得图形与图像处理技术不断走向成熟,国内外也涌现出了大量的软件。例如,ACDSee、PhotoShop、CorelDraw等,这些软件提供了一般显示、特殊显示、特技处理等大量复杂的功能。图形处理技术得益于图形学的发展,而从目的上可以将图像处理技术分为两类,分别是图像识别技术和图像处理技术。针对图像处理技术,可以是旋转、亮度、对比度、饱和度、R

12、GB调节、调节图像尺寸等属性方面的处理技术和添加文字、图像增强、弱化、水印、特效、镂空等处理方法。甚至为了达到更精微的处理效果,这些软件还使用了图层。随着网络和多媒体技术的发展和应用,体现在应用软件中的是一些更具有“现代感”的应用,例如,支持各种常用图形、RAW原始图片、Flash动画的快速浏览、编辑、保存、导入、导出,甚至还可以提供一些趣味涂鸦、字符素描之类的应用,以体现人的个性3。事实上,应用软件中常常需要采用其中的某些技术来处理相关的问题。例如,一个支持简单形状辅助设计的软件并不需要支持特效方面的方法。在软件设计的支撑环境和技术上,C+是一个很好的选择,这主要是考虑到如下因素,主要包括代

13、码效率高,处理底层问题能力强,支持面向对象的程序设计方法。利用C+技术可以实现对程序代码和数据的良好封装,使之能够具有良好的重用性。1.3研究方法与手段1.3.1 运行环境运行环境主要介绍了硬件环境和软件环境。(1) 硬件环境 处理器:Inter Pentium 166 MX 或更高 内存:32MB或更高 硬盘空间:1GB或更高 显卡:SVGA显示适配器(2) 软件环境操作系统:Window 98/ME/2000/XP1.3.2 开发环境开发环境主要介绍了本系统采用的操作系统、开发语言。(1) 操作系统:Windows XP(2) 开发语言:C+(3) 开发环境:Visual C+ 6.02图

14、像处理相关技术概述2.1 VC+6.0简介面向对象程序设计(Object-Oriented Programming,简称OOP)方法已出现近30年,在20世纪90年代己成为程序设计的主流方向。面向对象程序设计语言是现代程序开发的主要工具。程序包含两类基本的元素,即数据和操作数据的指令集(称为代码)。传统的程序设计语言以设计代码为核心,程序设计实际上就是指定程序指令的先后次序,数据表示必须适应代码的设计。模块化程序设计方法将完成某一功能的指令集组成一个相对独立的程序模块(即函数或过程),使得程序的结构清晰,便于有效的维护,对程序设计技术有很大的促进。但由于结构化程序设计方法并不能保证各程序模块之

15、间真正的相互独立,程序设计者在设计一个模块时很难完全排除其他模块的影响。随着程序规模的增大,各模块之间的相互影响导致一些难于测试,难以定位发现的错误,增加了程序开发和维护的困难。面向对象程序设计方法主要以数据为中心,代码是围绕着需要处理的数据而设计的4。VC+6.0是Microsoft公司推出的一个基于Windows系统平台、可视化的集成开发环境,它的源程序按C+语言的要求编写,并加入了微软提供的功能强大的MFC(Microsoft Foundation Class)类库。MFC中封装了大部分Windows API函数和Windows控件,它包含的功能涉及到整个Windows操作系统。MFC不

16、仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件,这样,开发人员不必从头设计创建和管理一个标准Windows应用程序所需的程序,而是从一个比较高的起点编程,故节省了大量的时间。另外,它提供了大量的代码,指导用户编程时实现某些技术和功能。因此,使用VC+提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得简单5。2.2 VC+各类文件简介.dsw文件这种类型的文件在VC中级别是最高的,成为Workspace文件。在Workspace文件中可以包含多个Project,由Workspace文件对它们进行统一的协调和管理。.dsp文件以dsp为扩展名

17、的文件中存放的是一个特定的工程,也就是特定的应用程序的有关信息,每个工程都对应有一个dsp类型的文件。.clw文件以clw为扩展名的文件是用来存放应用程序中用到的类和资源的信息的,这些信息是VC中的ClassWizard工具管理和使用类的信息来源。readme.txt文件对应每个应用程序有一个readme.txt文件,这个文件中列出了应用程序中用到的所有的文件信息,打开并查看其中的内容就可以对应用程序的文件结构有一个基本的认识。.h和.cpp文件在应用程序中大量应用的是以h和cpp为扩展名的文件,以h为扩展名的文件称为头文件;以cpp为扩展名的文件称为实现文件,一般说来h为扩展名的文件与以cp

18、p为扩展名的文件是一一对应配合使用的,在h为扩展名的文件中包含的主要是类的定义,而在cpp为扩展名的文件中包含的主要是类成员函数的实现代码。.rc文件VC中以rc为扩展名的文件称为资源文件,其中包含了应用程序中用到的所有的windows资源,需要注意的是rc文件可以直接在VC集成环境中以可视化的方法进行编辑和修改6。2.3 MFC类库MFC,微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C+环境下编写应用程序的一个框架和引擎,VC+是Windows下开发人员使用的专业C+ SDK(SDK,Standard SoftWare Develop K

19、it,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包,MFC作为与VC+血肉相连的部分。微软基础类库由两部分组成:一是通常所说的C+类库,是MFC类库的主体部分,这些类构成了MFC应用程序框架。二是MFC预定义宏、全局变量和全局函数,是MFC类库的辅助部分,它们都是MFC进行Windows应用程序开发不可缺少的组成部分。MFC使得开发windows应用程序比以往任何时候都要容易,虽然我们要编写的应用程序在功能上千差万别,但是从本质上来讲,都可以划归为用户界面的设计,对文件的操作,多媒体的使用,数据库的访问等一些最主要的方面。这一点正是微软提供MFC类库最重要的原因,在这个类库中的

20、某个对象能完成所需要的功能,这时我们只要简单地调用已有对象派生出我们自己的对象,这时派生出来的对象除了具有类库中的对象的特性和功能之外,还可以由我们自己根据需要加上所需的特性和方法,并根据需要来不断完善对象的功能。正是由于MFC编程方法充分利用了面向对象技术的优点,它使得我们编程时极少需要关心对象方法的实现细节,同时类库中的各种对象的强大的功能足以完成我们程序中的绝大部分所需的功能,这使得应用程序中程序员所需要编写的代码大为减少,有力地保证了程序的良好的可调试性。需要指出的是MFC类库在提供的对象的各种属性和方法都是经过谨慎的编写和严格的测试,可靠性很高,这就保证了使用MFC类库不会影响程序的

21、可靠性和正确性。3.图像设计基础3.1图像基础3.1.1数字图像的基本概念人眼看到的任何自然界的图像都是连续的模拟图像,其形状和形态表现由图像各位置的颜色所决定。色度学理论认为,任何颜色都可由红(Red)、绿(Green)、蓝(Blue)3种基本颜色按不同的比例混合得到。红、绿、蓝被称为三原色,简称RGB三原色。因此,自然界的图像可用基于位置坐标的三维函数来表示,即 f(x,y,z)=(fred(x,y,z),fgreen(x,y,z),fblue(x,y,z) (3-1)其中f表示空间坐标为(x,y,z)位置点的颜色,fred、fgreen、fblue分别表示该位置点的红、绿、蓝3种原色的颜

22、色分量值。它们都是空间的连续函数,即连续空间的每点都由一个精确的值与之相对应。为了研究的方便,主要考虑平面图像。平面上每一点仅包括两个坐标值。因此,平面图像函数是连续的二维的数,即 f(x,y)=(fred(x,y),fgreen(x,y),fblue(x,y) (3-2)图像可以分为黑白图像和彩色图像。所谓黑白图像,就是图像中每一点都不是彩色的,即每点的红、绿、蓝颜色分量值都相等,即 fred=fgreen=fblue (3-3)对于黑白图像,其f(x,y)表示(x,y)位置处的灰度值。由于计算机仅能处理离散的数据,所以如要用计算机来处理图像,连续的图像函数必须转化为离散的数据集,这一过程叫

23、做图像采集7。图像采集由图像采集系统完成,如图3-1所示。图像采集系统包括3个基本单元,即成像系统、采样系统和量化器。成像系统f(x,y)g(x,y)量化器gs(x,y)ga(x,y)景物图像采样图像数字图像采样系统图3-1 图像采集系统3.1.2调色板现实世界的颜色种类是无限的,但计算机显示系统所能表现的颜色数量是有限的。因此,为了使计算机能最好地重现实际图景,就必须采用一定的技术来管理和取舍颜色。按表现能力的不同,现代计算机的显示系统可以分为以下3种。(1) VGA:能用640×480的分辨率同时显示16种颜色。(2) SuperVGA:能用640×480的分辨率同时显

24、示256种颜色(3) 真彩色:能同时显示种颜色。所谓真彩色(True Color),是指显示出来的图像的颜色与真实世界中的颜色非常自然逼真、人眼难以区分它们的差别。通常使用RGB表示法来表现真彩色图像,即用3字节(24位)来表示个真彩色像素的颜色值,红、绿、蓝三原色的浓度分别用一字节(8位)来表示。Windows采用该方法来表现颜色,其SDK提供一个名为RGB的宏来将不同的R、G、B颜色值转化为24位的颜色值,其原型如下所示。 COLORREF RGB(BYTE bRed, BYTE bGReen, BYTE bBlue) (3-4)COLORREF是表示颜色值的数据类型,是一个32位的无符号

25、长整数;bRed、bGreen和bBlue分别表示红、绿、蓝三原色的浓度,它们的类型是BYTE,长度是8位。其十六进制数据表示形式如下所示。 0x00bbggrr (3-5)字节rr、gg、bb比分别表示红、绿、蓝三原色的浓度,最高位字节为0,用于保留与将来的系统兼容8。3.1.3调色板的概念在真彩色系统中,每一个像素的值都用24位来表示。像素值与真彩色颜色值可以一一对应,所以像素值就是所表现的颜色位。但对于仅能同时显示16色或256色的系统,每一个像素仅能分别采用4位或8位来表示,像素值与真彩色颜色值不能一一对应,用像素值代表颜色值的方法将不能得到最佳的效果,而必须采用调色板技术。所谓调色板

26、就是在16色或256色显示系统中,由图像中出现最频繁的16种或256种颜色所组成的颜色表。对这些颜色按4位或8位,即0至15或255进行编号,每一编号代表其中的一种颜色。这种颜色编号叫做颜色的索引号,4位或8位的索引号与24位的颜色值的对应表叫做颜色查找表。使用调色板的图像叫做调色板图像。它们的像素值并不是颜色值,而是颜色在调色板查找表中的索引号9。为了保证Windows的基本显示界面的一致性,Windows保留了一个有20种颜色的内部系统调色板,用来绘制窗口的图标、边界和按钮等通用界面。该调色板在所有的显示设置中都保持不变。在16色的显示系统中,系统调色板通过16种颜色的抖动来产生其余4种颜

27、色。在256色的显示系统中,Windows也保持该20种颜色的次序,其余的236种颜色由当前的调色板分配10。3.2 与设备无关位图(DIB)Windows3.1以上版本提供了对设备无关位图DIB的支持。DIB位图可以在不同的机器或系统中显示位图所固有的图像。与DDB相比而言,DIB是一种外部的位图格式,经常存储为以.BMP为后缀的位图文件(有时也以DIB为后缀)。DIB位图还支持图像数据的压缩11。大多数图像处理都是基于与设备无关位图(DIB)来进行讨论的,而MFC中没有处理DIB位图的类,这就给编程带来了很大困难。所以需要建立一个处理DIB位图的专用类,CDIB类,在其中封装必要而有效的处

28、理函数。3.2.1 DIB位图的结构DIB位图文件的结构如图3-2所示,包括位图文件头结构BITMAPEHEADER、位图信息头结构BITMAPINFOHEADER、位图颜色表RGBQUAD和位图像素数据4部分。位图文件头结构BITMAPEHEADER位图信息头结构BITMAPINFOHEADER位图颜色表RGBQUAD位图像素数据图3-2 DIB位图的结构上面结构中各数据域的意义如表3-1所示。 表3-1 Windows位图结构数据域的含义 结 构数 据 域含 义BITMAPFILEHEADERBftype字节“BM”bfSize文件总字节数bfResrved10bfResrved20bfO

29、ffBits位图数据距文件头的偏移量BITMAPINFOHEADERbiSize本结构大小的字节数biWidth位图的宽度,单位为像素点biHeight位图的高度,单位为像素点biPlanes1bitBitCount像素的位数(1,4,8,24)biCompression压缩方式(0表示不压缩)biSizeImage位图数据的字节数biXpelsPerMeter水平分辨(像素点每米)biYpelsPerMeter垂直分辨(像素点每米)biClrUsed图像中使用的颜色数biClrImportant图像中重要的颜色数RGBQUADrgbBlue蓝色的比例rgbGreen绿色的比例rgbRed红色

30、的比例rgbReserved0DIB位图像素的位数可为1、4、8和24,其图像的颜色数分别为2、16、256和真彩色其中前3种具有对应的颜色表,而24位位图的颜色表为空,其像素值就是颜色值12。3.2.2 定义DIB处理函数集由于DIB位图能独立地保存固有的图像处理信息,能在不同的系统中重显其图像,因此成为Windows环境中的基本图像格式。由于MFC中没有涉及处理DIB位图的类,因此,利用Visual C+进行DIB位图编程时只能使用“非面向对象”,即直接调用Win32 SDK的有关API函数。因此,我们要定义一个处理DIB位图的专用类,比如一个名为CDib的类,在其中封装必需而且有效的DI

31、B数据成员和处理函数。但是,在构思这样一个类时,会遇到许多困难。因为,即使是Win32 SDK也没有为我们提供多少可以直接处理DIB位图的API函数。因此,为了实现这样的类,就必须先设计好一套处理DIB位图的完整函数集,这将是实现CDib类函数时,调用该函数集,也将使类的代码更简练。MFC的类实现也是以Win32 SDK API函数为基础的,因此在设计CDib类时,首先要设计一套对应的函数集。定义的DIB处理函数如表3-2所示。表3-2 DIB处理函数集函数类型函 数 名功 能初始化函数CreateDIB 创建一个空的DIBCreateDefaultDIB 用当前的系统调色板创建一个空的DIB

32、DestroryDIB 释放DIB内存块LoadDIB 从DIB文件中装载DIB数据SaveDIB 读DIB存到文件中ReadDIBFile 读DIB存到内存中BytesPerLine 获取DIB每行所占的字节数DIBlockSize 获取DIB数据块的大小DIBHeight 获取DIB高度DIBWidth 获取DIB宽度DIBNumColors 获取DIB的颜色数DIBBitCout 获取DIB的图像颜色位数FindDIB Bits 获取DIB数据块的地址(指针)PletteSize 获取DIB的调色板中的颜色表项数PaintBitmap 显示DDBPaintDIB 显示DIBPaintDI

33、B 显示DIBDIBToDIBSetion 将DIB数据块转换为DIBSECTIONDIBSectionToDIB 将DIBSECTION转换为DIB数据块ConvertDIBFormat 修改的格式BitmapToDIB 将DDB转换为DIBChangeBitmapFormat 修改DDB的格式DIBToBitmap 将DDB转换为DIBChangeDIBFormat 基于当前的系统调色板修改DIBCreateDIBPalette 创建DIB调色板DisplayPalette 显示调色板CopyPalette 拷贝调色板GetSystemPalette 获取当前的系统调色板PalEntrie

34、sOnDevice 获取设备的调色板表项数CreateIdentifyPalette创建等同调色板MapDIBColorsToPalette按指定的调色板映射DIB的颜色CopyScreenToBitmap 将屏幕显示转换为一个DDBCopyWindowToBitmap 将指定窗口的显示转换为一个DDBCopyClientRectToBitmap将指定窗口用户区的指定区域显示转换CopyScreenToDIB 为一个DDB CopyWindowToDIB 将指定窗口的显示转换为一个DIB属性函数显示函数操作函数调色板函数捕获函数为了使用方便,将上述函数的声明及相关的常量、宏及数据类型定义放在文

35、件DIBAPI.H中,而将所有函数的代码放在文件DIBAPI.CPP中。3.2.3 CDib类的设计目标3.2.3.1功能实现图像处理的基础是设计一个解释位图的DIB类(名CDib),基本功能如下所述。(1) 多种形式的构造函数,包括创建空DIB、从DDB创建、从DIB句柄创建、从DIB数据块指针创建及从屏幕或窗口显示创建等;(2) 支持拷贝构造函数和赋值运算;(3) DIB文件的读、写操作;(4) 从资源中装载DIB位图;(5) DIB的显示;(6) 提供DIB的空间、颜色和格式特征等信息;(7) DDB与DIB的相互转换;(8) DIB格式转换;(9)IB调色板操作;(10) 能获取DIB

36、位图数据的句柄;(11) 能生成DIB数据的拷贝。3.2.3.2父类由于MFC中已有一个支持DDB操作的CBitmap类,因此,很直观的想法是,以CBitmap类为父类派生出的CDib类。但是,从长远考虑,这样做并没有什么好处。首先,CBitmap类是为DDB的操作而设计的,其中没有处理DIB的功能,因此CDib类不能从中继承任何可用的功能。其次,CBitmap类是从CGdiobject中派生来的,CBitmap类以及它从CGdiobject类继承来的数据成员和功能函数对CDib类来说都是不合适的,也是多余的。此外,CBitmap类没有提供有效的文件操作机制。而DIB主要是一种“外部”位图,即

37、它主要以文件形式进行存储和交换,所以CDib类应该能很好的处理文件操作。MFC中的CObject类是MFC中其他大多数类的根类和基类。它不但提供许多有用的特性,还包括对文件串行化的支持,运行时类信息和对象诊断的输出等。如果从CObject类派生类,则可继承该类的这些特性。另外,CObject类具有最低限度的成员数据和函数,从CObject类派生类所付出的代价是最低的。因此,采用CObject类作为CDib类的父类是很合理的。从CObject类派生一个类时,可以从如下4个层次的功能中进行选择。(1) 基本功能:不支持运行时的类信息和串行化,但包含内存诊断处理;(2) 基本功能加上对运行时的类信息

38、的支持;(3) 基本功能加上对运行时的类信息和动态创建的支持;(4) 基本功能加上对运行时的类信息、动态创建和串行化的支持;CObject类的派生类利用几个宏来实现对上述功能的支持,如表3-3所示。表3-3 用于支持运行时的类信息和串行化宏支持运行时的类型信息(CObject:IsKindof)动态创建(CrunTimeClass:CreateObject)串行化(Carchive:Operator>> Carchive:Operator<<)基本CObject功能NoNoNoDECLARE_DYNAMICYesNoNoDECLARE_DYNCREATEYesYesNo

39、DECLARE_SERIALYesYesYes由于文件操作对DIB来说很重要的,所以串行化操作是CDib类必须从CObject中继承下来的特性。串行化指在文件中读写对象的过程,MFC把CArchive类的对象作为要串行化的对象和存储媒体之间的桥梁。CArchive类对象用重载的插入操作符(<<)和抽取操作符(>>)来执行读写操作。要在类中支持串行化,需要在定义类时做如下操作:(1) 以CObject类为父类来派生类;(2) 覆盖CObject类的虚函数Serialize;(3) 在类的说明使用DECLARE_SERIAL宏;(4) 定义一个不带参数的构造函数;(5) 在

40、类的实现文件中IMPLEMENT_SERIAL宏。3.2.3.3数据封装面向对象方法的一个重要特征就是数据封装。即将类的成员数据隐藏在类中,外界只能通过类的成员函数来操作类的成员数据。这是面对对象方法的重要有点,它可以保护类中的数据不受外部的意外修改。但是,过分“纯粹”的数据封装,需要付出降低程序效率的代价。特别是在设计像CDib这样需要大量使用Win32 API函数的类时,这种缺陷特别突出。因为操作DIB的API函数大多需要一些DIB的属性作为参数。如果硬要将这些属性封装起来,则需要在类中重新实现许多Win32 API函数。这不但要花费很大的精力,而且还可能因此而产生错误和低效。所以,在设计

41、CDib时应采用既尽可能保证数据非封装,又能保证效率的提高。3.2.3.4继承CDib类的另一个设计目标应该考虑到,今后可能需要从CDib类中派生子类,即注意其可继承性。通过将有关的成员函数定义为虚函数,可以保证在派生类中重载它们,以支持继承中的多样性。4 数字图像处理图像处理就是用一系列特定操作来改变图像的像素,以达到特定的目标,比如使图像跟清晰,或从图像中提取某些特定的信息等。数字图像处理是现代图像处理的主要方法,具有再现性好,精度高,适用面广和灵活性大的优点。数字图像处理由数字处理系统完成,其结构如图4-1所示。它主要包括图像采集系统、计算机图像处理系统和图像输出系统3部分。图4-1 图

42、像处理系统计算机图像处理系统由计算机软硬件系统组成。计算机图像处理的软件系统是基于数字图像处理的理论和算法而设计的一系列程序,用以实现图像的增强、变换、变形、压缩和彩色处理等操作。数字图像处理的内容非常丰富,是现代计算机的重要应用方向,从功能上可以将数字图像处理划分为3大类,如图4-2所示。图4-2 数字图像处理功能划分从图像处理对图像像素的处理方式上可以划分为点处理和区域处理两种。点处理是一种输出像素值仅取决于输入像素值的图像处理方法;区域处理的输出像素值不仅与输入像素值有关,而且与输入像素在一定范围内的相邻像素值有关。4.1图像处理的基本方法基本的图像处理方法可分为点处理和区域处理两类。点

43、处理相对较简单,只能改变图像的灰度分布,但不会改变图像内的空间关系。点处理可以按预定的方式改变图像的灰度直方图。最常用的点处理是灰度直方图均衡。区域处理在处理某一像素时,利用与该像素相邻的一组像素,经过某种变换得到处理后图像中某一点的像素值。目标像素的邻域一般是由像素组成的二维矩阵,该矩阵的大小为奇数。目标像素位于该矩阵的中央,即目标像素就是区域的中心像素。经过处理后,目标像素的值为经过特定算法计算后所得的结果。区域中心像素周围的那些像素值在二维方向上提供了图像的亮度变化趋势的信息。图像中像素的亮度在一定距离上的变化速率称为图像的空间频率。区域处理将改变图像的空间频率信息,减缓或增强图像中的某

44、些特定的频率分量13。主要的区域处理算法有卷积法、中值滤波法和Sobel边缘检测法。我们这里只介绍卷积法。(1) 卷积原理卷积可以简单地看成加权求和的过程。卷积时使用的权用一个很小的矩阵来表示,矩阵的大小是奇数,而且与使用的区域的大小相同。这种权矩阵叫做卷积核,区域中的每个像素分别与卷积核中的每个元素相乘,所有乘积之和即为区域中心像素的新值。卷积核中各元素叫做卷积系数。卷积核中卷积系数的大小、方向及排列次序决定了卷积的图像处理效果。大多数常用的卷积核都是3×3的,所有卷积核的行、列数都是奇数14。(2) 低通滤波:图像平滑与模糊低通滤波的基本思路是保留图像空间频率的低频成分,减少图像

45、的高频成分。低通滤波可以降低图像中的视觉噪声,同时除去图像中的高频部分后,图像中那些本来不明显的低频成分就更容易识别了15。(3) 高通滤波:图像锐化与清晰高通滤波增强图像的高频空间频率成分,阻挡低频中间频率成分。相对于高频成分来说,低频成分被削弱了。在需要突出图像中的高频成分时,可对图像进行高通滤波。(4) 平滑与锐化对图像进行低通滤波将使图像平滑;而对图像进行高通滤波将使图像锐化。因此图像的平滑与锐化处理实际上就是对图像进行低、高通滤波,即用低、高通滤波器作为卷积核来对图像进行卷积处理。(5) 图像描述的形态学方法“形态学”是描述动植物形态和结构的一门生物学分支,这里借用来指一种图像处理的

46、方法。图像处理的形态学方法是一种“数学形态学”方法,用来提取图像成分,并据此来对图像区域的形状进行表示和描述。数学形态学的数学语言是集合理论,其中的集合代表图像中物体的形状。图像处理中常用的数学形态学方法包括腐蚀、膨胀、开、闭、边缘提取和图像细化等。4.2图像处理软件设计4.2.1设计步骤和要点用Visual C+编制ImageProcess的步骤和要点如下:(1)使用AppWizard生成一个基于多文档的项目ImageProcess;(2)将CImageProcessView类的基类设为CScrollView类;(3)将DIBAPI.H,DIBAPI.CPP,DIB.H和DIB.CPP增加到

47、ImageProcess项目中;(4)将String Table中的字符串资源IDR_TRANSFTYPE修改为:nDib nDib nDib Files (*.bmp; *.dib)n.bmpnImageProcess.DocumentnImageP Document;(5)在CImageProcessDoc类中增加一个表示CDib对象指针公共数据成员m_pDib,并在CImageProcessDoc类的构造函数中初始化它;(6)在CImageProcessDoc类重载的成员函数Serialize的最开始处增加一行语句:m_pDib->Serialize(ar);(7)修改CImage

48、ProcessView类的OnInitialUpdate函数如下:Void CImageProcessView::OnInitialUpdate() CScrollView:OnInitialUpdate();CImageProcessDoc * pDoc =GetDocument();Csize sizeTotal(pDoc->m_pDib->GetWidth(),pDoc->m_pDib->GetHeight();SetScrollSizes(MM_TEXT,sizeTotal);CMainFrame *pAppFrame=( CMainFrame *) AfxGe

49、tApp()->m_pMainWnd;ASSERT_KINDOF(CMainFrame, pAppFrame);CRect rc;PAppFrame->GetClientRect(&rc);If (rc.Width() >= sizeTotal.cx && rc.Height() >= sizeTotal.cy && (sizeTotal.cx>0| sizeTotal.cy>0)ResizeParentToFit(FALSE);(8) 在CImageProcessView::OnDraw函数中调用CDib:Displ

50、ay函数显示DIB:Void CImageProcessView::OnDraw (CDC*pDC)CImageProcessDoc * pDoc =GetDocument();ASSERT_VALID(pDoc);If (!pDoc->m_pDib->IsEmpty()pDoc-> m_pDib->Display(Pdc,0,0);(9) 用ClassWizard给个菜单命令增加处理函数,包括COMMAND和UPDATA_COMMAND_UI处理函数;(10)各菜单命令的UPDATA_COMMAND_UI处理函数结构相同,在函数中,将菜单命令的有效条件设为m_pDib

51、不为空;(11)由于每一种图像处理算法都涉及一个处理的强度,需要调用一个相同的对话框来获取参数。先在资源编辑器中建立该对话框模版IDD_CONVOLUTE,用classWizard为它创建对应的对话框类,并在类代码中实现有关的代码;(12)调用相应的处理函数实现每一种图像处理的处理函数;(13)协调调色板;(14)在项目工程中加入输入库winmm.lib,使Delay函数调用的timeGetTime函数能被正确连接。4.2.2主界面设计数字图像处理软件主界面,考虑到图像处理的方便,决定采用多文档界面。如图4-3所示。图4-3 数字图像处理软件主界面4.2.3菜单设计主菜单如图4-4所示,包括文

52、件、编辑、查看、窗口、图像变换、艺术效果、平锐、边缘检测、边缘增强等菜单项。图4-4 数字图像处理软件主菜单另外,图像变换菜单中含有快速傅里叶变换和余弦变换等子菜单;艺术效果中有浮雕和油画等子菜单;边缘检测中有Sobel边缘检测、Hough边缘检测、Canny边缘检测、均匀边缘检测和差异边缘检测等子菜单;边缘增强菜单中有垂直边缘和水平边缘等子菜单;图像形态学中有腐蚀、膨胀、开运算、闭运算,边缘提取等子菜单。如图4-5所示。图4-5 数字图像处理软件子菜单4.2.4工具栏设计工具栏如图4-6所示,包括新建、打开、保存和关于等。图4-6 数字图像处理软件工具栏4.3数字图像处理结果此处仅介绍几种经

53、过处理后的图像,如图4-7所示,为图像原图。图4-7 原图经过一些数字图像处理软件处理过后,如图4-8、4-9、4-10、4-11、4-12所示。 图4-8 经过浮雕后的图像图4-9 经过油画后的图像图4-10 经过sobel边缘检测后的图像图4-11 经过边缘增强后的图像图4-12 经过中值滤波去噪后的图像5评估与结论本文主要研究图形图像系统的开发与设计。在设计之前查阅了有关图像格式、图像变换技术、图像处理技术以及VC+图形图像编程的资料,最终实现了图像系统的设计。系统基本上实现了图像变换、图像处理等功能。通过对独立功能的封装,可以为今后需要的图像的应用奠定基础。系统的优点具体表现在以下方面。(1) 充分体现了面向对象的思想设计,充分运用了c+的特性,比如多态性、继承和重载。(2) 程序结构清晰可读性好,程序中做了充分的注释。(3) 容易扩充和移植。系统由于设计时间短,因此有许多考虑不到的地方,工作中的主要精力集中在图形系统的设计,设计了性能优化的几个类,在图像处理和图像格式转换方面因为网上已经有非常优秀的共享代码可供参考,自己再设计图像类就进行了重复工作,所以图像类是借用共享代码实现。在功能上还不够

温馨提示

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

评论

0/150

提交评论