毕业设计(论文)数字图像边缘检测算法的研究与实现.doc

上传人:文库蛋蛋多 文档编号:3982597 上传时间:2023-03-30 格式:DOC 页数:35 大小:386KB
返回 下载 相关 举报
毕业设计(论文)数字图像边缘检测算法的研究与实现.doc_第1页
第1页 / 共35页
毕业设计(论文)数字图像边缘检测算法的研究与实现.doc_第2页
第2页 / 共35页
毕业设计(论文)数字图像边缘检测算法的研究与实现.doc_第3页
第3页 / 共35页
毕业设计(论文)数字图像边缘检测算法的研究与实现.doc_第4页
第4页 / 共35页
毕业设计(论文)数字图像边缘检测算法的研究与实现.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《毕业设计(论文)数字图像边缘检测算法的研究与实现.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)数字图像边缘检测算法的研究与实现.doc(35页珍藏版)》请在三一办公上搜索。

1、摘 要边缘检测的概念,是使用数学方法提取图像像元中具有亮度值(灰度)空间方向梯度大的边、线特征的过程。许多工作属于在一个图像中发现有意义的强度变化的能力的算法的设计已完成。这项工作的许多动机来自需要产生保持图像重要的结构信息的相对紧密的描述。这些信息对创造分割和使边缘检测对应用的一种大的品种关键的对象识别算法是很有用处的。这项目是描述边缘检测的过程和试图实时并且总结其至关重要的角色的图像处理。边缘检测是一种基本的和重要的话题在计算机视觉和图像处理。在这篇文章中我们讨论了几种数字图像处理技术应用于边缘特征提取。首先,利用小波变换用于图像来去除噪声的采集。第二,一些边缘检测算子微分边缘检测等,原木

2、边缘检测,精明的边缘检测和二进制形态进行了分析。然后根据仿真结果,分析了各类高速船优缺点。这些边缘检测算子进行了比较。结果表明,二元形态学算子能取得更好的边缘特征。最后,为了获得清晰的、完整的图像轮廓的方法,并给出了边境关闭。实验过程中,边缘检测后,用本文方法是可行的关键词:Terms-Edge检测、数字图像处理、小波分析操作员AbstractThe concept of edge detection is of great consequence to a variety of topics considered in image processing. Much work has been

3、 done pertaining to the design of algorithms capable of detecting significant intensity changes present in an image. The motivation for much of this work comes from the need to generate compact descriptions which retain the images important structural information. This information is imperative to t

4、he creation of segmentation and object recognition algorithms making edge detection key to a large variety of applications. This project is an attempt to describe the process of edge detection and to summarize its crucial role in image processing.Edge detection is a basic and important subject in co

5、mputer vision and image processing. In this paper we discuss several digital image processing techniques applied in edge feature extraction. Firstly, wavelet transform is used to remove noises from the image collected. Secondly, some edge detection operators such as Differential edge detection, Log

6、edge detection, Canny edge detection and Binary morphology are analyzed. And then according to the simulation results, the advantages and disadvantages of these edge detection operators are compared. It is shown that the Binary morphology operator can obtain better edge feature. Finally, in order to

7、 gain clear and integral image profile, the method of bordering closed is given. After experimentation, edge detection method proposed in this paper is feasible.Index:Terms-Edge detection, digital image processing, operator, wavelet analvsis前 言边缘是一套那些有灰色像素的阶跃变化和顶层变化,二者之间的对象和背景、对象和对象、区域、地区之间和克莱门特和宽厚。

8、indwells边总是在两个相邻地区都有不同的灰色的水平。这是由于灰色的水平是不连续的。边缘检测是一种基于范围不连续性的图像分割新方法,。图像的边缘检测是一种基本的内容,包括图象处理与分析,也是一种问题,即完全无法解决为止。当图像是后天获得的,这个因素产生了如投影、混合、变异和噪声。这些因素带来图像特征的模糊和变形,因而很难提取图像特征。另外,由于这样的因素同样也很难去检测边缘。该方法是已被研究的图像边缘和轮廓特征的检测与提取的热点领域出现的图像处理和分析技术。边缘特征提取已应用于许多领域,有着广泛的应用前景。本文主要讨论了关于优势和劣势的几个边缘检测算子,并据此在Visual C+中编程实现

9、。目 录目 录IV第1章 数字图像处理概述11.1 数字图像处理系统概述11.2 数字图像处理系统2第2章 开发工具Visual C+6.0简介42.1 Visual C+开发工具的概述42.2 VC作为面向对象设计的原因及其优点42.3 框架和文档视结构5第3章 CDIB类的构造93.1 CDIB类构造的概述93.2 几种重要的操作函数12第4章 图像边缘检测比较154.1 图像边缘检测的基本步骤154.2 图像边缘检测基本算子与实现154.3 边缘检测算法应用与性能比较24第5章 系统测试275.1 系统测试的概述275.2测试的实施27结 论29参考文献30致 谢31第1章 绪论1.1

10、数字图像处理系统概述“图”是物体透射光或反射光的分布,“像”是人的视觉系统对图的接收在大脑中形成的印象或认识。图像是两者的结合。图像处理就是对图像信息进行加工处理,以满足人的视觉心理和实际应用的需要。简单的说,依靠计算机对图像进行各种目的的处理我们就称之为数字图像处理,其英文名称是“Digital Image Processing”。早期的数字图像处理的目的是以人为对象,为了满足人的视觉效果而改善图像的质量,处理过程中输入的是质量差的图像,输出的是质量好的图像,常用的图像处理方法有图像增强、复原等1。随着计算机技术的发展,有一类图像处理是以机器为对象,处理的目的是使机器能够自动识别目标,这称之

11、为图像的识别,因为这其中要牵涉到一些复杂的模式识别的理论。总的来说,数字图像处理包括以下几项内容。1点运算点运算主要是针对图像的像素进行加,减,乘,除等运算。图像的点运算可以有效的改变图像的直方图分布,这针对提高图像的分辨率以及图像均衡都是非常有益的。2几何处理几何处理主要包括图像的坐标转换,图像的移动,缩小,放大,旋转,多个图像的配准以及图像扭曲校正等。几何处理是最常见的图像处理手段,几乎是任何图像处理软件都提供了最基本的图像缩放功能。3图像增强和复原图像增强和复原的目的是为了提高图像的质量,去除噪声、提高图像的清晰度等。图像增强主要是突出图像中感兴趣的目标部分,如强化图像高频分量,课使图像

12、中的物体轮廓清晰,细节明显;而强化图像低频分量,可减少图像中噪声的影响等。图像复原则要求对图像降质的成因有一定的了解,根据降质过程建立降质模型,然后采用某种滤波方法,恢复或重建原来的图像。4图像时域频域变换图像变换就是通过时域和频域的变换找到其中的特征,再加以变换的过程。傅立叶变换是最基础的图像变换。在傅立叶变换基础上又有离散余弦变换、沃尔什哈达玛变换和小波变换等。5图像形态学处理图像形态学是数学形态学的延伸,是一门独立的研究科学。利用图像学处理技术,可以实现图像的腐蚀,细化,和分割等效果。一般图像分割有两种情况,一是图像边缘检测,二是区域分割。边缘检测是最常用的方法,主要是通过边缘检测算子、

13、模板和曲面拟合来达到图像分割的目的。6图像的编码图像编码研究是属于信息论中信源编码的范畴,其主要的宗旨是利用图像信号的统计特性及人类视觉特性对图像进行高效编码,从而达到压缩的目的,图像编码是数字图像处理中一个经典的研究范畴,有60多年的历史,目前,已经制定了多种编码标准,如H.261,JEPG,MEPG等。7图像分析和理解图像分析和理解是图像处理技术的发展和深入,也是人工智能和模式识别的一个分支。在图像分析和理解中主要有图像的描述和图像的分类识别。图像分类识别属于模式识别(当今的模式识别方法有3种:统计识别法,句法结构,模式识别法,和模糊识别法)的范畴,其主要内容是图像经过某些预处理(增强、复

14、原、压缩)后,进行图像分割和特征提取,从而进行分类判别2。1.2 数字图像处理系统1.2.1 数字图像处理系统硬件早期的数字图像处理系统为了提高处理速度、增加容量都采用大型机。随着计算机性价比(性能价格比)日新月异的提高,以小型机为主的微型图像处理系统得到发展。主机为PC机,配置以图像采集卡及显示设备就构成了最基本的微型图像处理系统。目前,国产的CA540、VP32、FGCT11010N8、CA-CPE-3000等图像板研制成功并已商品化。微型图像处理系统成本低、应用灵活。便于推广。特别是微型计算机的性能逐年提高,使得微型图像处理系统的性能也不断升级,加之软件配置丰富,使其更具实用意义3。1显

15、示卡 显示卡是记忆和保存图像的地方,通常,存储的凸现要随时显示在显示器上。PC机多采用800600或1024768个像素点。通常在图像处理装置中,灰度值红(R)、绿(G)、蓝(B)各占8位(bit),共计24位,可以表示1670万种颜色,这种显示卡称为真彩色显示卡。2计算机 图像处理的主要特点是数据量大、运算时间长,因而对系统硬件配置要求较高。目前,在PC机上配置奔腾P4 2.4G以上CPU、512MB内存。80G以上硬盘的计算机已属常见,计算速度大幅度提高,可与几年前的大型机媲美。为了加快图像的显示和处理速度,用于图像处理的PC机配置应尽可能高一些。3图像存贮装置 图像数据量庞大,早期其存储

16、成为问题。到目前为止,除了大容量磁盘可供存储图像数据之外,MO、CD、DVD等光学存储装置以及SAN、NAS等网络存储系统,为存储海量图像数据提供了极好的支持。1.2.2 数字图像处理软件系统微型图像处理系统既包含硬件设备,也需要一定的软件环境支持。目前,图像处理系统平台多为Microsoft Windows或X-Windows,开发的主流工具Microsoft公司的VC+。这是因为VC+是一种具有高度综合性能的软件开发工具,用它开发出来的程序有着运行速度快、可移植能力强等优点。本文中的复原方法就是在Windows平台下,用VC+ 6.0实现的。第2章 开发工具简介2.1 Visual C+开

17、发工具的概述VC+是Microsoft公司推出的开发Win32应用程序(Windows 95/98/2000/XP/NT)的面向对象的可视化集成工具。随着VC+所提供的Microsoft基础类库(Microsoft Foundation Class Library,简写为MFC),对Windows95/NT所用的Win 32应用程序接口(Win 32 Application Programming Interface-API)进行了彻底的封装,从而可以使用完全的面向对象的方法来进行Win 32应用程序的开发,这样大大缩短了应用程序开发周期,降低了开发成本,也将程序员从大量的复杂劳动中解放出来4

18、。VC+ Developer Studio 包含有编写程序代码的文本编辑器、设计用户界面(菜单、对话框、图标等)的资源编辑器,建立项目配置的项目管理器、检查程序错误的集成调试器等工具,同时它还提供了功能强大的应用程序向导工具AppWizard和类向导工具ClassWizard。AppWizard用于生成各种不同类型的具有Windows界面风格的应用程序的基本框架,在生成应用程序框架后,使用ClassWizard 便可轻松完成创建新类、定义消息处理函数、重载虚拟函数等操作。VC+的资源编辑器能以所见所得的形式直接编辑应用程序用户界面,为所有资源分配ID标识号。ClassWizard能把对话框模板

19、与自动生成的类定义或与已有的类代码连接起来,为菜单项、控件等资源生成空的处理函数模板,创建自消息映射的编程工作便简化为用资源编辑器直观的设计界面,完善对话框类代码。在空的处理模板出填写响应用户操作的代码,是一种完善的可视化编程方法。2.2 VC+优点1VC提供面向对象的完整语法与语义面向对象程序具有抽象性、封装性、继承性与多态性等特点,这些特点都体现在类的定义中。2VC还是一种结构化的程序设计语言面向对象是从面向过程发展而来的,它没有抛弃面向过程,而是对其扬长避短。因此,利用VC开发应用程序,既可以采用面向过程的方法,也可以采用面向对象的方法。3VC中的MFC是理解面向对象语法与语义的最好平台

20、MFC是Microsoft的基本类库,里面包含大量的与计算机系统有关的类。通过这些类的使用,可以帮助用户理解面向对象程序设计的特点。Visual C+ 不仅仅是一个编译器。它是一个全面的应用程序开发环境,使用它你充分利用具有面向对象特性的C+来开发出专业级的 Windows 应用程序。Visual C+作为一种程序设计语言,它同时也是一个集成开发工具,提供了软件代码自动生成和可视化的资源编辑功能。在使用Visual C+开发应用程序的过程中,系统为我们生成了大量的各种类型的文件5。Visual C+采用的框架是MFC。MFC不仅仅是人们通常理解的一个类库。你如果选择了MFC,也就选择了一种程序

21、结构,一种编程风格。MFC是一个很大的、扩展了的C+类层次结构,它能使开发Windows应用程序变得更加容易。MFC是在整个Windows家族中都是兼容的,也就是说,无论Windows3.x、Windows95还是Windows NT,所使用的MFC是兼容的。每当新的Windows版本出现时,MFC 也会得到修改以便使旧的编译器和代码能在新的系统中工作。MFC也回得到扩展,添加新的特性、变得更加容易建立应用程序。使用MFC的最大优点是它为你做了所有最难做的事。MFC中包含了上成千上万行正确、优化和功能强大的Windows代码。你所调用的很多成员函数完成了你自己可能很难完成的工作。从这点上讲MF

22、C极大地加快了你的程序开发速度。由于MFC编程方法充分利用了面向对象技术的优点,它使得我们编程时极少需要关心对象方法的实现细节,同时类库中的各种对象的强大功能足以完成我们程序中的绝大部分所需功能,这使得应用程序中程序员所需要编写的代码大为减少,有力地保证了程序的良好的可调试性。最后要指出的是MFC类库在提供的对象的各种属性和方法都是经过谨慎的编写和严格的测试,可靠性很高,这就保证了使用MFC类库不会影响程序的可靠性和正确性。2.3 框架和文档视结构基于MFC的应用程序框架(Application Framework)是定义可程序结构的MFC类库中类的集合,它是VC+ 编辑的骨架。运用MFC应用

23、程序框架具有以下优点:1标准化的程序结构和用户接口:这对具有标准用户界面的Win 32程序来说。可以极大的减轻程序员的负担,使程序员不必过多的考虑界面,而把主要精力放在程序设计上,以提高程序设计的效率。2 框架产生的程序代码短,运行速度快,具有很大的灵活性。3MFC封装了Win 32 SDK中的几乎所有的函数,能够实现Win 32系统的任务功能。MFC框架的核心是文档视结构(Document-View Architecture)。简单的说,文档视结构就是将数据和对数据的观察相分离,文档仅处理数据的读、写等操作,视则是显示和处理数据的窗口,视可以操作文档中的数据。MFC框架的基本结构包括应用程序

24、对象、主框架窗口、文档、视等,框架通过命令消息将它们结合在一起,共同对用户的操作做出响应。应用程序的对象类由CWinApp派生,一个应用程序有且仅有一个应用程序对象,它负责应用程序实例的初始化和进程结束时的资源清除,以及创建和管理应用程序所支持的所有文档模板的工作。主框架窗口是应用程序的主窗口。MFC框架定义了两种基本的主框架窗口类,即单文档接口SDI(Single Document Interface)主框架窗口类和多文档接口MDI(Multiple Document Interface)主框架窗口类。对于SDI,视是主窗口的子窗口;对于MDI必须从CMDIChildWnd派生出主框架窗口的

25、子窗口,视是该子窗口的子窗口。文档类由Document类派生,文档是一个应用程序数据元素的集合,它构成应用程序所使用的数据单元,另外,它还提供了管理和维护数据的手段。文档是一种数据源,数据源由很多种,最常见的是磁盘文件,但它不一定是一个磁盘文件,文档的数据源也可以来自串行口,网络或摄像机输入信号等,视类从CView或其子类(CEditView、CFormView、CRecordView、CScrollView等)派生,是数据的用户窗口,为用户提供了文档可视的数据显示,它将文档的部分或者全部内容显示在窗口中。视还给用户提供了一个与文档中的数据进行交互的界面,它把用户的输入转化为对文档中数据的操作

26、。每个文档都会由一个或多个视显示,一个视既可以输出到屏幕窗口中,也可以输出到打印机上。图2.1表示了MFC框架结构中各对象之间的关系。应用程序管理一个(SDI)或多个(MDI)文档模板,每个文档模板管理一个或者多个文档。用户通过主框架窗口中的视观察和处理拉数据。文档视结构大大简化了多数应用程序的设计开发过程。它带来的好处主要有:1将数据操作和数据显示、用户界面分离。这是一种“分而治之”的思想,这种思想使得模块划分更加合理、模块独立性更强,同时也简化了数据操作和数据显示、用户界面设计工作。文档只负责数据管理,不涉及用户界面;视只负责数据输出与用户界面的交互,可以不靠率应用程序的数据是如何组织的。

27、甚至当文档中的数据结构发生变化时也不必改动视的代码。应用程序对象主框架窗口文档模板菜单栏视文档状态栏(a) SDI框架结构应用程序对象文档模板1文档模板2文档1文档2菜单栏子框架窗口1视1子框架窗口2视2子框架窗口3视3状态栏主框架窗口(b)MDI框架结构图2.1 MFC应用程序框架结构2MFC在文档视结构中提供了许多标准操作界面,包括新建文件、打开文件、保存文件、打印等,减轻了用户的工作量。用户不必再编写这些重复的代码,从而可以把更多的精力放到编写应用程序特定功能的代码上(主要是从数据源中读取数据和显示)。3 支持打印的打印预览,用户无需编写代码或只需要编写很少的代码,就可以为应用程序提供打

28、印和打印预览功能。由于文档视结构功能强大,因此一般用VC+进行程序设计时都首先使用AppWizard生成基于文档视结构的单文档或多文档应用程序框架,然后在其中添加自己需要的代码,完成应用程序的特定功能。第3章 CDIB类的构造3.1 CDIB类构造的概述3.1.1 BMP图像格式的基本内容在本次毕业设计中,采用的是一种标准的图像格式BMP。BMP格式是Windows窗口系统交换图形、图像数据的一种标准。图像文件由文件头和图像数据两部分组成。文件头的内容由制作该图像文件的公司决定。一般包括文件类型、文件制作者、文件制作时间、版本号、文件大小等内容。各个文件的制作还牵涉到图像文件的压缩方式,涉及到

29、压缩效率。BMP格式的图像文件又可以分为许多种类,如真彩色位图、256色位图,采用RLE(游程编码)压缩格式的BMP位图等等。在实际的工程应用和图像算法效果验证中经常要处理的是256级并且是没有压缩的BMP灰度图像,例如通过黑白采集卡采集得到的图像就是这种格式。这种文件格式就是每一个像素用8bit表示,显示出来的图像是黑白效果,最黑的像素的灰度(也叫作亮度)值为“0”,最白的像素的灰度值为“255”,整个图像各个像素的灰度值随机的分布在“0”到“255”的区间中,越黑的像素,其灰度值越接近于“0”,越白(即越亮)的像素,其灰度值越接近于“255”;与此对应的是在该文件类型中的颜色表项的各个RG

30、B分量值是相等的,并且颜色表项的数目是256个。真彩色图像要复杂一些,表示图像时,常用的图像彩色模式有RGB模式、CMYK模式和HIS模式,一般情况下我们只使用RGB模式,R对应红色,G对应绿色,B对应蓝色,它们统称为三基色,这三中色彩的不同搭配,就可以搭配成各种现实中的色彩,此时彩色图像的每一个像素都需要3个样本组成的一组数据表示,其中每个样本用于表示该像素的一个基本颜色。BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。如表3-1所示:表3-1 BMP文件的组成位图文件头 BITMAPFILEHEADER位图信息头 BITMAPINFOHEADER调色板 Palette实际位图

31、数据 ImageData文件头主要包含文件的大小、文件类型、图像数据偏离文件头的长度等信息;位图信息头包含图象的尺寸信息、图像用几个比特数值来表示一个像素、图像是否压缩、图像所用的颜色数等信息。颜色信息包含图像所用到的颜色表,显示图像时需用到这个颜色表来生成调色板,但如果图像为真彩色,即图像的每个像素用24个比特来表示,文件中就没有这一块信息,也就不需要操作调色板。文件中的数据块表示图像的相应的像素值,需要注意的是:图像的像素值在文件中的存放顺序为从左到右,从下到上,也就是说,在BMP文件中首先存放的是图像的最后一行像素,最后才存储图像的第一行像素,但对与同一行的像素,则是按照先左边后右边的的

32、顺序存储的;另外一个需要关注的细节是:文件存储图像的每一行像素值时,如果存储该行像素值所占的字节数为4的倍数,则正常存储,否则,需要在后端补0,凑足4的倍数。一般256色位图BMP文件头(除数据外)总共有1078个字节。下面详细说明上述三个结构在Windows.h中都有定义6。1 位图文件头(BITMAPFILEHEADER):VC+对位图文件头的定义:Typedef struct tagBITMAPFILEHEADERWORD bfType;/ 指定文件类型,必须是0X424D,即字符串“BM” WORD bfSize;/ 指定文件大小 WORD bfReserved1;/ 保留字,不予考虑

33、 WORD bfREserved2;/ 保留字,不予考虑 DWORD bfOffBits;/ 从文件头到实际的位图数据的偏移字节数BITMAPFILEHEADER, FAR*LP BITMAPFILEHEADER,*PBITMAPFILEHEADER;2位图信息头(BITMAPFILEHEADER):VC+对位图文件头的定义:Typedef struct tagBITMAPINFOHEADERDWORD biSize;/ 指定结构长度LONG biWidth;/ 图像宽度LONG biHeight;/ 图像高度WORD biplanes;/ 必须是WORD bitCount; /指定表示颜色时

34、要用到的位数。常用值有1(黑白/二色图)、 4(16色图)、8(256色图)、24(真彩色图)。DWORD biCompression;/ 指出位图是否压缩DWORD biSizeImage;/ 实际位图数据所占用的字节数LONG biXPelsPerMeter;/ 水平分辨率LONG biYPelsPerMeter;/ 垂直分辨率DWORD biClrUsed;/ 指定本图像实际用到的颜色数,若该值为0则为2的bitCount次方DWORD biClrImportant;/ 指定本图像最重要的颜色数,若该值为0,则认为所有颜色都是重要的。BITMAPINFOHEADER;3调色板(Palet

35、te)VC+对调色板的定义:Typdef struct tagRGBQUADBYTE rgbBlue;BYTE rgbGreen;BYTE rgbRed;BYTE rgbReserved;RGBQUAD;其中rgbReServed为保留值。3.1.2 CDIB类前面只是为图像文件提供基本的知识和工具,还没具体涉及到图像操作的具体内容,这里先构造一个图像操作的类,即CDIB类,它是进行图像处理的“工具箱”。根据图像处理的需要,表3-2列出了CDIB类的一些主要成员函数。表3-2 CDIB类的部分成员函数函数或结构名功能描述PaintDIB()绘制DIB对象SaveDIB()将DIB保存到指定文件

36、中ReadDIBFile()从指定文件中读取DIB对象DIBBitCount()该函数返回DIB图像的位深度FindDIBBits()返回DIB图像象素起始位置DIBWidth()返回DIB宽度DIBHeight()返回DIB高度SetPalette()设置调色板3.2 几种重要的操作函数1返回DIB对象像素的起始位置(FindDIBBits())该函数原型声明如下:LPBYTE FindDIBBits(LPBYTE lpbi);该函数只有一个入口参数lpbi,为一个指向DIB对象的指针,通过计算而返回一个指向DIB图像像素起始位置的指针。计算过程也非常简单,只涉及到指针的移动:Return

37、(lpbi+*(LPDWORD) lpbi+PaletteSize(lpbi)2负责获取DIB位图的宽度(DIBWidth())该函数的原型为:DWORD DIBWidth(LPYTE lpDIB)入口参数lpbi给出了一个指向DIB对象的指针,在计算完成后返回双字长度的DIB位图宽度。对于不同格式的DIB,其图像宽度的计算方式也有所不同,具体为针对Windows 3.0格式DIB和针对其他格式DIB的两种不同的计算方式。具体计算过程如下:/返回DIB图像的宽度if(IS_WIN 30_DIB(lpDIB)/对于Windows 3.0 DIB,返回lpbmi-biWidthreturn lpb

38、mi-biWidth;else/对于其他格式的DIB,返回lpbmc-bcWidthreturn (DWORD) lpbmc-bcWidth;3获取DIB位图的高度(DIBHeight())函数原型为:DWORD DIBHeight(LPBYTE lpDIB);函数入口参数lpDIB为一指向DIB对象的指针,计算完成后返回双字型的DIB位图高度,具体实现思路和DIBWidth()基本类似,也是需要根据不同的DIB格式做不同的计算。具体实现过程如下:/返回DIB图像的高度if(IS_WIN 30_DIB(lpDIB)/对于Windows 3.0 DIB,返回lpbmi-biHeightretur

39、n lpbmi-biHeight;else/对于其他格式的DIB,返回lpbmc-bcHeightreturn (DWORD) lpbmc-bcHeight;4获取DIB位图的位深度(DIBBitCount())函数原型为:WORD DIBBitCount(LPBYTER lpbi);入口参数lpbi为指向DIB对象的指针,函数最终返回DIB位图的位深度。函数实现时根据是否是Windows 3.0格式的DIB,而决定是从BITMAPINFOHEADER结构的数据成员biBitCount中获取,还是从BITMAPCOREHEADER结构的数据成员bcBitCount中获取。具体过程如下:/读取像

40、素的位数if(IS_WIN 30_DIB(lpbi)/读取biBitCount值nBitCount=(LPBITMAPINFOHEADER) lpbi) -biBitCount;else /读取biBitCount值nBitCount=(LPBITMAPCOREHEADER) lpbi) -bcBitCount;5负责DIB对象文件的保存(SaveDIB())BOOL SaveDIB(HDIB hDib,Cfile&file);入口参数hDib和file分别为保存的DIB和保存的文件对象。函数执行成功将返回True,否则返回False或者抛出CfileException异常DIB文件的保存主要

41、分为对文件头的保存和对像素点阵的保存,前者可通过结构BITMAPFILEHEADER和BITMAPINFOHEADER加以描述,将其数据成员填充完毕后写入到文件。在进行文件写入时,需要通过TRY-CATCH语句来捕获其中可能发生的异常。6从制定文件读取DIB对象到内存(ReadDIBFile())函数原型为:HDIB ReadDIBFile(Cfile&file);入口参数file指定了待读取的文件,如果函数执行成功将返回一个DIB的句柄否则返回NULL。函数在执行时,首先从文件中读取DIB文件头,并判断是否是合法的DIB对象,如果文件格式正确则为其分配相应的内存,并完成对图像点阵的读取。关键

42、代码如下:/尝试读取DIB文件头if(file.Read(LPBYTE) &bmfHeader, sizeof(bmfHeader)!=sizeof(bmfHeader)/大小不对,返回NULLreturn NULL;/读像素 if(file,ReadHuge(lpDIB,dwBitsSize-sizeof(BITMAPFILEHEADER)!=dwBitsSize-sizeof(BITMAPFILEHEADER)/大小不对,解除锁定:GlobalUnlock(HGLOBAL) hDIB);/释放内存:GlobalFree(HGLOBAL) hDIB);/返回NULLreturn NULL;

43、当然图像操作还有很多,这里只是举出了几种必备的操作,也是此次毕业设计必需的几种操作。 第4章 数字图像边缘检测算法的研究与实现4.1 图像边缘检测的基本步骤一种定位二维或三维图像(特别是医学图像)中的对象的边缘的系统。通过输入端()接收表示该图像的各元素值的数据元素集。该数据集被存储在存储装置()中。处理器()确定该图像中的对象的边缘。该处理器计算所述数据元素的至少一阶和或二阶导数,并且计算该图像的等照度线曲率,所述曲率由标识。该处理器还确定校正因数,该校正因数对于由对象的曲率和或所述数据的模糊造成的边缘错位进行校正。该校正因数取决于所述等照度线曲率。然后,该处理器确定取决于所计算出的导数和所

44、述等照度线曲率的算子的过零点。该系统的输出端()提供对于该图像中的边缘位置的指示。基本步骤:1. 滤波。边缘检测主要基于导数计算,但受噪声影响。但滤波器在降低噪声的同时也导致边缘强度的损失。 2. 增强。增强算法将领域中灰度有显著变化的点突出显示。一般通过计算梯度幅值完成。 3. 检测。但在有些图像中梯度幅值较大的并不是边缘点。 4. 定位。精确确定边缘的位置。4.2 图像边缘检测基本算子与实现边缘检测的基本算法有很多,有梯度算子、方向算子、拉普拉斯算子和砍尼算子等等。几种常用的边缘检测方法有属于梯度算子的Roberts算子、Sobel算子、Prewitt算子、Gauss-Laplace 算子

45、等。4.2.1Roberts算子Robert s 算子采用对角线方向相邻两像素之差近似梯度幅值检测边缘, 是一种局部差分算子。检测水平和垂直边缘的效果好于斜向边缘, 定位精度高, 但对噪声很敏感。其模板形式为2 2 的卷积核, 可以表示为: 程序实现: void CCh1_1View:OnEdgeRobert() /Robert边缘检测运算/ 获取文档CCh1_1Doc* pDoc = GetDocument();/ 指向DIB的指针LPSTRlpDIB;/ 指向DIB象素指针LPSTR lpDIBBits;/ 锁定DIBlpDIB = (LPSTR) :GlobalLock(HGLOBAL)

46、 pDoc-GetHDIB();/ 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的边缘检测,其它的可以类推)if (:DIBNumColors(lpDIB) != 256)/ 提示用户MessageBox(目前只支持256色位图的运算!, 系统提示 , MB_ICONINFORMATION | MB_OK);/ 解除锁定:GlobalUnlock(HGLOBAL) pDoc-GetHDIB();/ 返回return;/ 更改光标形状BeginWaitCursor();/ 找到DIB图像象素起始位置lpDIBBits = :FindDIBBits(lpDIB);/ 调用RobertDIB()函数对DIB进行边缘检测if (RobertDIB(lpDIBBits, WIDTHBYTES(:DIBWidth(lpDIB) * 8), :DIBHeight(lpDIB)/ 设置脏标记pDoc-SetModi

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号