资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
实验六、图像的边缘检测一、实验目的1、了解图像边缘提取的基本概念;2、了解进行边缘提取的基本方法;3、掌握用MATLAB语言进行图像边缘提取的方法。二、实验原理图像分析和理解是图像处理的重要分支,研究为完成某一任务需要从图像中提取哪些有用的信息,以及如何利用这些信息解释图像。从图像的分析和理解来说,最基本的两个内容就是图像的分割和区域描述。图像分割就是将图像中具有不同含义的对象提取出来,区域描述是对对象本身及对象间关系的描述,使之具有某种指定的数学或符号表达形式,使计算机能够理解具体对象的具体含义。图像分割可分为两种:基于边界的分割技术和基于区域的分割技术,边缘检测技术是所有基于边界分割的图像分析方法的第一步,检测出边缘的图像就可以进行特征提取和形状分析了。因此边缘检测技术对于处理数字图像非常重要,因为边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开来。在图像中,边界表明一个特征区域的终结和另一个特征区域的开始,边界所分开区域的内部特征或属性是一致的,而不同的区域内部的特征或属性是不同的,边缘检测正是利用物体和背景在某种图像特性上的差异来实现的,这些差异包括灰度,颜色或者纹理特征。边缘检测实际上就是检测图像特征发生变化的位置。由于噪声和模糊的存在,检测到的边界可能会变宽或在某些点处发生间断,因此,边界检测包括两个基本内容:首先抽取出反映灰度变化的边缘点,然后剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线。边缘检测的方法大多数是基于方向导数掩模求卷积的方法。导数算子具有突出灰度变化的作用,对图像运用导数算子,灰度变化较大的点处算得的值比较高,因此可将这些导数值作为相应点的边界强度,通过设置门限的方法,提取边界点集。一阶导数与是最简单的导数算子,它们分别求出了灰度在x和y方向上的变化率,而方向上的灰度变化率可以用下面式子计算:对于数字图像,应该采用差分运算代替求导,相对应的一阶差分为:方向差分为:函数f在某点的方向导数取得最大值的方向是,方向导数的最大值是称为梯度模。利用梯度模算子来检测边缘是一种很好的方法,它不仅具有位移不变性,还具有各向同性。为了运算简便,实际中采用梯度模的近似形式,如:、及等。另外,还有一些常用的算子,如Roberts算子和Sobel算子。Roberts算子的表达式为:Sobel算子的表达式为:X方向算子: y方向算子:其中,由于Sobel算子是滤波算子的形式,用于提取边缘。我们可以利用快速卷积函数,简单有效,因此应用很广泛。拉普拉斯高斯(log)算法是一种二阶边缘检测方法。它通过寻找图像灰度值中二阶微分中的过零点(Zero Crossing)来检测边缘点。其原理为,灰度级变形成的边缘经过微风算子形成一个单峰函数,峰值位置对应边缘点;对单峰函数进行微分,则峰值处的微分值为0,峰值两侧符号相反,而原先的极值点对应于二阶微分中的过零点,通过检测过零点即可将图像的边缘提取出来。三、边缘检测的MATLAB实现MATLAB的图像处理工具箱中提供的edge函数可以实现检测边缘的功能。 edge函数提供了许多微分算子模板,对于某些模板可以指定其对水平边缘还是对垂直边缘(或二者都有)敏感(即主要检测是水平边缘还是垂直边缘)。edge函数在检测边缘时可以指定一个灰度阈值,只有满足这个阈值条件的才视为边界点。edge函数的基本调用格式如下:BW=edge(I,type,parmeter,)I表示输入图像,type表示算子类型,parmeter表示与具体算子有关的参数。例如以下语句指定sobel算子检测到边界的阈值和敏感方向:BW=edge(I,sobel,THRESH,DIRECTION,)其中DIRECTION可以取值horizontal、vertical、both。edge函数返回一个用数值1代表找到的边缘用数值0代表其他像素的二进制图像。其他算子形式如下:l BW = edge(I,sobel) 自动设置阈值BW = edge(I,sobel,thresh)BW = edge(I,sobel,thresh,direction)BW,thresh = edge(I,sobel,.) 返回数值和阈值l BW = edge(I,prewitt)BW = edge(I,prewitt,thresh)BW = edge(I,prewitt,thresh,direction)BW,thresh = edge(I,prewitt,.)l BW = edge(I,roberts)BW = edge(I,roberts,thresh)BW,thresh = edge(I,roberts,.)l BW = edge(I,log)BW = edge(I,log,thresh)BW = edge(I,log,thresh,sigma)BW,threshold = edge(I,log,.)l BW = edge(I,canny)BW = edge(I,canny,thresh)BW = edge(I,canny,thresh,sigma)BW,threshold = edge(I,canny,.)例如下语法格式:BW = edge(I,sobel)BW = edge(I,sobel,direction)BW = edge(I,roberts)BW = edge(I,log)这里BW = edge(I,sobel)采用Sobel算子进行边缘检测。BW = edge(I,sobel,direction)可以指定算子方向,即:direction=horizontal,为水平方向;direction=vertical,为垂直方向;direction=both,为水平和垂直两个方向。BW = edge(I,roberts)和BW = edge(I,log)分别为用Roberts算子和拉普拉斯高斯算子进行边缘检测。例如BW = edge(I,canny)BW = edge(I,canny,thresh)BW = edge(I,canny,thresh,sigma)BW,threshold = edge(I,canny,.)canny方法也使用拉普拉斯算子,该方法与其他边缘检测方法的不同之处在于,塌实用两种不同的阈值分别检测强边缘和弱边缘,并且仅当弱边缘和强边缘相连时才将弱边缘包含在输出图像中,因此这种方法较其他方法而言不容易被噪声影响,更容易检测出真正的弱边缘。例:用四种算子进行边缘检测。I=imread(eight.tif);imshow(I)BW1=edge(I,roberts);figure ,imshow(BW1),title(用Roberts算子)BW2=edge(I,sobel);figure,imshow(BW2),title(用Sobel算子 )BW3=edge(I,log);figure,imshow(BW3),title(用拉普拉斯高斯算子)BW4=edge(I,canny);figure,imshow(BW4),title(用canny方法)四、实验要求1、 读出MATLAB图像处理工具箱中提供的rice.tif这幅图像,并显示。2、 分别用Roberts,Sobel和拉普拉斯高斯算子和canny方法对图像进行边缘检测。比较四种算子处理的不同之处。3、如图所示的图像,分别采用下面三种不同的模板进行滤波,试画出滤波后图像的示意图。 试编程实现
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号