基于位图的数字图像处理系统软件学院本科学位论文.docx

上传人:b****1 文档编号:20106376 上传时间:2023-04-25 格式:DOCX 页数:44 大小:4.39MB
下载 相关 举报
基于位图的数字图像处理系统软件学院本科学位论文.docx_第1页
第1页 / 共44页
基于位图的数字图像处理系统软件学院本科学位论文.docx_第2页
第2页 / 共44页
基于位图的数字图像处理系统软件学院本科学位论文.docx_第3页
第3页 / 共44页
基于位图的数字图像处理系统软件学院本科学位论文.docx_第4页
第4页 / 共44页
基于位图的数字图像处理系统软件学院本科学位论文.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

基于位图的数字图像处理系统软件学院本科学位论文.docx

《基于位图的数字图像处理系统软件学院本科学位论文.docx》由会员分享,可在线阅读,更多相关《基于位图的数字图像处理系统软件学院本科学位论文.docx(44页珍藏版)》请在冰豆网上搜索。

基于位图的数字图像处理系统软件学院本科学位论文.docx

基于位图的数字图像处理系统软件学院本科学位论文

论文编号:

安阳师范学院本科学生毕业论文

基于位图的数字图像处理系统

 

作  者  王**  

系(院)  ********学院  

专  业  信息管理与信息系统 

年  级  2006级2班  

学  号  ******** 

论文成绩 

指导教师  吴亮  

日  期  2010年5月  

 

学生诚信承诺书

本人郑重承诺:

所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究成果。

尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写的研究成果,也不包含为获得安阳师范学院或其他教育机构的学位或证书所使用过的材料。

与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。

签名:

          日期:

        

 

论文使用授权说明

本人完全了解安阳师范学院有关保留、使用学位论文的规定,即:

学校有权保留送交论文的复印件,允许论文被查阅和借阅;学校可以公布论文的全部或部分内容,可以采用影印、缩印或其他复制手段保存论文。

签名:

        导师签名:

       日期:

 

目录(自动生成)

前言1

1概述2

1.1课题设计的背景和意义2

1.2数字图像处理的方法概要与应用领域2

1.2.1数字图像处理的方法概要2

1.2.2数字图像处理的应用领域3

1.3数字图像系统简介3

2数字图像处理系统开发技术基础4

2.1C++语言优点4

2.2VC++平台简介5

2.3MFC技术简介5

2.3.1封装5

2.3.2继承6

2.3.3虚拟函数和动态约束6

2.4MDI应用程序的构成7

3需求分析7

3.1系统功能需求分析7

3.2系统处理流程分析8

4系统总体设计9

4.1系统功能模块划分9

4.2类的设计9

4.2.1对话框类9

4.2.2CMyDIB、CBmpShow、CRectTrackerEx类4

4.2.3系统框架类4

5系统的详细设计4

5.1文件模块的设计4

5.2图像编辑模块4

5.3图像处理模块4

5.3.1图像的点运算14

5.3.2图像的几何运算17

5.3.3图像的正交变换19

5.3.4图像的增强和复原19

5.3.5图像边缘检测与分割4

5.3.6图像编码23

5.4系统调试24

结束语25

参考文献25

基于位图的数字图像处理系统

王伟

(安阳师范学院人文管理学院,河南安阳455002)

摘要:

随着信息技术的蓬勃发展,尤其是计算机技术的日新月异,为数字图像处理的发展提供了广阔的空间。

该数字图像处理系统是基于Windows平台的图像处理系统,实现了对灰度级图像的编辑,可以进行图像导入和导出,视图设置,可以调整图片尺寸,旋转和翻转图片,图片增强优化,图像边缘检测与分割,图像编码以及打印输出图片。

本文主要介绍了数字图像处理系统的设计和实现过程,系统设计运用MFC的设计思想,通过VC++实现系统框架,简化了软件的开发,提高了软件系统的灵活性、可扩展性和重用性。

同时系统所有的操作设计得十分简单方便,无需具备有专业的知识,也能对图片完成编辑操作。

(摘要写作注意:

摘要主要说明自己做了什么工作,用到那些技术,主要功能简单介绍,有什么意义。

避免冗长琐碎的介绍、口语化介绍。

关键词:

VC++;MFC;灰度级图像;图像编辑(三到五个)

前言

数字图像处理(DigitalImageProcessing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。

数字图像处理最早出现于20世纪50年代,当时的电子计算机已经发展到一定水平,人们开始利用计算机来处理图形和图像信息。

数字图像处理作为一门学科大约形成于20世纪60年代初期。

早期的图像处理的目的是改善图像的质量,它以人为对象,以改善人的视觉效果为目的。

图像处理中,输入的是质量低的图像,输出的是改善质量后的图像,常用的图像处理方法有图像增强、复原、编码、压缩等。

首次获得实际成功应用的是美国喷气推进实验室(JPL)。

他们对航天探测器徘徊者7号在1964年发回的几千张月球照片使用了图像处理技术,如几何校正、灰度变换、去除噪声等方法进行处理,并考虑了太阳位置和月球环境的影响,由计算机成功地绘制出月球表面地图,获得了巨大的成功。

随后又对探测飞船发回的近十万张照片进行更为复杂的图像处理,获得了月球的地形图、彩色图及全景镶嵌图,获得了非凡的成果,为人类登月创举奠定了坚实的基础,也推动了数字图像处理这门学科的诞生。

在以后的宇航空间技术,如对火星、土星等星球的探测研究中,数字图像处理技术都发挥了巨大的作用。

数字图像处理取得的另一个巨大成就是在医学上获得的成果。

1972年英国EMI公司工程师Housfield发明了用于头颅诊断的X射线计算机断层摄影装置,也就是我们通常所说的CT(ComputerTopography)。

CT的基本方法是根据人的头部截面的投影,经计算机处理来重建截面图像,称为图像重建。

1975年EMI公司又成功研制出全身用的CT装置,获得了人体各个部位鲜明清晰的断层图像。

1979年,这项无损伤诊断技术获得了诺贝尔奖,说明它对人类做出了划时代的贡献。

与此同时,图像处理技术在许多应用领域受到广泛重视并取得了重大的开拓性成就,属于这些领域的有航空航天、生物医学工程、工业检测、机器人视觉、公安司法、军事制导、文化艺术等,使图像处理成为一门引人注目、前景远大的新型学科。

随着图像处理技术的深入发展,从70年代中期开始,随着计算机技术和人工智能、思维科学研究的迅速发展,数字图像处理向更高、更深层次发展。

概述

1.1课题设计的背景和意义

所谓图像处理,就是对图像信息进行加工以满足人的视觉心理或应用需求的行为[9]。

视觉是人类从大自然中获取信息的最主要的手段。

据统计,在人类获取的信息中,视觉信息约占60%,听觉信息约占20%,其他的如味觉信息、触觉信息等加起来约占20%。

由此可见视觉信息对人类的重要性,而图像正是人类获取视觉信息的主要造径。

所谓“图”,就是物体透射或者反射光的分布;“像”是人的视觉系统接收图的信息而在大脑中形成的印象或认识。

前者是客观存在的,而后者是人的感觉,图像就是两者的结合。

随着科学技术的发展和人民生活水平的提高,数字摄像机的出现和数字图像处理技术的发展,在日新月异的数字化时代中,越来越引起人们的广泛关注,数字图像处理已经成为必备的基础知识。

近几十年来由于计算机技术的蓬勃发展,图像处理技术也得到了空前的发展和应用。

目前,图像处理技术已经广泛应用于工业、军事、医学、交通、农业、天气预报、银行、超市、重要部门的监控报警系统、可视电话、网络传输等等领域,成为各个学科学习和研究对象。

随着图像处理技术的广泛应用,学习和掌握这门科学显得格外重要,图像处理已经成为信息技术相关领域的核心课程。

1.2数字图像处理的方法概要与应用领域

1.2.1数字图像处理的方法概要

图像处理的方法多种多样,—般可分为图像变换、图像增强和复原、图像分割、图像压缩编码、图像描述和图像识别等几类[11]:

1)图像变换

由于图像阵列很大,直接在空间域中进行处理,涉及的计算量很大。

利用正交变换(如傅里叶变换、余弦变换等)的性质和特点,将图像变换到频率域中进行处理,不仅可减少计算量,而且可获得更有效的处理,如博里叶变换可在领域中进行数字滤波处理。

目前新兴研究的小波交换在时域和频域中都具有良好的局部化特性,它在图像处理中也有着广泛而有效的应用。

该部分主要研究各种变换模型和处理方法。

2)图像增强和复原

图像增强和复原的目的都是为了提高图像的质量。

①图像增强。

利用各种数学方法和变换手段提高图像中目标与非目标(如背景)的对比度与清晰度,达到突出目标,有效地表示和提示图像,以利于人或机器进行分析处理的目的。

该部分主要研究各种增强模型和处理方法。

②图像复原。

在景物成像过程中,由于成像设备与物体的相对运动、介质散射、系统畸变(如成像系统的变焦、成像器材的固有缺陷)、噪声干扰等因素会造成图像质量降低,称之为“退化”,典型现象是图像模糊。

使退化的图像恢复本来面目,真实反映原景物图像的处理,称为图像复原。

该部分主要研究各种校正模型和处理方法。

图像增强不考虑图像降质的原因,突出图像中所感兴趣的部分。

如强化图像高频分量,可使图像中物体轮廓清晰,细节明显;强化低频分量,可减少图像中噪声影响。

图像复原要求对图像降质的原因有一定的了解,一般而言,应根据降质过程建立“降质模型”再采用某种滤波方法,恢复或重建原来的图像。

3)图像压缩编码

把数字化的图像数据按一定规则进行排列或运算的过程称为图像编码。

内于图像的数据量很大,存储要占很大的空间,传输也要花费不少时间,为此利用图像本身的内在特性(如像素灰度值之间的相关性),按某种特殊方式编码,以压缩总的信息量,称之为图像压缩编码。

该部分主要研究各种高效压缩编码方法。

压缩可以在不失真的前提下获得,也可以在允许的失真条件进行。

编码是压缩技术中最重要的方法,它在图像处理技术中是发展最早且比较成熟的技术。

4)图像分割

图像分割是数字图像处理中的关键技术之—。

图像分割是将图像中有意义的特征部分提取出来,其有意义的特征有图像中的边缘、区域等,这是进一步进行图像识别、分析和理解的基础。

虽然目前已研究出不少边缘提取、区域分割的方法,但还没有一种普遍适用于各种图像的有效方法。

因此,对图像分割的研究还在不断深入之中,是目前图像处理中研究的热点之一。

5)图像描述

图像描述是图像识别和理解的必要前提。

作为最简单的二值图像可采用其几何特性描述物体的特性,一般图像的描述方法采用二维形状描述,它有边界描述和区域描述两类方法。

对于特殊的纹理图像可采用二维纹理特征描述。

随着图像处理研究的深入发展,已经开始进行三维物体描述的研究,提出了体积描述、表面描述、广义圆柱体描述等方法。

1.2.2数字图像处理的应用领域

图像信息是人类主要的信息来源之一,图像处理的应用领域也涉及到人们工作生活中的方方面面。

主要应用可归纳为以下几个方面:

(1)医用图像处理。

医学上不论是基础研究还是临床应用,都是图像处理种类极多的领域。

例如生物医学的显微图像的处理分析,如红白细胞和细菌,染色体分析;临床诊断中X光图像的鉴别、超声波图像(B超)的分析、眼底照片的分析等都是医疗辅助诊断的重要手段,尤其是计算机层析成像技术(CT),可以获得人体剖面图,使肌体病变特别是肿瘤的诊断起到了革命性的变化,近年来出现的核磁共振CT,使人体免受各种硬射线的伤害,而且图像更为清晰。

(2)遥感图像的处理。

飞机或人造卫星传送来的遥感图像,由于各种原因图像质量不是很好,必须在成像、存储、传输、判读过程中进行各种数字处理与分析(如辐射校正、几何畸变校正、多光谱统计信息分类等),并将其变为可视的资源信息或气象信息,如大气预报中的卫星云图。

目前遥感技术已在资源调查、灾害监测、农业规划、城市规划、环境保护等方面得到了广泛的应用。

(3)文字的识别与图纸的判读。

文字与图纸是科技信息的主要传输手段。

文字与图纸在图像处理中都是以最简单的二值图像形式出现的。

文字识别的应用包括手写体文字的识别、图文混合中文字的识别等,如邮政编码的自动识别,计算机光笔输入,经扫描仪扫描的文字材料是以图像文件的形式保存,如何将其转变成文本文件等等。

目前此类应用技术已比较成熟,如OCR软件等。

图纸的判读则涉及到各种逻辑图和机械设计图的自动读取问题,其中也包括图纸上的文字识别问题(即图文混合下的文字识别)。

(4)工业领域的应用。

产品外观检测与筛选,表面缺陷的自动检测,组装与流水线上的自动化,工业材料的质量检验。

(5)农业上的应用。

包括农产品色度的检测(如鉴别水果成熟度),农牧产品,作物的表血形状和特征参数的测定。

(6)其他。

指纹识别、影视中的特效等。

1.3数字图像系统简介

数字图像处理系统是一款简单而又实用的灰度级图像处理软件,是基于Windows平台的应用程序,利用VisualC++6.0的编译环境提高了系统的开发速度,实现数字图像的查看与编辑操作。

主要内容有:

图像文件的打开和保存,实现了对灰度级图像的操作。

图像的几何变换,实现对图像文件的旋转、缩放、以及镜像处理。

图像增强和复原,实现对降质的图像进行改善处理和提高图像质量的逼真度。

图像的边缘检测和分割,产生更适合人观察和识别的图像。

图像编码,对图像采用不同的表达方法以减小表示图像所需的数据量。

2数字图像处理系统开发技术基础

2.1C++语言优点

C++语言是一个面向对象的语言,使用C++编写的代码更加简捷、高效,更具可维护性和可重用性。

C++语言的优点主要有以下几点:

1、使用new和delete进行动态内存分配和释放

运算符new和delete是C++新增的运算符,提供了存储的动态分配和释放功能。

它的作用相当于C语言的函数malloc()和free(),但是性能更为优越。

使用new比使用malloc()有以下的几个优点:

(1)、new自动计算要分配类型的大小,不使用sizeof运算符,比较省事,可以避免错误。

(2)、它自动地返回正确的指针类型,不用进行强制指针类型转换。

(3)、可以用new对分配的对象进行初始化。

2、使用inline内连函数替代宏调用

对于频繁使用的函数,C语言建议使用宏调用代替函数调用以加快代码执行,减少调用开销。

但是宏调用有许多的弊端,可能引起不期望的副作用。

例如宏:

#defineabs(a)((a)<0?

(-a):

(a)),当使用abs(I++)时,这个宏就会出错。

所以在C++中应该使用inline内连函数替代宏调用,这样即可达到宏调用的功能,又避免了宏调用的弊端。

使用内连函数只需把inline关键字放在函数返回类型的前面。

例如:

inlineintAdd(inta,intb);//声明Add()为内连函数

这样编译器在遇到Add()函数时,不再进行函数调用,而是直接嵌入函数代码以加快程序的执行。

3、使用函数重载

在C语言中,两个函数的名称不能相同,否则会导致编译错误。

而在C++中,函数名相同而参数不同的两个函数被解释为重载。

例如:

voidPutHz(char*str);//在当前位置输出汉字

voidPutHz(intx,inty,char*str);//在x,y处输出汉字

使用函数重载可以帮助程序员应付更多的复杂;同时在大型程序中,使函数名易于管理和使用,而不必绞尽脑汁地去处理函数名。

4、使用引用(reference)代替指针进行参数传递

在C语言中,如果一个函数需要修改用作参数的变量值的时候,参数应该声明为指针类型。

例如:

voidAdd(int*a){(*a)++;}

但是对于复杂的程序,使用指针容易出错,程序也难以读懂。

在C++中,对于上述情况可以使用引用来代替指针,使程序更加清晰易懂。

引用就是对变量取的一个别名,对引用进行操作,就相当于对原有变量进行操作。

例如使用引用的函数定义为:

voidAdd(int&a)(a++;);//a为一个整数的引用

5、使用“类”对数据进行封装

C语言是模块化的程序语言,通过函数的使用和文件的单独编译实现了一定的数据封装功能。

但C++通过使用“类”的强大功能,在数据封装、继承等很多的方面比C做得更好。

通过使用“类”把数据和对数据的所有操作集合封装在一起,建立了一个定义良好的接口,使程序员在使用一个类的时候可以只关心它的使用,而不必关心它的实现。

6、类模版

类模版使得程序员在设计一个类时,可以将数据类型作为类的参数,从而定义一个类属类。

作为参数的类型既可以是c++语言提供的基本类型与复合数据类型,也可以是程序员自定义的类类型。

类属类的主要用途是定义包容数据结构。

利用类模版,以此就可以定义出具有共性(除类型参数除外、其余全相同)的一组类。

即通过使用类模版,可使得所定义类中的某些数据成员、某些成员函数的参数、某些成员参数的返回值都可以使任意类型的(包括系统预定义类型以及用户自定义类型),从而使得一段程序可用于处理多种不同类型的对象[14]。

2.2VC++平台简介

VC++是在Windows平台下构建32位应用程序的强大而又复杂的开发工具,是目前世界上使用非常广泛的工具之一。

VC++的应用非常广泛,从桌面应用程序到服务器端软件,从系统软件到应用软件,从单机程序到分布式应用程序,从图形图像处理到游戏开发,VC++无所不在[6]。

VC++是Windows平台上的C++编程环境,学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识,难度比较大。

VC++DeveloperStudio包含有编写程序源代码的编辑器,设计用户界面(菜单、对话框、图标等)的资源编辑器,建立项目配置的项目管理器,检查程序错误的集成调式等工具,同时,它还提供了功能强大的应用程序向导AppWizard和类向导ClassWizard工具。

AppWizard用于生成各种不同类型的具有Windows界面风格的应用程序的基本框架,在生成应用程序框架后,使用ClassWizard便可轻松完成创建新类,映射消息、定义消息处理函数、重载虚函数等操作[1]。

2.3MFC技术简介

MFC(MicrosoftFoundationClassLibrary,微软基础类库)是微软为了简化程序员的开发工作所开发的一套C++类的集合,是一套面向对象的函数库,以类的方式提供给客户使用。

利用这些类可以有效的帮助程序员完成Windows应用程序的开发。

MFC中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。

因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。

MicrosoftVisualC++提供了相应的工具来完成这个工作:

AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑[7]。

2.3.1封装

构成MFC框架的是MFC类库。

MFC类库是C++类库。

这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下。

(1)对Win32应用程序编程接口的封装

用一个C++Object来包装一个WindowsObject。

例如:

classCWnd是一个C++windowobject,它把Windowswindow(HWND)和Windowswindow有关的API函数封装在C++windowobject的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。

(2)对应用程序概念的封装

使用SDK编写Windows应用程序时,总要定义窗口过程,登记WindowsClass,创建窗口等等。

MFC把许多类似的处理封装起来,替程序员完成这些工作。

另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。

文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。

(3)对COM/OLE特性的封装

OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。

MFC的OLE类封装了OLEAPI大量的复杂工作,这些类提供了实现OLE的更高级接口。

(4)对ODBC功能的封装

以少量的能提供与ODBC之间更高级接口的C++类,封装了ODBCAPI的大量的复杂的工作,提供了一种数据库编程模式。

2.3.2继承

首先,MFC抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。

这些类中,最重要的类是CObject和CCmdTarget。

CObject是MFC的根类,绝大多数MFC类是其派生的,包括CCmdTarget。

CObject实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持等等。

所有从CObject派生的类都将具备或者可以具备CObject所拥有的特性。

CCmdTarget通过封装一些属性和方法,提供了消息处理的架构。

MFC中,任何可以处理消息的类都从CCmdTarget派生。

针对每种不同的对象,MFC都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。

这些对象包括以下种类:

窗口对象,基类是CWnd;应用程序对象,基类是CwinThread;文档对象,基类是Cdocument,等等。

程序员将结合自己的实际,从适当的MFC类中派生出自己的类,实现特定的功能,达到自己的编程目的。

2.3.3虚拟函数和动态约束

MFC以“C++”为基础,自然支持虚拟函数和动态约束。

但是作为一个编程框架,有一个问题必须解决:

如果仅仅通过虚拟函数来支持动态约束,必然导致虚拟函数表过于臃肿,消耗内存,效率低下。

例如,CWnd封装Windows窗口对象时,每一条Windows消息对应一个成员函数,这些成员函数为派生类所继承。

如果这些函数都设计成虚拟函数,由于数量太多,实现起来不现实。

于是,MFC建立了消息映射机制,以一种富有效率、便于使用的手段解决消息处理函数的动态约束问题。

这样,通过虚拟函数和消息映射,MFC类提供了丰富的编程接口。

程序员继承基类的同时,把自己实现的虚拟函数和消息处理函数嵌入MFC的编程框架。

MFC编程框架将在适当的时候、适当的地方来调用程序的代码。

MFC实现了对应用程序概念的封装,类的继承、动态约束、类的关系和相互作用等封装起来。

这样封装的结果对程序员来说,是一套开发模板(或者说模式)。

针对不同的应用和目的,程序员采用不同的模板。

例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板等等。

总之,MFC封装了Win32API,OLEAPI,ODBCAPI等底层函数的功能,并提供更高一层的接口,简化了Windows编程。

同时,MFC支持对底层API的直接调用。

MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理等等。

框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。

2.4MDI应用程序的构成

用AppWizard产生一个MDI工程Jia(无OLE等支持),AppWizard创建了一系列文件,构成了一个应用程序框架。

这些文件分四类:

头文件(.h),实现文件(.cpp),资源文件(.rc),模块定义文件(.def),等。

从CWinApp、CDocument、CView、CMDIFrameWnd、CMDIChildWnd类对应地派生出CJiaApp、CJiaDoc、CJiaView、CMainFrame、CChildFrame五个类,这五个类的实例分别是应用程序对象、文档对象、视对象、主框架窗口对象和文档边框窗口对象。

主框架窗口包含了视窗口、工具条和状态栏。

对这些类或者对象解释如下。

(1)应用程

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学反思汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1