实验九  数字图像的边界提取

 

一、实验目的

了解有关数字图像边界提取的基本概念,熟悉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的边界,可得如下结果:

运行结果如下:(具体程序见教材)

  

  

    从上面结果我们可以看出,canny算子提取的边界较为完整。

    关于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中第三个参数时,系统会自动选择阈值,我们可以通过选择阈值来改善边界提取的结果:

 

 

。我们看到,图9的边界提取得比图8要完整。

三、实验内容

1.分别对于图像text.tiftestpat1.tifblood1.tifnodules1.tif用上面提到的六种方法分别提取边界并加以比较,对这四幅图像提取边界的结果,分别对每一幅图给出你的判断,认为那种算子提取的边界最好?同时理解各种边界提取算子同时存在的必要性。对每一幅图均标出图题,并使图题的位置位于图的下方,居中,选择其中的一幅图,使其图题的字体为黑体,字号为14号。

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

4.对于图像circbw.tif用上面提到的六种方法分别提取边界并加以比较,这次你认为那种算子提取的边界最好?

5.完成实验报告,报告中只需要指明程序名,不需要程序和图,只要写明你的结论即可。