2022年数字图像的边界提取借鉴 .pdf
实验九数字图像的边界提取一、实验目的了解有关数字图像边界提取的基本概念,熟悉Matlab 软件中关于数字图像边界提取的基本命令,掌握利用 Matlab 软件进行数字图像边界提取的方法;同时,学会在图上加图题,会控制图题的位置。二、相关知识在图像处理中,有一种十分实用的操作叫做边界提取,在提取了图像的边界后,就可以对图像进行进一步的操作如图像分割,特定区域的提取,骨架提取等等。常用的边界检测算子有微分算子、拉普拉斯高斯算子和canny 算子。在 MATLAB 中,系统提供edge函数,其功能是利用各种边界检测算子来检测灰度图像的边界。函数 edge的用法有以下几种:1BW=edge(I) ;2BW=edge(I,method) ;3BW=edge(I,method,thresh) ;4BW=edge(I,method,thresh,direction) 其中:I:输入图像;method:提取边界的方法,共有六种可取的值,即共有六种可使用的方法,包括: sobel ,prewitt ,roberts ,log ,zerocross ,canny,缺省时使用 sobel ;thresh:指定的阈值,所有不强于thresh 的边都被忽略;direction :对于 sobel 和 prewitt方法指定方向,可取值为: horizontal和vertical, both (缺省值)BW:返回的二值图像,其中1 代表找到的边界。在这些方法中,canny 是较为优秀的一种,该方法使用两种不同的阈值分别检测强边界和弱边界,并且仅当弱边界和强边界相连时,才将弱边界包含在输出图像中。因此,这种方法不容易被噪声干扰,更容易检测到真正的弱边界。关于这些方法的真正含义,我们以后有专门的课程加以详细讨论,现在先看看它们的效果。例:分别调用 sobel ,prewitt ,roberts ,log ,zerocross 和canny六种方法检测图像rice.tif 的边界。程序如下:I=imread(rice.tif); BW1=edge(I,sobel); BW2=edge(I,prewitt); BW3=edge(I,roberts); BW4=edge(I,log); BW5=edge(I,zerocross); BW6=edge(I,canny); imshow(I);title( 图 1: rice.tif 原图 ,fontsize,14,position,128,280,0); figure;imshow(BW1);title(图 2: sobel 算子提取的边界,fontsize,14,position,128,280,0) figure;imshow(BW2);title(图 3: prewitt 算子提取的边界,fontsize,14,position,128,280,0) figure;imshow(BW3);title(图 4: roberts 算子提取的边界,fontsize,14,position,128,280,0) figure;imshow(BW4);title(图 5: log 算子提取的边界,fontsize,14,position,128,280,0) figure;imshow(BW5);title(图 6: zerocross 算子提取的边界,fontsize,14,position,128,280,0) figure;imshow(BW6);title(图 7: canny 算子提取的边界,fontsize,14,position,128,280,0) 运行结果如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - 从上面结果我们可以看出,canny 算子提取的边界较为完整。关于 title 语句的用法,注意一下我们程序中的title 语句, 其简单用法就是踢title(图题的内容 ),其实它还有一些可选的参数,包括图题的位置, 图题的颜色, 图题的字体, 大小,等等参数,其一般用法是title(.,属性名 ,属性值 ,.),例如,要控制图题的位置,用属性名position,其属性值是一个三维向量x,y,z ,其初始值是 0 0 0 ,其单位由 units 参数决定。 Units 的可选值为pixels | normalized | inches | centimeters | points | data ,normalized 将整个矩形规范化成0,1 0,1,其余都是绝对单位,1 point = 1/72 inch 。试一下,我们这个教材上的图题位置参数是多少?可选的属性还有,color ,fontname,fontsize等,有需要的时候可以通过察看help 来进一步学习。我们再看一个例子,还是用原图rice.tif ,这次我们来考虑阈值问题,在不用edge中第三和参数时,系统自动选择阈值,我们可以用函数的如下调用格式来看系统为我们选择的阈值是多少,我们先看如下程序为我们带来的结果:I=imread(rice.tif); BW1,th1=edge(I,sobel); th1str=num2str(th1) imshow(I); title(图 1: rice.tif 原图 ,fontsize,14,position,128,280,0); figure;imshow(BW1); ti=图 8: sobel 算子提取的边界,阈值为 ; ti=strcat(ti,th1str) title(ti,fontsize,12,position,128,280,0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 - - - - - - - - - 我们将上面的程序中第二行换成BW1,th1=edge(I,sobel,0.05); 即可得到图9 的结果。我们看到,边界提取得比图8 要完整,因此,我们还可以通过调整阈值来改善边界提取得结果。三、实验内容1分别对于图像text.tif ,testpat1.tif,blood1.tif ,nodules1.tif 用上面提到的六种方法分别提取边界并加以比较, 对这四幅图像提取边界的结果,分别对每一幅图给出你的判断,认为那种算子提取的边界最好?同时理解各种边界提取算子同时存在的必要性。对每一幅图均标出图题,并使图题的位置位于图的下方,居中,选择其中的一幅图,使其图题的字体为黑体,字号为14 号。2对于图像 bonemarr.tif,通过调整阈值的方法,得出一幅你认为较好的边界图,并给出此时的阈值。4 对于图像用上面提到的六种方法分别提取边界并加以比较,这次你认为那种算子提取的边界最好?5完成实验报告,报告中只需要指明程序名,不需要程序和图,只要写明你的结论即可。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 11 页 - - - - - - - - - 基于 matlab 边缘提取的几种方法的比较企业: 控制网日期: 2006-08-13领域:点击数: 1639 1、Matlab 简述Matlab 是国际上最流行的科学与工程计算的软件工具,它起源于矩阵运算,已经发展成一种高度集成的计算机语言。有人称它为“第四代”计算机语言,它提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化界面设计、便捷的与其它程序和语言接口的功能。随着Matlab 语言功能越来越强大,不断适应新的要求并提出新的解决方法,可以预见,在科学运算,自动控制与科学绘图领域,Matlab 语言将长期保持其独一无二的地位。2、几种常用的边缘检测算子边缘是图像的最重要的特征,。边缘是指周围像素灰度有阶跃变化或屋顶变化的那些像素的集合。边缘检测主要是灰度变化的度量、检测和定位。有很多种不同的边缘检测方法,同一种方法使用的滤波器也不尽相同。图像边缘检测就是研究更好的边缘检测方法和检测算子。边缘检测的基本思想首先是利用边缘增强算子,突出图像中的局部边缘,然后定义象素的“边缘强度”,通过设置阈值的方法提取边缘点集。由于噪声和模糊的存在,监测到的边界可能会变宽或在某点处发生间断。因此,边界检测包括两个基本内容:用边缘算子提取出反映灰度变化的边缘点集在边缘点集合中剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线常用的检测算子有微分算子、拉普拉斯高斯算子和canny 算子。在 Matlab 图像处理工具箱中,提供了edge 函数利用以上算子来检测灰度图像的边缘。2.1 微分算子法经典的边缘提取方法是考察图像的每个像素的某个邻域内灰度的变化,利用边缘邻近一阶或二阶方向导数变化规律,用简单的方法检测边缘,称为微分算子法。导数算子具有突出灰度变化的作用,对图像运用导数算子,灰度变化较大的点处算得的值较高,因此我们将图像名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 11 页 - - - - - - - - - 的导数算子运算值作为相应的边界强度,所以可以通过对这些导数值设置阈值,提取边界的点集。一阶导数是最简单的导数算子。已知在点f (x,y )处,梯度grad(F(x,y)的幅度为:它们分别求出了灰度在x 和 y 方向上的变化率,但是要对每一个像素进行以上的运算,运算量较大,所以在实际应用中常用小区域模板卷积运算来进行近似计算。模板运算的想法是将赋予某一个像素的值作为它本身灰度值和相邻象素灰度值的函数。运用中,对x,y 方向各用一个模板。2.1.1 Sobel 算子Sobel 算子是滤波算子的形式来提取边缘。X,Y 方向各用一个模板,两个模板组合起来构成1 个梯度算子。 X方向模板对垂直边缘影响最大,Y方向模板对水平边缘影响最大。图 1 Sobel算子模板名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 11 页 - - - - - - - - - 2.1.2 robert算子 Robert算子是一种梯度算子,它用交叉的差分表示梯度,是一种利用局部差分算子寻找边缘的算子,对具有陡峭的低噪声的图像效果最好:模板如图:图 2 Robert算子模板2.1.3 prewitt算子 prewitt算子是加权平均算子,对噪声有抑制作用,但是像素平均相当于对图像进行地同滤波,所以prewitt算子对边缘的定位不如robert算子。模板如图;图 3 prewitt算子模板代码如下:原始图像为三位编织复合材料二维截面图,对原始图像进行前期处理i=imread(d1.jpg); i2=im2double(i); ihd=rgb2gray(i2); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 11 页 - - - - - - - - - thr,sorh,keepapp=ddencmp(den ,wv ,ihd); ixc=wdencmp( gbl,ihd,sym4 ,2,thr,sorh,keepapp); figure,imshow(ixc),title(消噪后图像 );k2=medfilt2(ixc,7 7); figure,imshow(k2),title(中值滤波 );isuo=imresize(k2,0.25,bicubic); %sobert 、robert和 prewitt算子检测图像边缘esobel=edge(isuo,sobel); erob=edge(isuo,roberts); eprew=edge(isuo,prewitt); subplot(2,2,1); imshow(isuo);title( 前期处理图像 ); subplot(2,2,2); imshow(esobel);title(sobel算子提取 ); subplot(2,2,3); imshow(erob);title(roberts算子提取 ); subplot(2,2,4); imshow(eprew);title(prewitt算子提取 ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 11 页 - - - - - - - - - 图 4 微分算子边缘检测结果2.2Laplacian算子拉普拉斯高斯算子是一种二阶导数算子,将在边缘处产生一个陡峭的零交叉。前面介绍的几种梯度法具有方向性,不能对各种走向的边缘都具有相同的增强效果。但是Laplacian算子是各向同性的,能对任何走向的界线和线条进行锐化,无方向性。这是拉普拉斯算子区别于其他算法的最大优点。对一个连续函数,它在位置的拉普拉斯算子定义如下:在图像边缘检测中,为了运算方便,函数的拉普拉斯高斯算子也是借助模板来实现的。其模板有一个基本要求:模板中心的系数为正,其余相邻系数为负,所有系数的和应该为零。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 11 页 - - - - - - - - - 图 5 Laplacian算子模板2.3 Canny 边缘检测法 Canny边缘检测是一种比较新的边缘检测算子,具有很好的边缘监测性能,在图像处理中得到了越来越广泛的应用。它依据图像边缘检测最优准则设计canny 边缘检测算法:(1)首先用 2D高斯滤波模板进行卷积以消除噪声(2)利用导数算子找到图像灰度地沿着两个方向的偏导数,并求出梯度的大小:(3)利用( 2)的结果计算出梯度的方向(4)一旦知道了边缘的方向,就可以把边缘的梯度方向大致分为四种:水平、竖直、45 度方向、 135 度方向。通过梯度的方向,就可以找到这个像素梯度方向的邻接像素。(5)遍历图像,若某个像素的灰度值与其梯度方向上前后两个像素的灰度值相比不是最大的,那么这个像素值置为 0,即不是边缘。(6)使用累计直方图计算两个阈值,大于高阈值的一定是边缘,小于低阈值的一定不是边缘,介于之间的,看这个像素的邻接像素中有没有超过高阈值的边缘像素,如果有的话那么它就是边缘了,否则它就不是边缘。调用 Laplacian算子、 canny 算子检测法检测图像边缘的程序如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 11 页 - - - - - - - - - elog=edge(isuo,log); ecanny=edge(isuo,canny); subplot(1,2,1); imshow(elog);title(log算子提取 ); subplot(1,2,2); imshow(ecanny);title(canny 算子提取 ); 图 6 canny 算子、 Laplacian算子检测结果3. 边缘检测结果比较Roberts 算子检测方法对具有陡峭的低噪声的图像处理效果较好,但是利用roberts算子提取边缘的结果是边缘比较粗,因此边缘的定位不是很准确。Sobel 算子检测方法对灰度渐变和噪声较多的图像处理效果较好,sobel 算子对边缘定位不是很准确,图像的边缘不止一个像素。Prewitt算子检测方法对灰度渐变和噪声较多的图像处理效果较好。但边缘较宽,而且间断点多。Laplacian算子法对噪声比较敏感,所以很少用该算子检测边缘,而是用来判断边缘像素视为与图像的明区还是暗区。Canny 方法不容易受噪声干扰,能够检测到真正的弱边缘。优点在于,使用两种不同的阈值分别检测强边缘和弱边缘,并且当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中。参考文献1 赵春晖 . 现代图像处理技术及Matlab 实现M. 北京:人民邮电出版社,2001. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 11 页 - - - - - - - - - 2 阮秋琦 . 数字图像处理学 M. 北京:电子工业出版社,2001. 3 何斌 . 数字图像处理 M. 北京:人民邮电出版社,2001. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 11 页 - - - - - - - - -