




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录摘要IIIAbstractIV第一章 绪论- 1 -1.1数字图像基础- 1 -1.1.1数字图像概述- 1 -1.1.2数字图像处理- 1 -1.2边缘检测介绍- 2 -第二章 图像边缘检测- 3 -2.1边缘检测- 3 -2.1.1边缘检测概念- 3 -2.1.2微分算子- 3 -2.2边缘检测基本思想- 4 -2.3边缘检测算法- 5 -2.3.1边缘检测算法步骤- 5 -2.3.2边缘检测算法流程图- 5 -2.4边缘检测算法中算子的分类- 5 -2.5经典边缘检测算子- 6 -2.5.1 Roberts边缘检测算子- 6 -2.5.2 Sobel边缘检测算子- 7 -2.5.3 Prewitt边缘检测算子- 8 -第三章 Visual C+图像编程- 10 -3.1用C+实现图像处理编程的原因- 10 -3.2 VC+的特点- 10 -3.3 VC+的组成- 11 -3.4 VC与matlab的比较- 12 -第四章 边缘检测算子的编程实现- 14 -4.1程序运行界面- 14 -4.2 Roberts算子程序及结果- 14 -4.3 Sobel算子程序及结果- 17 -4.4 Prewitt算子程序及结果- 23 -4.5结果分析与比较- 27 -第五章 边缘检测技术的发展及应用- 29 -5.1新的边缘检测方法- 29 -5.1.1小波变换和小波包的边缘检测方法- 29 -5.1.2基于数学形态学的边缘检测方法- 29 -5.2边缘检测技术的应用- 30 -5.2.1边缘检测在储粮害虫方面的应用- 30 -5.2.2图像边缘检测技术在电厂中的应用- 31 -结语- 33 -参考文献- 34 -致谢- 35 -基于VC的图像边缘检测算法的研究与比较摘要图像的边缘是图像最基本的特征,它是灰度不连续的结果。图像分析和理解的第一步是边缘检测,因此边缘检测在图像处理中有着重要的作用。图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。本文介绍了三种经典的图像边缘检测算子,并且运用强大的VC软件通过一个图像边缘检测的例子比较了它们的检测效果,分析了它们各自的特点,对学习边缘检测和具体工程应用具有很好的参考价值。关键词: 图像处理,边缘检测, 算子,比较研究,VCComparison And Analysis For Image Edge Detection Algorithms Based On VCAbstractEdge is the most basic feature of the image, it is the result of discontinuous gray. The first step in image analysis and understanding is edge detection, so edge detection plays an important role in image processing. Image edge detection significantly reduces the amount of data and removes irrelevant information,retains the important structural properties of images.This article describes three types of classical edge detection operators, and the use the powerful software called VC to do the edge detection through a comparison of examples of the effect of their detection, analysis the characteristics,this is good reference value for their learning edge detection and application of specific projects.Key Words: Image processing ,Edge detection ,Operator ,Comparative Study ,VC第一章 绪论1.1数字图像基础1.1.1数字图像概述人眼能识别的自然景象或图像原也是一种模拟信号,为了使计算机能够记录和处理图像、图形,必须首先使其数字化。数字化后的图像、图形称为数字图像、数字图形,一般也简称为图像、图形。数字图像可以看成一个矩阵,或一个二维数组,这是在计算机上表示的方式。一幅MN个像素的数字图像,其像素灰度值可以用M行、N列的矩阵G表示: (11)在存储数字图像时,一幅M行、N列的数字图像(MN个像素),可以用一个MN的二维数组T表示。图像的各个像素灰度值可按一定顺序存放在数组T中1。1.1.2数字图像处理数字图像处理(Digital Image Processing)是利用计算机的计算功能,实现与光学系统模拟处理相同效果的过程。数字图像处理具有如下特点:(1)处理精度高,再现性好。利用计算机进行图像处理,其实质是对图像数据进行各种运算。由于计算机技术的飞速发展,计算精度和计算的正确性都毋庸置疑;另外,对同一图像用相同的方法处理多次,也可得到完全相同的效果,具有良好的再现性。(2)易于控制处理效果。在图像处理程序中,可以任意设定或变动各种参数,能有效控制处理过程,达到预期处理效果。这一特点在改善图像质量的处理中表现更为突出。(3)处理的多样性。由于图像处理是通过运行程序进行的,因此,设计不同的图像处理程序,可以实现各种不同的处理目的。(4)图像数据量庞大。图像中包含有丰富的信息,可以通过图像处理技术获取图像中包含的游泳的信息,但是,数字图像的数据量具大,一幅数字图像是由图像矩阵中的像素组成的,通常每个像素用红、绿、蓝三种颜色表示,每种颜色用8bit表示灰度级。则一幅10241024不经压缩的真彩色图像,数据量达3MB(即102410248bit3=24Mb)。如此庞大的数据量给存储、传输和处理都带来巨大的困难。如果精度及分辨率再提高,所需处理时间将大幅度增加。(5)处理费时。由于图像数据量大,因此处理比较费时。特别是处理结果与中心像素邻域有关的处理过程花费时间更多。(6)图像处理技术综合性强。数字图像处理涉及的技术领域相当广泛,如通信技术、计算机技术、电子技术、电视技术等,当然,数学、物理学等领域更是数字图像处理的基础。1.2边缘检测介绍图像的边缘对人的视觉具有重要意义,一般而言,当人们看见一个有边缘的物体的时候,首先感觉到的便是边缘。边缘是指周围像素灰度有阶跃变化或屋顶变化的那些像素的集合,灰度或结构等信息的突变处成为边缘。边缘或许对应着图像中物体(的边界)或许并没有对应着图像中物体(的边界),但是边缘具有十分令人满意的性质,它能大大地减少所要处理的信息但是又保留了图像中物体的形状信息,边缘是图像的最基本特征。边缘在边界检测、图像分割、模式识别、机器视觉等中有很重要的作用。边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。这些包括(i)深度上的不连续、表面方向不连续、物质属性变化和场景照明变化。边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。第二章 图像边缘检测2.1边缘检测2.1.1边缘检测概念图像的边缘是图像最基本的特征,它是灰度不连续的结果。通过计算一阶导数或者二阶导数可以方便检测出图像中每个像素在其领域内的灰度变化,从而检测出边缘。图像中具有不同灰度的相邻区域之间总存在边缘。常见的边缘类型有斜坡型、线状型和屋顶型。阶跃型边缘是一种理想的边缘,由于采样等缘故,边缘处总有一些模糊,因而边缘处会有灰度斜坡,形成了斜坡边缘。斜坡边缘的坡度与被模糊的程度成反比,模糊程度高的边缘往往表现为厚边缘。线状型边缘有一个灰度突变,对应图像中的细线条;而屋顶型边缘两侧的灰度坡度相对平缓,对应粗边缘2。2.1.2微分算子图2.1给出了几种典型的边缘及其相应的一阶导数和二阶导数。对于斜坡型边缘,在灰度斜坡的起点和终点,其一阶导数均有一个阶跃,在斜坡处为常数,其它地方为零;其二阶导数在斜坡起点产生一个向上的脉冲,在终点产生一个向下的脉冲,其它地方为零,在两个脉冲之间有一个过零点,可以确定边缘的中心位置。对应线状型边缘,在边缘的起点和终点处,其一阶导数都有一个阶跃,分别对应极大值和极小值;在边缘的起点与终点处,其二阶导数都对应一个向上的脉冲,在边缘中心对应一个向下的脉冲,在边缘中心两侧存在两个过零点。因此,通过检测二阶差分的两个过零点,就可以确定线状型边缘的范围;检测二阶差分的极小值,可以确定边缘中心位置。屋顶型边缘的一阶导数和二阶导数与线状型类似,通过检测其一阶导数的过零点可以确定屋顶的位置。灰度斜面一阶导数二阶导数(a) 斜坡型(b) 线状型(c) 屋顶型图2.1 典型边缘的一阶导数和二阶导数由上述分析可以得出以下结论:一阶导数的幅度值可以用来检测边缘的存在;通过检测二阶导数的过零点可以确定边缘的中心位置;利用二阶导数在过零点附近的符号可以确定边缘像素位于边缘的暗区还是亮区。另外,一阶导数和二阶导数对噪声非常敏感,尤其是二阶导数。因此,在边缘检测之前应考虑图像平滑,减弱噪声的影响。在数字图像处理中,常利用差分近似微分来求取导数。边缘检测可借助微分算子在空间域通过模板卷积来实现。2.2边缘检测基本思想边缘检测的基本思想是首先利用边缘增强算子,突出图像中的局部边缘,然后定义像素的“边缘强度”,通过设置阈值的方法提取边缘点集 。但是由于噪声和图像模糊的原因,检测到的边界可能会有间断的情况发生,所以边缘检测包含2 个内容:(1)用边缘算子提取边缘点集。(2)在边缘点集合中去除某些边缘点并填充一些边缘点,将得到的边缘点集连接为线。2.3边缘检测算法2.3.1边缘检测算法步骤边缘检测算法包含有以下四个步骤:(1)滤波 边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声很敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的性能。需要指出 ,大多数滤波器在降低噪声的同时也导致了边缘强度的损失。因此增强边缘和降低噪声之间需要折中。(2)增强 增强边缘的基础是确定图像各点邻域强度的变化值 ,增强算法可以将邻域(或局部)强度值有显著变化的点显现出来,边缘增强一般是通过计算梯度幅值来完成的。(3)检测 在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某种方法来确定哪些点是边缘点。最简单的边缘检测判据是梯度幅值阈值判据。(4)定位 如果某一应用场合要求确定边缘位置,则边缘的位置可在子像素分辨率上来估计,边缘的方位也可以被估计出来。2.3.2边缘检测算法流程图图像获取滤波增强检测边缘点定位边缘方位图像输出图2.2 边缘检测流程图边缘检测流程图比较形象直观地描述了边缘检测的步骤,通过滤波、增强、检测、定位来达到边缘检测的目的。2.4边缘检测算法中算子的分类在大部分情况下,都是把图像的边缘全部看作是阶梯形边缘, 然后求得检测这种边缘的各种最优滤波器,用于实践中。边缘检测主要是(图像的)灰度变化的度量、检测和定位。有很多种不同的边缘检测方法,同一种方法使用的滤波器也不尽相同。边缘检测就是研究更好的边缘检测方法和检测算子。检测出的边缘并不等于实际目标的真实边缘。由于图像数据是二维的,而实际物体是三维的,从三维到二维的投影必然会造成信息的丢失,再加上成像过程中的光照不均和噪声等原因的影响,使得有边缘的地方不一定能被检测出来,而检测出来的边缘也不一定代表实际边缘。这就需要我们根据不同类型的图像,来选取合适的边缘检测算子。就一些经典的边缘检测算子分类,如图2.3。基础边缘检测算子Roberts微分算子Sobel微分算子Prewitt微分算子Laplace微分算子Wallis算子Kirsch算子Log算子Dog算子二阶导数过零点Canny算子图2.3 数字图像边缘检测算子分类2.5经典边缘检测算子2.5.1 Roberts边缘检测算子1、理论基础3Roberts边缘算子采用的是对角方向相邻的两个像素之差。从图像处理的实际效果来看,边缘定位准,对噪声敏感。Roberts边缘检测算子是一种利用局部差分算子寻找边缘的算子,它有下式给出。Roberts算子: (31) (32)其中表示处理后点的灰度值,表示处理前该点的灰度值。是具有整数像素坐标的输入图像,平方根运算使该处理类似于在人类视觉系统中发生的是过程。 该算法的算子如下: (33)2.5.2 Sobel边缘检测算子理论基础:(1)卷积卷积可以简单的看成加权求和的过程。卷积时使用的权用一个很小的矩阵来表示,矩阵的大小是奇数,而且与使用的区域的大小相同。这种权矩阵叫做卷积核,区域中的每一个像素分别与卷积核中的每个元素相乘,所有乘积之和即区域中心像素的新值。比如,对于一个33的区域p与卷积核k卷积后,区域p的中心像素p5表示如下: (34)其中 (35)卷积核中各元素叫做卷积系数。卷积核中卷积系数的大小、方向及排列次序决定了卷积的图像处理效果。大多数常用的卷积核都是33的,所有的卷积核的行、列都是奇数。进行卷积时会遇到一些复杂的问题,首先是图像边界的问题。当在图像上逐个移动卷积核时,只要卷积核移动到了图像边界,即卷积核悬挂在图像边界上时,就会出现计算上的问题。这时在原图像上就不能完整的找到与卷积核中系数相对应的9个图像像素。解决这个问题的两个简单方法是:或者忽略图像边界数据,或者在图像的四周复制图像的边界数据。Sobel边缘检测算子是先做加权平均再微分,然后求梯度,即 (36) (37) (38)以下两个卷积核形成了Sobel边缘检测算子,图中的每个点都用这两个核做卷积,一个核对通常的垂直边缘影响很大,而另一个对水平边缘影响很大。边缘检测算子的中心与中心像素相对应,进行卷积运算。两个卷积核的最大值作为该点的输出位。运算结果是一幅边缘幅度图像。在边缘检测中,Sobel算子对于像素的位置的影响做了加权,加权平均边宽像素,因此效果更好。 (39)2.5.3 Prewitt边缘检测算子理论基础以下两个卷积核形成了Prewitt边缘检测算子。同使用的Sobel算子的方法一样,图像中的每个点都用这两个核进行卷积,取最大值作为输出。Prewitt边缘检测算子也产生一幅边缘增强图像。Prewitt边缘检测算子为: (310)除此之外,还有Krish边缘检测算子、拉普拉斯边缘检测算子、Canny边缘检测算子等都是比较常用的图像边缘检测算子。第三章 Visual C+图像编程3.1 Visual C+概述 VC+是微软公司开发的一个IDE(集成开发环境),换句话说,就是使用C+的一个开发平台。严格的来说VC+不是门语言,虽然它和C+之间有密切的关系,如果形象点比喻的话,可以把C+看作为一种“工业标准”,而VC+则是某种操作系统平台下的“厂商标准”,而“厂商标准”是在遵循“工业标准”的前提下扩展而来的。采用VC+来实现图像编程的主要原因是,与Java和C#等现代编程语言相比,C+在程序运行的效率、内存使用的可控性和编程的灵活性上具有优势。图像处理需要大量的图像数据运算,经常使用复杂、费时的算法,因此图像处理程序的运行效率非常重要。C+代码被编译成汇编语言,可以直接在处理器上运行,效率很高。对庞大的图像数据进行处理需要使用大量的内存,而计算机的物理内存往往是有限的,因此需要有效地控制内存的操作。C+直接控制内存的分配和释放,这虽然很繁琐,而且容易出错,但却能有效地控制内存的使用。C+中大量使用指针,使得编程的灵活性很高,便于程序员施展编程技巧来提高程序的效率4。3.2 VC+的特点本文介绍的Visual C+是数字图像处理运动检测系统的开发工具,本运动检测系统是以VC+为软件平台建立起来的。Visual C+是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。从功能上来看,它除了继承了MFC1.0的全部功能外,还增加了以下新的特性:全面支持文件的Open、Save和Save As等菜单项,并且采用了最近才使用的文件列表形式。可以方便地进行打印和打印预显。支持滚动窗口和切分窗口(Splitter Window)。支持工具条(Toolbar)和状态条(Status bar).能够处理Microsoft Visual Basic控制。能够方便地实现上下文相关帮助(Context Sensitive Help)。能够自动处理进入对话框中的数据。实现OLE的接口更加简单、方便。因此,它现在已经成为开发Win32程序,包括图像处理程序的主要开发工具。3.3 VC+的组成Visual C+包含了两套完整的Windows应用开发系统。由以下的部分组成:(1)Visual工作平台和创建过程:这是一个运行于Windows上的交互式开发环境,它是直接从Microsoft QuickC for Windows演化而来的。(2)App Studio资源编辑器:堪称是Windows应用,同时它本身就是通过使用Visual C+工具及类库编写而成的,可以对自身的资源进行编辑。(3)C/C+编译器:Visual C+的编译器可以处理C和C+源代码,它通过源代码文件后缀来识别代码本身所使用的语言。(4)连接器:为了生成EXE文件,Visual C+的连接器需要对编译器所生成的OBJ文件进行处理。(5)资源编译器:在编译状态和联编状态都要用到资源编译器。(6)调试器:为了能够对程序进行调试,在创建程序时必须设置编译器和连接器相应的选项以便产生相应的可调试信息。(7)AppWizard:它会按照用户通过对话框指定的特性、类名及源代码文件名来产生Windows应用的工作构架。(8)ClassWizard:能够给出原型、函数体以及将消息同应用框架相联系的相应代码。(9)源程序浏览器:能够使人们从类或函数的角度来了解程序。(10)联机帮助:有关WindowsSDK参考手册及类库参考手册的全部内容都包含在Visual C+的联机帮助中。(11)Windows诊断工具:用于对手工编制的make文件进行处理的NMAKE程序。结束开始编译源代码编译编译错误链接链接错误运行程序运行时错误?是否是是否否图3.1 VC+运行流程图3.4 VC+与matlab的比较Matlab比较适合于做研究,因为它提供了大量的算法库,只用写简简单单的几句代码就可以完成某一算法或者某一功能,因此对于算法研究它具有较好的优势。同时它也提供了接口供VC使用,并且Matlab的开发速度比较快,见效也比较快,也比较容易实现。但是,如果你要写应用程序的话,最好用VC,不要用Matlab,也不要和Matlab集成,然后自己完成所有的算法,这样便于后续的扩展,在构建应用程序的时候也非常方便,而且还可以不断升级以适应更加复杂的情况,使用起来也更加灵活。VC本来就是一个功能很强大的软件,可以完成几乎所有的事情。缺点就是开发进度比较慢,特别是对于初学者来说,需要一段时间来适应VC的开发环境和开发理念,如果以后要跨平台了,实现起来也是很容易的。主要看做图像处理的目的了,是研究用还是做项目用!如果做项目用,那就用VC。本次毕业设计主要用VC来实现数字图像边缘检测算法,原因主要有二:一是VC使用C+语言来实现的,C+语言与Java和C#相比在程序运行效率、内存使用可控性、编程灵活性上都具有优势;二是VC是注重应用的,这将为今后的工作在项目的研发上打下良好的基础。第四章 边缘检测算子的编程实现4.1程序运行界面通过VC来实现边缘检测算子的功能,先对Roberts算子、Sobel算子、Prewitt算子进行函数定义,然后再进行函数调用,从而达到边缘检测的不同效果。图4.1 程序运行界面每种算子都是在此界面下进行功能实现的,左半边显示原图,右半边实现边缘检测的实现结果。4.2 Roberts算子程序及结果实现步骤:(1)取得原图的数据区指针(2)开辟一个和原图相同大小的图像缓冲区,并设定新图像初值为全白(255)(3)每个像素依次循环,用Roberts边缘检测算子分别计算图像中各点灰度值,对它们先求平方之和;再开方;将缓冲区中的数据复制到原图数据区。编程实现:函数名称:Roberts()函数类型:void功能:用罗伯特算子对图像进行边缘检测void BianYuanJianCedib:Robert LPBYTE p_data; /原图数据区指针 int wide ,height; /原图高、宽 int i,j; /循环变量 int pixe4; / Roberts算子p_data=this-Getdata();wide=this-GetWidth();height=this-Getheight();LPBYTE temp=new BYTEwide*height; /新图像缓冲区/设定新图像初值为255Memset(temp,255, wide*height)/由于使用22的模板,为防止越界,所以不处理最下边两行和最右边的两列像素for(j=0;jheight-1;j+)for(i=0;jRobert(); /调用Robert算子检测处理函数 Invalidate();实现结果:图4.2 Robert算子实现结果4.3 Sobel算子程序及结果实现步骤:(1)取得原图像的数据区指针(2)开辟两个和原图相同大小的图像缓冲区,将原图复制到两个缓冲区(3)分别设置Sobel边缘检测算子的两个模板,调用Templat()模板函数分别对两个缓冲区的图像进行卷积运算;(4)两个缓冲图像每个像素依次循环,取两个缓冲中各个像素灰度值较大者(5)将缓冲区的图像复制到原图数据区编程实现:卷积:函数名称:Templat(BYTE *m_pdata,int wide,int height,int tempH,int tempW,int tempMX,int tempMY,float *fpArray,float fCoef)函数类型:void参数:BYTE*m_pdata,指向DIB图像指针 int wide, 原图像宽度 int height,原图像高度 int tempH, 模板高度 int tempW, 模板宽度 int tempMX,模板的中心元素X坐标(tempW-1)int tempMY, 模板的中心元素Y坐标(tempH-1)float*fpArray,指向模板数组的指针float fCoef,模板系数返回值:处理成功返回true;处理失败返回flase功能:用指定模板对图像进行操作void BianYuanJianCedib: Templat(BYTE *m_pdata,int wide,int height,int tempH,int tempW,int tempMX,int tempMY,float *fpArray,float fCoef) int i,j,k,l; /循环变量 BYTE*temp=new BYTEwide*height; /新图像缓冲区/初始化新图像为原图像memcpy(temp,m_pdata,wide*height);float fResult; /像素值计算结果for(j=tempMY;jheight-tempH+tempMY+1;j+)for(j=tempMX;jheight-tempW+tempMX+1;i+)/计算像素值fResult=0;for(k=0;ktempH;k+)for(l=0;l255)/若超过255,直接赋值为255tempj*wide+i=255;else/未超过255,赋值为计算结果 tempj*wide+i=(int)(fResult+0.5);memcpy(m_pdata,temp,wide*height); /复制处理后的图像delete temp;sobel水平和垂直边缘检测函数名称:Sobel()函数类型:void功能:用Sobel算子对图像进行水平和垂直边缘检测void BianYuanJianCedib:Sobel LPBYTE p_data; /原图数据区指针 int wide ,height; /原图高、宽 int i,j; /循环变量int tempH; /模板高度int tempW; /模板宽度int tempC; /模板系数int tempMY; /模板中心元素Y坐标int tempMX; /模板中心元素X坐标float template9; /模板数组p_data=this-Getdata();wide=this-GetWidth();height=this-GetHeight();LPBYTE temp1=new BYTEwide*height; /新图像缓冲区LPBYTE temp2=new BYTEwide*height; /新图像缓冲区/复制原图像到缓冲图像memcpy(temp1,p_data, wide*height);memcpy(temp2,p_data, wide*height);/设置Sobel模板参数tempW=3;tempH=3;tempC=1.0;tempMY=1;tempMX=1; Template0=-1.0;Template1= -2.0;Template2= -1.0;Template3=0.0;Template4= 0.0;Template5= 0.0;Template6=1.0;Template7= 2.0;Template8= 1.0;/调用Templat()函数Templat( temp1,wide,height,tempH,tempW,tempMX,tempMY,Template,tempC);/设置Sobel模板参数Template0=-1.0;Template1= 0.0;Template2= 1.0;Template3=-2.0;Template4= 0.0;Template5= 2.0;Template6=-1.0;Template7= 0.0;Template8= 1.0;/调用Templat()函数Templat( temp1,wide,height,tempH,tempW,tempMX,tempMY,Template,tempC);/求两幅缓冲图像的最大值for(j=0;jheight;j+)for(i=0;itemp1j*wide+i)temp1j*wide+i=temp2j*wide+i;memcpy(p_data,temp1,wide*height); /复制处理后的图像/删除缓冲区delete temp1;delete temp2;调用程序:void CDynSplitView2:OnSobel() clearmem();CDibNew1-Sobel(); /调用Sobel算子检测处理函数 Invalidate();实现结果:图4.3 Sobel算子实现结果4.4 Prewitt算子程序及结果实现步骤(1)取得原图像的数据区指针(2)开辟两个和原图相同大小的图像缓冲区,(3)分别设置Prewitt边缘检测算子的两个模板,调用Templat()模板函数分别对两个缓冲区的图像进行卷积运算;(4)两个缓冲图像每个像素依次循环,取两个缓冲中各个像素灰度值较大者(5)将缓冲区的图像复制到原图数据区编程实现:函数名称:Prewitt()函数类型:void功能:用Prewitt算子对图像进行边缘检测void BianYuanJianCedib: prewittLPBYTE p_data; /原图数据区指针 int wide ,height; /原图高、宽 int i,j; /循环变量int tempH; /模板高度int tempW; /模板宽度int tempC; /模板系数int tempMY; /模板中心元素Y坐标int tempMX; /模板中心元素X坐标float template9; /模板数组p_data=this-Getdata();wide=this-GetWidth();height=this-GetHeight();LPBYTE temp1=new BYTEwide*height; /新图像缓冲区LPBYTE temp2=new BYTEwide*height; /新图像缓冲区/复制原图像到缓冲图像memcpy(temp1,p_data, wide*height);memcpy(temp2,p_data, wide*height);/设置prewitt模板1参数tempW=3;tempH=3;tempC=1.0;tempMY=1;tempMX=1;Template0=-1.0;Template1= -1.0;Template2= -1.0;Template3=0.0;Template4= 0.0;Template5= 0.0;Template6=1.0;Template7= 1.0;Template8= 1.0;/调用Templat()函数Templat( temp1,wide,height,tempH,tempW,tempMX,tempMY,Template,tempC);/设置Prewitt模板2函数Template0=1.0;Template1= 0.0;Template2= -1.0;Template3=1.0;Template4= 0.0;Template5= -1.0;Template6=1.0;Template7= 0.0;Template8= -1.0;/调用Templat()函数Templat( temp2,wide,height,tempH,tempW,tempMX,tempMY,Template,tempC);/求两幅缓冲图像的最大值for(j=0;jheight;j+)for(i=0;itemp1j*wide+i)temp1j*wide+i=temp2j*wide+i;memcpy(p_data,temp1,wide*height); /复制处理后的图像delete temp1;delete temp2;调用程序:void CDynSplitView2:OnPrewitt() clearmem();CDibNew1-PreWitt(); /调用Prewitt算子检测处理函数 Invalidate();实现结果:图4.4 Prewitt算子实现结果4.5结果分析与比较(a)原图 (b)Robert算子(c)Sobel算子 (d)Prewitt算子图4.5 算子实现结果比较在数字图像处理中,对边缘检测主要要求就是运算速度快,边缘定位准确,噪声抑制能力强,我们利用VC+编程分别对上面几种算法进行分析,各个算法的实验结果如图所示。从检测效果图可以看出,Robert 算子检测出的图像轮廓边缘很细,连续性较差,边缘信息有一定丢失,出现的噪点比较多。Sobel和Prewitt两个算子检测出的边缘效果几乎一致,比Roberts 算子的检测结果要好,边缘较为连续,对噪声不敏感,但是线条稍粗,出现了一些伪边缘6。从实验结果中我们可以发现,由于Robert 算子利用局部差分算子寻找边缘,边缘定位精度较高,但容易丢失一部分边缘,同时由于没经过图像平滑计算,因此不能抑制噪声,该算子对具有陡峭的低噪声图像响应最好,如图(b);Sobel 算子和 Prewitt算子都是对图像进行差分和滤波运算,差别只是平滑部分的权值有些差异,因此对噪声具有一定的抑制能力,但不能完全排除检测结果中出现伪边缘,同时这两个算子边缘定位比较准确和完整,但容易出现边缘变宽,该类算子对灰度渐变和具有噪声的图像处理的较好,如图(c)和(d)通过以上对经典边缘检测算子的分析和实际结果的验证,得出以下结论:(1)相同的是它们都是一阶微分算子(2)Robert算子采用对角线方向相邻两像素之差近似梯度幅值检测边缘。对水平和垂直方向检测定位精度高 ,但对噪声敏感。(3)Sobel算子根据像素点上下 ,左右邻点灰度加权差 , 在边缘处达到极值这一现象检测边缘。它对噪声具有平滑作用 ,提供较为精确的边缘方向信息 ,但边缘定位精度不够高。(4)Prewitt算子利用像素点上下、左右邻点灰度差 ,在边缘处达到极值检测边缘。它对噪声也具有平滑作用 ,但定位精度不够高。 表4.5.1 边缘检测算子对比算子特点适用范围Robert定位精度高,但对噪声敏感低噪声图像Sobel采用平均滤波,边缘较宽,间断点较多灰度渐变、低噪声图像Prewitt采用加权滤波,边缘较宽,间断点较多灰度渐变、低噪声图像通过对上述各种边缘检测算法的对比分析,为今后选择合适的检测算法提供一定依据。对于进一步学习和寻找更好的数字图像边缘检测方法具有一定的指导意义。第五章 边缘检测技术的发展及应用边缘检测技术是图像处理和计算机视觉等领域最基本的技术,如何快速、精确的提取图像边缘信息一直是国内外研究的热点,然而边缘检测又是图像处理中的一个难题。早期经典算法包括边缘算子法、曲面拟合法、模板匹配法、门限化法等。近年来随着数学理论及人工智能的发展,又涌现出许多新的边缘检测方法,如小波变换和小波包的边缘检测法、基于数学形态学、模糊理论和神经网络的边缘检测法7。5.1新的边缘检测方法5.1.1小波变换和小波包的边缘检测方法近年来 ,小波分析 成为应用数学和工程学科中迅速发展的一个新领域,小波变换就是时域频域的局部变换,因此能够更有效地从信号中提取有用信息。在图像工程中,需要分析的图像往往结构复杂、形态各异 ,提取的图像边缘不仅要反映目标的整体轮廓 ,目标的局部细节也不能够忽视,这就需要多尺度的边缘检测,而小波变换具有天然的多尺度特征 ,通过伸缩平移运算对信号进行细化分析,达到高频处时间细分,低频处频率细分。所以,小波变换非常适合复杂图像的边缘检测。一幅图像中,图像的能量大部分集中在低频和中频部分,图像的边缘和噪声对应于高频部分。基于小波包的边缘检测原理是利用了小波函数对图像的分解作用,在小波变换中只对图像的低频子带进行分解,并未对图像的高频子带进行分解。小波包变换不仅对图像的低频子带进行分解,还对图像的高频子带进行分解 ,选择的小波包尺度越大,小波系数对应的空间分辨率就越低。因此,小波包分解是一种更为精细的分解方法,可以满足不同分辨率下对局部细节进行边缘提取需要,尤其对于含噪图像,在提取图像边缘时对噪声的抑制效果更好。5.1.2基于数学形态学的边缘检测方法数学形态学是图像处理和模式识别领域中的一门新兴学科,具有严格的数学理论基础,现己在图像工程中得到了广泛应用。基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的。获得的图像结构信息与结构元素的尺寸和形状都有关系,构造不同的结构元素,便可完成不同的图像分析。数学形态学包括二值形态学、灰度形态学和彩色形态学;基本变换包括膨胀、腐蚀、开启、闭合四种运算 ,并由这四种运算演化出了开、闭、薄化、厚化等,从而完成复杂的形态变换。目前随着二值形态法的应用越来越成熟,灰度和彩色形态学在边缘检测中的应用也越来越引起人们的关注并逐渐走向成熟。随着时代的发展,边缘检测技术已应用到各个领域中并发挥着重要的作用。5.2边缘检测技术的应用5.2.1边缘检测在储粮害虫方面的应用我国是农业大国,粮食产后储藏期间,储粮害虫造成的危害十分严重;并且 ,近年来储粮害虫的种类和密度呈上升趋势, 致使储粮损失更加严重。为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025保健品区域独家销售代理合同范本
- 2025版双方新能源汽车研发生产合同协议
- 2025版片石石材开采与运输一体化合同协议书范本
- 2025版商业承兑汇票居间服务与乡村振兴战略合作合同
- 2025年度新能源发电项目电力改造合同范本
- 2025版体育产业新员工保密及赛事信息保护合同范例
- 2025办公场所租赁合同:全包式办公场所租赁管理合同
- 2025年售楼部环境绿化养护合同
- 2025大客户在线教育平台合作合同
- 2025年度道路施工围挡定制安装服务协议
- 中国土地荒漠化课件
- 2025晋中祁县司法协理员招聘笔试备考试题及答案解析
- Unit 3 Same or DifferentSection A Grammar Focus (3a-3c) 课件-2025-2026学年人教版八年级英语上册
- 2025数据中心机房建设方案
- 管线及设备开启作业安全管理制度与操作流程
- 揭西招投标管理办法
- 2025年小学语文教师新课程标准考试题目(含答案)
- 社区与小课堂的合同协议
- DG-TJ08-2467-2025 超低能耗建筑设计标准(居住建筑)
- 养老机构风险防范课件
- 腰椎融合术后护理课件
评论
0/150
提交评论