图像形态学腐蚀与膨胀方法研究.doc_第1页
图像形态学腐蚀与膨胀方法研究.doc_第2页
图像形态学腐蚀与膨胀方法研究.doc_第3页
图像形态学腐蚀与膨胀方法研究.doc_第4页
图像形态学腐蚀与膨胀方法研究.doc_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

理工大学学士学位论文摘 要 伴随着电子计算机技术的进步,通信技术日新月异的更新与发展,图像处理技术近年来得到突飞猛进的发展,并成功的应用到几乎所有与成像有关的领域,并发挥着相当重要的作用。它利用计算机对数字图像进行一系列的操作,从而获得某种预期的结果,对图像进行处理时,经常运用图像处理技术以改善图像的质量。现在图像处理仍然在不断的发展,延伸出更多的应用领域,相信数字图像处理技术的逐步发展定会让我们的信息生活变得更好。在图像处理中,数学形态学的理论基础在数字图像信号处理领域中得到广泛应用,图像形态学的用途主要是获取物体拓扑和结构信息,通过物体和结构元素相互作用的某些运算,得到物体更本质的形态。在图像处理中形态学主要应用是:(1)利用形态学的基本运算,对图像进行观察和处理,从而达到改善图像质量的目的;(2)描述和定义图像的几何参数和特征,如面积、周长、连通度、颗粒度、骨架和方向性等。而腐蚀与膨胀是数学形态学最基本的算法,使得腐蚀与膨胀方法的研究价值得到更大的提升。图像形态学腐蚀与膨胀方法在很多方面被应用,本文以图像的腐蚀与膨胀方法的理论分析为重点,围绕着其在众多图像处理方案中的出色表现,逐渐联系到图像的内容。用多层次的介绍手法展现出图像腐蚀与膨胀方法研究的重要内涵。本文主要的工作包括:(1)掌握Visual C+6.0软件的使用。(2)深入学习图像形态学腐蚀与膨胀的基础理论,研究腐蚀与膨胀在图像处理中的应用。(3)针对图像形态学腐蚀与膨胀方法进行研究,通过Visual C+6.0软件实现腐蚀与膨胀算法,掌握腐蚀与膨胀算法的实现过程。本文集中阐述腐蚀与膨胀是如何进行水平腐蚀、垂直腐蚀、全方位腐蚀、水平膨胀、垂直膨胀、全方位膨胀、开运算以及闭运算的完成原理、步骤和它们的具体实现过程。通过一系列的研究才能更加明确腐蚀与膨胀方法处理在图像信息处理的发展历程中发挥了不可替代的作用。关键词:图像处理;数学形态学;腐蚀;膨胀AbstractWith the advance in computer technology, communication technology changes rapidly updated and developed, image processing technology has make a spurt of progress of development in recent years, and successfully applied to almost all domains related to the formation of image, and play a very important role. It uses the computer to carry out a series of operation on the digital image, so as to obtain some expected results, image processing often using image processing technology to improve the quality of the image. Now the image processing is still in constant development, extending more application fields, believe that the gradual development of the digital image processing technology will make our life better.In image processing, the theory foundation of mathematical morphology is applied widely in the field of digital image signal processing, use of image morphology is the main access to the object topology and structure information, some operational through the object and the structural elements of interaction, obtained the object state of nature. In image processing, morphological main applications are: (1) by using basic operation of morphology, were observed and the processing of the image, so as to achieve the purpose of improving the image quality. (2)The definition and description of image geometric parameters and characteristics, such as area, perimeter, connectivity, particle size, frame and direction etc. The corrosion and expansion is the basic algorithm of mathematical morphology which makes the research value of corrosion and expansion method for the greater increase. Method of image morphology of corrosion and expansion is used in many aspects, this paper with the method of image corrosion expansion theory analysis as the key point, around its excellent performance in many images processing scheme, gradually linked to the content of the image. To show the image of corrosion and expansion method research important content of multi-level presentation techniques. The main work of this paper includes: (1) using Visual C+6.0 Software. (2) Study the basic theory and the expansion of the image morphology of corrosion depth, application and expansion of research in image processing corrosion. (3) According to a study on the method of image morphology of corrosion and expansion, realization of erosion and dilation algorithm by Visual C+6.0 Software, master the implementation process of erosion and dilation algorithm. This paper focuses on how the level of corrosion and expansion of corrosion, a full range of vertical horizontal expansion, vertical expansion, a full range expansion, open operation and close operation to complete the principle, steps and their realization.Through the research to a series of more clear corrosion and expansion method has played an irreplaceable role in the development of image processing.Key words: Image processing; mathematical morphology; corrosion; expansion目 录1 绪 论11.1 引言11.2 课题研究现状11.3 课题目的和意义22 开发环境VISUAL C+介绍32.1 Visual C+6.0介绍32.2 Visual C+软件平台介绍42.2.1 单文档格式42.2.2 界面板部分52.2.3 程序控制部分52.3 设计中的MFC介绍53 腐蚀与膨胀的基本原理73.1 图像的腐蚀73.2 图像的膨胀83.3 开运算103.4 闭运算114 图像腐蚀与膨胀处理124.1 CDIB类库的建立124.1.1 CDIB类库的功能124.1.2 CDIB类的构造124.2 图像腐蚀与膨胀处理的实现154.2.1 水平腐蚀处理实现154.2.2 垂直腐蚀处理实现174.2.3 全方向腐蚀处理实现194.2.4 水平膨胀处理实现224.2.5 垂直膨胀处理实现244.2.6 全方位膨胀处理实现265 实验结果及讨论295.1 腐蚀处理结果295.2 膨胀处理结果315.3 开闭运算处理结果325.3 结果讨论34结 论35致 谢37参考文献38附录A 英文原文39附录B 汉语翻译47111 绪 论1.1 引言随着计算机技术的日益发展,图像信息已成为人类认识世界的重要知识来源,人们研究发现,人类从外界获得的信息约有75来自图像。在图像形成、传输或变换的过程中,由于受到其它客观因素诸如系统噪声、曝光不足或过量、相对运动等影响,获取图像往往会与原始图像之间产生某种差异(称为降质或退化)。退化后的图像通常模糊不清或者经过机器提取的信息量减少甚至错误,因此必须对其采取一些手段进行改善。利用计算机对图像进行各种形式的处理,促进了图像处理技术的发展。图像形态学腐蚀与膨胀方法本身就是图像处理中最具有吸引力的领域之一,而图像的灰度是进行图像识别与处理的基础,在对其进行分析处理时,我们需要完成:a.读取数字图像的基础数据,b.对灰度图像和24位图像进行分析与处理,完成图像腐蚀与膨胀变换。实验表明,该程序可以较准确地对图像进行腐蚀与膨胀变换,达到了研究腐蚀与膨胀方法的预期目的1。该文介绍了用不同的结构元素对图像进行水平腐蚀、垂直腐蚀、全方位腐蚀、水平膨胀、垂直膨胀、全方位膨胀、开运算以及闭运算的图像处理,从而等到不同的处理结果。并且利用VC+6.0执行效率高,可继承、封装等方法,对腐蚀与膨胀算法实现。1.2 课题研究现状数学形态学是一门建立在集论基础上的学科,是几何形态学分析和描述的有力工具。数学形态学的历史可回溯到19世纪。1964年法国的Matheron和Serra在积分几何的研究成果上,将数学形态学引入图像处理领域,并研制了基于数学形态学的图像处理系统。1982年出版的专著Image Analysis and Mathematical Morphology是数学形态学发展的重要里程碑,表明数学形态学在理论上趋于完备及应用上不断深入。数学形态学蓬勃发展,由于其并行快速,易于硬件实现,已引起了人们的广泛关注。目前,数学形态学已在计算机视觉、信号处理与图像分析、模式识别、计算方法与数据处理等方面得到了极为广泛的应用2。数学形态学可以用来解决抑制噪声、特征提取、边缘检测、图像分割、形状识别、纹理分析、图像恢复与重建、图像压缩等图像处理问题3。1.3 课题目的和意义近年来,形态学图像处理已经发展成为图像处理的一个主要研究领域。数学形态学是一门建立在严格数学理论基础上的学科,其基本思想和方法对图像处理的理论和技术产生了重大影响。许多非常成功的理论模型和视觉检测系统都采用了数学形态学算法作为其理论基础或组成部分。事实上,数学形态学已经构成一种新型的图像处理方法和理论,形态学图像处理已成为计算机数字图像处理的一个主要研究领域。这门学科在计算机文字识别,计算机显微图像分析(如定量金分析,颗粒分析),医学图像处理,工业检测(如印刷电路自动检测),机器人视觉等方面都取得了许多非常成功的应用一些形态学的算法,已经做成了计算机芯片,许多研究成果已经作为专利出售,其影响已波及到与计算机图像处理有关的各个领域,包括图像增强、分割、恢复、边缘检测、纹理分析、颗粒分析、特征生成、骨架化、形状分析、压缩、成分分析及细化等诸多领域。目前,有关形态学的技术和应用正在不断地发展和扩大4。所以,对数学形态学的理论研究是非常有意义的。随着计算机技术的发展,图像及信号处理技术越来越为大众所需求。数学形态学不仅提供了描述和分析图像几何及形状特征的多种技术和方法,同时它对于经典的图像处理技术也产生了极大的影响并扩展了原有的技术。基于数学形态学的图像处理技术是一种采用集合的概念表示图像、非线性叠加方式描述图像的非线性系统技术,称之为形态系统, 它广泛地应用于生物医学和电子显微镜图像的分析以及数字图像处理和计算机视觉等领域,并已发展成为一种新型的图像处理方法和理论。用于图像处理的形态系统, 具有完备的结构和理论体系,是进行非线性性态分析和描述的有力工具。本文结合目前的研究进展,对图像形态学的腐蚀与膨胀理论研究及其应用进展进行了综合性阐述。目前已经有很多图像处理的方法,但是由于图像形态学的腐蚀与膨胀是基于集合论的方法,属于非线性处理,实际上相比传统的多种线性算法更加适合数字图像的处理。图像形态学的腐蚀与膨胀可以通过对结构元素的调整实现各种场合条件下的应用,且容易用硬件实现,所以利用图像形态学的腐蚀与膨胀进行图像处理已经渐渐发展为与线性方法并行的主流方向。2 开发环境Visual C+介绍2.1 Visual C+6.0介绍Visual C+是Microsoft公司在1998年推出的基于windows 9X和windows NT的优秀集成开发环境。该开发环境为用户提供良好的可视化编程环境,程序员可以利用该开发环境轻松地访问C+源代码编辑器、资源编辑器和使用内部调试器,并且可以创建项目文件。Visual C+6.0不仅包括编译器,而且它还包括了许多有用组件,通过这些组件的协同工作,可以在Visual C+6.0 集成环境中轻松地完成创建源文件,编辑资源,以及对程序的编译连接和调试等各项工作.实际中,更多的是以Visual C+6.0为平台。Visual C+6.0不仅是一个C+编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment, IDE)。Visual C+6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具 这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。Visual C+可以分成两个最主要的部分:1Developer StudioDeveloper Studio包含一个功能强大的编辑器,可以编辑将被编译成Windows程序的Visual C+源文件。这个编辑器有点象字处理器,但是没有字处理器具备的复杂的排版、文本格式等功能,它注重的是如何帮助程序员快速高效地编制程序。它具有以下特点:(1)自动语法。用高亮度和不同颜色的字来显示不同的语法成分,如注释、关键字和一般代码用不同的颜色显示。(2)自动缩进。帮助你排列源代码,使其可读性更强。(3)参数帮助。在编辑时用到预定义的windows函数时,可以自动为你显示函数参数。(4)集成的关键字帮助。能够使你快速得到任何关键字、MFC类或Windows函数的帮助信息。(5)拖放编辑。能够用鼠标选择文本并自由拖动到任意位置。(6)自动错误定位。能自动将光标移动到有编译错误的源代码处。2MFC微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C+环境下编写应用程序的一个框架和引擎,VC+是Win OS下开发人员使用的专业C+ SDK(专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包,MFC作为与VC+血肉相连的部分(注意C+和VC+的区别:C+是一种程序设计语言,是一种大家都承认的软件编制的通用规范,而VC+只是一个编译器,或者说是一种编译器+源程序编辑器的IDE ,WS ,Plat Form ,这跟Pascal和Dephi的关系一个道理,Pascal是Dephi的语言基础,Dephi使用Pascal规范来进行Win下应用程序的开发和编译,却不同于Basic语言和VB的关系,Basic语言在VB开发出来被应用的年代已经成了Basic语言的新规范,VB新加的Basic语言要素,如面向对象程序设计的要素,是一种性质上的飞跃,使VB既是一个IDE,又成长成一个新的程序设计语言),MFC同BC+集成的VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微软为VC+专配的。Developer Studio和MFC把所有的Visual C+工具结合在一起,集成为一个整体,它具有如下特点:(1) 开发环境 Developer Studio 由一套集成工具组成,用于开发Windows 32环境下运行的应用程序。(2) 提供强大的类库工具(MFC AppWizard、Class Wizard等)。(3) Developer Studio以项目工作区组织元件、项目及项目的配置等。(4) MFC类库支持多线程应用程序开发。(5) 提供了最快的集成数据库访问,能让用户开发出功能强大的数据库应用程序。(6) 具有强有力的Internet支持。(7) 对OLE提供强有力的支持5。2.2 Visual C+软件平台介绍VC+6.0软件主要有编译部分,运行部分,面版部分组成由于平滑处理所用的界面并不是一般的头文件和源文件而是用单文档格式利用面板来编写界面和程序的。2.2.1 单文档格式单文档格式是基于VC+6.0编程的一种格式,它允许建立对话框并在对话框对应的函数中进行编程如图2.1所示。图2.1 单文档格式2.2.2 界面板部分界面板部分是一个很直观的控制板,用户在设计时可以直接在控制板上添加按扭文本对话框但是在设计按扭和文本对话框的同时要为他们定义ID,如果一个按扭或者文本没有ID那么他们就不会生效,换句话说,没有ID的界面板是一个空的面板,是没有任何意义的。2.2.3 程序控制部分程序控制部分是基于界面控制面板前提下建立的,它把面板中大部分对话框,按扭等功能附在里面使得按扭对话框控件生效,程序控制部分初始是分为四大部分:虚拟覆盖函数;框架函数;视类;文档函数。这些函数分别负责界面的部分。 2.3 设计中的MFC介绍MFC是Microsoft Foundation Class(微软基础类)的缩写。从物理角度看,它是一个庞大的类库,包含可控制计算机系统方方面面的类库,它对应的是Windows系统目录下的一系列mfc*.dll文件;从逻辑角度看,它是一个面向对象的应用程序框架,程序员可以使用这一框架创建Windows应用程序。MFC的组织是以C+类的层次形式组织在一起的,几个高层类提供一般功能,而低层类实现更具体的功能,每一个低层类都从高层类派生而来,因此继承了高层类的功能。例如,CWnd类是所有Windows窗口的大多类的高层类,此类具备的功能包括打印文本、绘制图形及处理用户的输入等。CsplitterWnd类是从CWnd类派生而来的,因此就具有CWnd类的功能。CsplitterWnd类实现一种可拆分的窗口,用户通过它可以将一个窗口拆分为多个窗口,Windows下的资源管理器就是使用拆分窗口来显示有关计算机资源信息的。MFC处理很多与Windows相关的常见任务。如,在后台做消息处理及对消息进行路由选择,无需程序员在每一个开发的Windows应用程序中编写相同的消息处理循环,MFC已经实现了这一消息循环,并对大多数常见的消息提供了易学易用的消息响应函数。例如,On Paint ()就是CWnd类的一个成员函数,是对WM_PAINT消息进行响应的一个虚成员函数6。除了类的层次外,MFC也提供了一个应用程序开发框架,此框架被称为文档/视图架构。文档/视图架构是将应用程序所需数据的处理与显示相分离的一种编程模式,该框架容许这两部分程序独立存在,当修改其中一部分的时候,不会大量改动另一部分。3 腐蚀与膨胀的基本原理3.1 图像的腐蚀 腐蚀是数学形态学的两种最为基本的运算之一,腐蚀在数学形态学中的作用是消除物体边界点,使边界向内部收缩的过程,可以把小于结构元素的物体去除。这样选取不同大小的结构元素,就可以去除不同大小的物体。如两个物体间有细小的连通,通过腐蚀可将两个物体分开。腐蚀的数学表达式见式(3.1)。S = XB = x , y | B x yX (3.1)在公式中S 表示腐蚀后的二值图像集合, B表示用来进行腐蚀的结构元素, 结构元素内的每一个元素取值为0 或1,它可以组成任何一种形状的图形,在B 图形中有一个中心点;X 表示原图像经过二值化后的像素集合。此公式的含义是用B 来腐蚀X 得到的集合S,S 是由B 完全包括在X 中时B 的当前位置的集合。通常是拖动结构元素在X 图像域移动,横向移动间隔取1 个像素,纵向移动间隔取1 个扫描行。在每一个位置上, 当结构元素B 的中心点平移到X 图像上的某一点( x ,y ),如果结构元素内的每一个像素都与以( x , y )为中心的相同邻域中对应像素完全相同 那么就保留( x ,y ) 像素点,对于原图中不满足条件的像素点则全部删除,从而达到使物体边界向内收缩的效果。为了进一步说明腐蚀的原理,下面通过图3.2 来说明。图3.2 XB示意图如图3.2所示左边是被处理的图像二值图像,针对的是黑点, 中间是结构元素B, 标有1 的点是中心点, 即当前处理元素的位置,用B 的中心点和X 上的点一个一个地对比, 如果B 上的所有对应的点都在X 的范围内,则该点保留,否则将该点去掉;右边是腐蚀后的结果。可以看出,它仍在原来X 的范围内,且比X 包含的点要少,就像X 被腐蚀掉了一层。(a)原图 (b)结构元素 (c)腐蚀示意图图3.3 腐蚀示意图如图3.3所示用结构元素B(如图(b )所示)对目标图像X(如图( a )所示)进行腐蚀运算并得到运算结果(如图( c)所示)的过程。图( a )中白色的部分代表背景,灰色的部分代表目标图像X。图( b)中黑色的方格代表结构元素的中心点,灰色的方格代表邻域。图( c )中黑色的部分表示腐蚀后的结果,灰色的部分表示目标图像被腐蚀掉的部分。在腐蚀处理过程中,将结构元素在图像中移动,如果结构元素完全包含在目标图像X 中,则保留目标图像中对应于中心点的像素点,否则删除像素点。通过这个例子我们可以看出,腐蚀实际上是把图像的外围去掉,同时保留图像内部的部分1。3.2 图像的膨胀膨胀是数学形态学中除腐蚀之外的另一种基本运算。膨胀在数学形态学中的作用与腐蚀的作用正好相反,它是对二值化物体边界点进行扩充,将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。如果两个物体之间的距离比较近,则膨胀运算可能会把两个物体连通到一起,膨胀对填补图像分割后物体中的空洞很有用。膨胀的数学表达式见式(3.2)。S = XB = x , y | B x y X (3.2)在公式中S 表示膨胀后的二值图像集合, B表示用来进行膨胀的结构元素, 结构元素内的每一个元素取值为0或1,它可以组成任何一种形状的图形,在图形中有一个中心点;X表示原图像经过二值化后的像素集合。此公式的含义是用B来膨胀X得到的集合S,S是由B映像的位移与X 至少有一个像素相同时B的中心点位置的集合。通常是拖动结构元素在X 图像域移动,横向移动间隔取一个像素,纵向移动间隔取一个扫描行。在每一个位置上,当结构元素B的中心点平移到X 图像上的某一点(x,y ),如果结构元素的像素与目标物体至少有一个像素相交,那么就保留(x ,y) 像素点,从而达到使物体边界向外扩张的效果。 X B XB图3.4 XB示意图如图3.4所示左边是被处理的二值图像,针对的是黑点,中间是结构元素B。膨胀的方法是,拿B的中心点和X上的点及X周围的点一个一个地对,如果B上有一个点落在X的范围内,则该点就为黑;右边是膨胀后的结果。可以看出,它包括X 的所有范围,就像X膨胀了一圈似的。(a)原图 (b)结构元素图 (c)膨胀示意图图3.5 膨胀示意图如图3.5所示用结构元素B(如图(b)所示)对目标图像X(如图(a)所示)进行膨胀运算并得到运算结果(如图(c)所示)的过程。图(a)中白色的部分代表背景,灰色的部分代表目标图像X。图(b)中黑色的方格代表结构元素的中心点,灰色的方格代表邻域。图(c)中灰色的部分表示原目标图像,黑色的部分表示膨胀出来的结果。在膨胀处理过程中,将结构元素在图像中移动,如果结构元素的邻域与目标图像X 有部分重合,则保留图像中对应于中心点的像素点。23.3 开运算在上两节中介绍的腐蚀和膨胀,看上去好像是一对互逆的操作,实际上,这两种操作不具有互逆的关系。开运算和闭运算正是依据腐蚀和膨胀的不可逆性演变而来的。先腐蚀后膨胀的过程就称为开运算。原图经过开运算后, 能够去除孤立的小点、毛刺和小桥( 即连通两块区域的小点),消除小物体、平滑较大物体的边界,同时并不明显改变其面积。开运算的数学表达式见式(3.3)。S = XB = ( XB) B (3.3)在公式中S 表示进行开运算后的二值图像集合,B 表示用来进行开运算的结构元素,结构元素内的每一个元素取值为0 或1,它可以组成任何一种形状的图形,在图形中有一个中心点; X 表示原图像经过二值化后的像素集合。此公式的含义是用B 来开启X 得到集合S,S 是所有在集合结构上不小于结构元素B 的部分的集合,也就是选出了X 中的某些与B相匹配的点,而这些点则可以通过完全包含在X 中的结构元素B 的平移来得到。X B XB (XB)B图3.6 (XB)B如图3.6所示左边是被处理的二值图像,针对的是黑点,中间是结构元素B,那个标有1 的点是中心点,即当前处理元素的位置,我们在介绍模板操作时也有过类似的概念。拿B 的中心点和X 上的点一个一个地对比。对于腐蚀运算:如果B 上的所有点都在X 的范围内,则该点保留,否则将该点去掉。对于膨胀运算:如果B 上有一个点落在X 的范围内,则该点就为黑。可以看到,当使用圆盘结构元素时,开运算对边界进行了平滑,去掉凸角。在凸角点周围,图像的集合结构无法容纳给定圆盘,从而使凸角点被开运算删除。而当使用线段结构元素沿线段宽度方向较大的部分才能够保存下来。而较小的凸部分将被删除。因此,经过开运算后,能够去除孤立的小点,毛刺和小桥,平滑较大物体的边界,同时并不明显改变其面积。3.4 闭运算闭运算是通过对腐蚀和膨胀的另一种不同次序的执行而得到的,闭运算是先膨胀后腐蚀的过程,其功能是用来填充物体内细小空洞、连接邻近物体、平滑其边界,同时不明显改变其面积。开运算的数学表达式见式 (3.4 )。S = XB = (X B) B (3.4)在公式中S 表示进行闭运算后的二值图像集合, B 表示用来进行闭运算的结构元素,结构元素内的每一个元素取值为0 或1,它可以组成任何一种形状的图形,在图形中有一个中心点; X 表示原图像经过二值化后的像素集合。此公式的含义是用B 来闭合X 得到的集合S,就是图像X 与经过映射和平移的结构元素B 的交集不为空的点的集合。 X B XB (XB)B图3.7 (XB)B如图3.7所示左边是被处理的二值图像,针对的是黑点,右边是结构元素B,可以看到原图经过闭运算后,断裂的地方被弥合了。沈阳理工大学学士学位论文4 图像腐蚀与膨胀处理4.1 CDIB类库的建立4.1.1 CDIB类库的功能大多数图像处理都是基于与设备无关位图(DIB)来进行讨论的,而MFC中没有处理DIB位图的类,这就给编程带来了许多困难。所以需要定义一个处理DIB位图的专用类CDIB类,在其中封装必要而有效的DIB数据成员和处理函数。该类具有的功能如下:Void Load file(CString m_ file Name);/装载BMP位图文件BOOL Save File(const char * psz File name);/存储BMP位图文件Char * Get File Name();/返回位图文件名DWORD Get Size();/返回位图文件的大小UINT Get Width();/返回位图的宽度UINT Get Height();/返回位图的高度UINT Number Of Colors();/返回位图颜色数目RGBQUAD * Get RGB();/返回颜色表首地址BITMAPINFO * Get Info;/返回图像信息结构首地址BYIE * Get Data();/返回图像数据首地址4.1.2 CDIB类的构造创建CDIB类,其接口文件和实现文件分别为DIB.H和DIB.CPP。文件DIB.H包含了CDIB类的类声明有关的所有信息。CDIB类的声明如下:#ifndef_CDIB_H#ifine_CDIB_HClass CDib : public CObjectpublic:RGBQUAD * m_pRGB;BYTE * m_pData;UINT m_numberOfColors;BOOL m_valid;BITMAPFILEHEADER bitmapFileHeader;BITMAPINFOHEADER * m_pBitmapInfoHeader;BITMAPINFO * m_pBitmapInfo;BYTE * pDib;DWORD size;int byBitcount;DWORD dwWidthBytes;public:CDib ();CDib ();Char m_fileName 256;Char * GetFileName ();BOOL ISValid ();DWORD GetSize (); UINT GetWidth (); UINT GetHeight (); UINT NumberOfColors (); RGBQUAD * GetRGB (); BYTE * GetData ();BITMAPINFO * GetInfo ();DWORD GetDibWidthBytes ();WORD PaletteSize (LPBYTE lpDIB);WORD DIBNumColors(LPBYTE lpDIB);void SaveFile(const CString filename);public:void LoadFile(const char * dibFileName);#endif文件DIB.CPP包含了CDib类中的各函数的实现。对于6位位图,在显示方面调用了调色板技术,而真彩色24位位图不需要调用调色板。设备无关位图读取及显示的方法流程图如图4.1和4.2所示。得到文件的完整路径名打开位图文件开始读取BITMAPEILEHEADER结构文件是BMP格式吗?得到位图大小,并分配相应的内存空间读取BITMAPINFOHEADER结构计算像素数据的起始位置,保存像素数据起始位置指针结束NY图4.1 图像读取流程图开始从DOC对象中得到位图数据起始位置指针,并得到图像的宽、高等信息是否带有颜色索引表使用文件中颜色表数据创建调色板把新创建的调色板作为设备环境的调色板,并保留原调色板设定显示参数,显示位图恢复原调色板结束设定显示参数,显示位图NY图4.2 图像显示流程图4.2 图像腐蚀与膨胀处理的实现4.2.1 水平腐蚀处理实现1、 实现步骤(1)获得原图像的首地址及图像的宽和高,二值化为1(背景为白),物体为黑;(2)开辟一块内存缓冲区,并初始化为255;(3)使用1*5结构元素 0,0,0,0,0,为防越界,不处理最左边两列最右边两列的像素,从第2行第3列开始,将像素点赋0,检查这个像素点的前两点和后两点中是否有背景点,有将检测的像素点灰度值赋为255,否则保持不变;(4)循环步骤(3),直到处理完原图的全部像素点;(5)将结果暂存在内存缓冲区中;(6)将结果从内存复制到原图的数据区。2、 程序代码if (m_pBitmapInfoHeader-biBitCount9)/灰度图像 / 暂时分配内存,以保存新图像temp = new BYTEwide*height;/ 初始化新分配的内存,设定初始值为255lpDst = (LPBYTE)temp;memset(lpDst, (BYTE)255, wide * height);/ 使用水平方向的结构元素进行腐蚀for (j = 0; j height; j+)for (i = 2; i wide - 2; i +)/ 由于使用15的结构元素,为防止越界,所以不处理最左边两列和最右边两列的像素lpSrc = (unsigned char *)(p_data + wide *j + i);/ 指向目标图像倒数第j行,第i个象素的指针lpDst = (unsigned char *)(temp + wide * j + i);/ 目标图像中的当前点先赋成黑色*lpDst = 0;/ 如果源图像中(-2,0)、(-1,0)、(0,0)、(1,0)、(2,0)五个点之一有白点,则将目标图像中的(0,0)点赋成白色for (n = 0; n 128)*lpDst = 255;break;else /24位真彩色LONG DibWidth; /原图长、宽 DibWidth=this-GetDibWidthBytes(); /取得原图的每行字节数BYTE *p_temp=new BYTEheight*DibWidth;/ 使用水平方向的结构元素进行腐蚀for (j = 0; j height; j+)for (i = 5; i DibWidth - 5; i +=5)/ 由于使用15的结构元素,为防止越界,所以不处理最左边和最右边的两列像素lpSrc = (unsigned char *)(p_data + DibWidth *j + i);/ 指向目标图像倒数第j行,第i个象素的指针lpDst = (unsigned char *)(p_temp + DibWidth * j + i);/ 目标图像中的当前点先赋成黑色*lpDst = 0; *(lpDst+1)=0;*(lpDst+2)=0; *(lpDst+3)=0;*(lpDst+4)=0; / 如果源图像中(-2,0)、(-1,0)、(0,0)、(1,0)、(2,0)五个点之一有白点,/ 则将目标图像中的(0,0)点赋成白色for(int m=0;m5;m+)for (n = 0; n 128)*lpDst = 255;break; else *lpDst =*lpSrc; lpSrc+;lpDst+;4.2.2 垂直腐蚀处理实现1、 实现步骤(1)获得原图像的首地址及图像的宽和高,二值化为1(背景为白),物体为黑;(2)开辟一块内存缓冲区,并初始化为255;(3)使用5*1的结构元素结构,为防越界,不处理最左边两列和最右边两列的像素,从第3行第2列开始,将像素点赋为0,检查这个像素点的前一点和后一点中是否有背景点,有则将检测的像素点的灰度值赋为255,否则保持不变;(4)循环步骤(3),直到处理完原图的全部像素点;(5)将结果暂存在内存缓冲区中;(6)将结果从内存复制到原图的数据区。2、 程序代码if (m_pBitmapInfoHeader-biBitCount9)/灰度图像 temp = new BYTEwide*height;/ 暂时分配内存,以保存新图像lpDst = (LPBYTE)temp;memset(lpDst, (BYTE)255, wide * height);/ 初始化新分配的内存,设定初始值为255/使用垂直方向的结构元素进行腐蚀for(j = 2; j height - 2; j+)for(i = 0; i wide; i +)/由于使用51的结构元素,为防止越界,所以不处理最上边两列和最下边两列的像素/ 指向源图像倒数第j行,第i个象素的指针lpSrc = (unsigned char *)(p_data + wide * j + i);lpDst = (unsigned char *)(temp + wide * j + i); / 指向目标图像倒数第j行,第i个象素的指针*lpDst = 0;/目标图像中的当前点先赋成黑色/ 如果源图像中(0,-2)、(0,-1)、(0,0)、(0,1)、(0,2)五个点之一有白点,则将目标图像中的(0,0)点赋成白色for (n = 0; n

温馨提示

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

评论

0/150

提交评论