当前位置:文档之家› 数字图像的边界提取

数字图像的边界提取

实验九数字图像的边界提取一、实验目的了解有关数字图像边界提取的基本概念,熟悉Matlab软件中关于数字图像边界提取的基本命令,掌握利用Matlab软件进行数字图像边界提取的方法;同时,学会在图上加图题,会控制图题的位置。

二、相关知识在图像处理中,有一种十分实用的操作叫做边界提取,在提取了图像的边界后,就可以对图像进行进一步的操作如图像分割,特定区域的提取,骨架提取等等。

常用的边界检测算子有微分算子、拉普拉斯高斯算子和canny算子。

在MA TLAB中,系统提供edge函数,其功能是利用各种边界检测算子来检测灰度图像的边界。

函数edge的用法有以下几种:1.BW=edge(I);2.BW=edge(I,method);3.BW=edge(I,method,thresh);4.BW=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]) 运行结果如下:从上面结果我们可以看出,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])我们将上面的程序中第二行换成[BW1,th1]=edge(I,'sobel',0.05);即可得到图9的结果。

我们看到,边界提取得比图8要完整,因此,我们还可以通过调整阈值来改善边界提取得结果。

三、实验内容1.分别对于图像text.tif,testpat1.tif,blood1.tif,nodules1.tif用上面提到的六种方法分别提取边界并加以比较,对这四幅图像提取边界的结果,分别对每一幅图给出你的判断,认为那种算子提取的边界最好?同时理解各种边界提取算子同时存在的必要性。

对每一幅图均标出图题,并使图题的位置位于图的下方,居中,选择其中的一幅图,使其图题的字体为黑体,字号为14号。

2.对于图像bonemarr.tif,通过调整阈值的方法,得出一幅你认为较好的边界图,并给出此时的阈值。

4.对于图像用上面提到的六种方法分别提取边界并加以比较,这次你认为那种算子提取的边界最好?5.完成实验报告,报告中只需要指明程序名,不需要程序和图,只要写明你的结论即可。

企业:控制网日期:2006-08-13领域:点击数:16391、Matlab简述Matlab是国际上最流行的科学与工程计算的软件工具,它起源于矩阵运算,已经发展成一种高度集成的计算机语言。

有人称它为“第四代”计算机语言,它提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化界面设计、便捷的与其它程序和语言接口的功能。

随着Matlab语言功能越来越强大,不断适应新的要求并提出新的解决方法,可以预见,在科学运算,自动控制与科学绘图领域,Matlab语言将长期保持其独一无二的地位。

2、几种常用的边缘检测算子边缘是图像的最重要的特征,。

边缘是指周围像素灰度有阶跃变化或屋顶变化的那些像素的集合。

边缘检测主要是灰度变化的度量、检测和定位。

有很多种不同的边缘检测方法,同一种方法使用的滤波器也不尽相同。

图像边缘检测就是研究更好的边缘检测方法和检测算子。

边缘检测的基本思想首先是利用边缘增强算子,突出图像中的局部边缘,然后定义象素的“边缘强度”,通过设置阈值的方法提取边缘点集。

由于噪声和模糊的存在,监测到的边界可能会变宽或在某点处发生间断。

因此,边界检测包括两个基本内容:●用边缘算子提取出反映灰度变化的边缘点集●在边缘点集合中剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线常用的检测算子有微分算子、拉普拉斯高斯算子和canny算子。

在Matlab图像处理工具箱中,提供了edge函数利用以上算子来检测灰度图像的边缘。

2.1微分算子法经典的边缘提取方法是考察图像的每个像素的某个邻域内灰度的变化,利用边缘邻近一阶或二阶方向导数变化规律,用简单的方法检测边缘,称为微分算子法。

导数算子具有突出灰度变化的作用,对图像运用导数算子,灰度变化较大的点处算得的值较高,因此我们将图像的导数算子运算值作为相应的边界强度,所以可以通过对这些导数值设置阈值,提取边界的点集。

一阶导数是最简单的导数算子。

已知在点f(x,y)处,梯度grad(F(x,y))的幅度为:它们分别求出了灰度在x和y方向上的变化率,但是要对每一个像素进行以上的运算,运算量较大,所以在实际应用中常用小区域模板卷积运算来进行近似计算。

模板运算的想法是将赋予某一个像素的值作为它本身灰度值和相邻象素灰度值的函数。

运用中,对x,y方向各用一个模板。

2.1.1 Sobel算子Sobel算子是滤波算子的形式来提取边缘。

X,Y方向各用一个模板,两个模板组合起来构成1个梯度算子。

X方向模板对垂直边缘影响最大,Y方向模板对水平边缘影响最大。

图1 Sobel算子模板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);[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算子提取');图4微分算子边缘检测结果2.2Laplacian算子拉普拉斯高斯算子是一种二阶导数算子,将在边缘处产生一个陡峭的零交叉。

相关主题