实验三 图像分割与边缘检测.docx

上传人:b****3 文档编号:3890788 上传时间:2022-11-26 格式:DOCX 页数:20 大小:202.65KB
下载 相关 举报
实验三 图像分割与边缘检测.docx_第1页
第1页 / 共20页
实验三 图像分割与边缘检测.docx_第2页
第2页 / 共20页
实验三 图像分割与边缘检测.docx_第3页
第3页 / 共20页
实验三 图像分割与边缘检测.docx_第4页
第4页 / 共20页
实验三 图像分割与边缘检测.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

实验三 图像分割与边缘检测.docx

《实验三 图像分割与边缘检测.docx》由会员分享,可在线阅读,更多相关《实验三 图像分割与边缘检测.docx(20页珍藏版)》请在冰豆网上搜索。

实验三 图像分割与边缘检测.docx

实验三图像分割与边缘检测

实验三图像分割与边缘检测

上课老师:

赵欢喜实验指导:

吴磊

实验地点:

科技楼4楼计算机实验中心时间:

2010.12.14

一.实验目的

1.理解图像分割的基本概念;

2.理解图像边缘提取的基本概念;

3.掌握进行边缘提取的基本方法;

4.掌握用阈值法进行图像分割的基本方法。

二.实验基本原理

●图象边缘检测

图像理解是图像处理的一个重要分支,研究为完成某一任务需要从图像中提取哪些有用的信息,以及如何利用这些信息解释图像。

边缘检测技术对于处理数字图像非常重要,因为边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开来。

在图像中,边界表明一个特征区域的终结和另一个特征区域的开始,边界所分开区域的内部特征或属性是一致的,而不同的区域内部的特征或属性是不同的,边缘检测正是利用物体和背景在某种图像特性上的差异来实现的,这些差异包括灰度,颜色或者纹理特征。

边缘检测实际上就是检测图像特征发生变化的位置。

图象边缘检测必须满足两个条件:

一能有效地抑制噪声;二必须尽量精确确定边缘的位置

由于噪声和模糊的存在,检测到的边界可能会变宽或在某些点处发生间断,因此,边界检测包括两个基本内容:

首先抽取出反映灰度变化的边缘点,然后剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线。

边缘检测的方法大多数是基于方向导数掩模求卷积的方法。

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

一阶导数与是最简单的导数算子,它们分别求出了灰度在x和y方向上的变化率,而方向α上的灰度变化率可以用相应公式进行计算;对于数字图像,应该采用差分运算代替求导。

一幅数字图像的一阶导数是基于各种二维梯度的近似值。

图像f(x,y)在位置(x,y)的梯度定义为下列向量:

(3-4)

在边缘检测中,一般用这个向量的大小,用

表示

(3-5)

函数f在某点的方向导数取得最大值的方向是,方向导数的最大值是称为梯度模。

利用梯度模算子来检测边缘是一种很好的方法,它不仅具有位移不变性,还具有各向同性。

为了运算简便,实际中采用梯度模的近似形式。

或者

传统的边缘检测算法通过梯度算子来实现的,在求边缘的梯度时,需要对每个象素位置计算。

在实际中常用小区域模板卷积来近似快速计算,简单有效,即梯度算子一般采用滤波算子的形式来完成,因此应用很广泛。

模板是N*N的权值方阵,经典的梯度算子模板有:

Sobel模板、Prewitt模板、Roberts模板、Laplacian模板等。

具体模板请见书。

拉普拉斯高斯(LoG)算法是一种二阶边缘检测方法。

它通过寻找图像灰度值中二阶微分中的过零点(ZeroCrossing)来检测边缘点。

其原理为,灰度级变形成的边缘经过微风算子形成一个单峰函数,峰值位置对应边缘点;对单峰函数进行微分,则峰值处的微分值为0,峰值两侧符号相反,而原先的极值点对应二阶微分中的过零点,通过检测过零点即可将图像的边缘提取出来。

(a)原图(b)边缘检测后的图(c)阈值处理后的图

图3-1检测具有-45度边缘的图例

1.点检测

原理:

常数灰阶区域中的某孤立点对某种模板的响应绝对值肯定是最强烈的。

最常用的模板有:

Matlab实现方法:

g=abs(imfilter(double(f),w))>=T;wherewisaappropriatepointdetectionmaskwhichsatisfiestheabovecondition.

实例:

thedetectionofisolatedbrightpointinthedarkgrayareaofthenortheastquadrant.

(imagesize:

675*675)

实例代码:

f=imread('Fig1002(a)(test_pattern_with_single_pixel).tif');

w=[-1-1-1;-18-1;-1-1-1];

g=abs(imfilter(double(f),w));

T=max(g(:

));

g=g>=T;

subplot(121);imshow(f);

title('theoriginalimage');

subplot(122);imshow(g(1:

end-400,400:

end));

title('theisolatedpointdetected(onlyapartdisplayed)');

=======================================================

2.线(通常假定一个象素厚度)检测

原理与上同,典型模板有(主要方向性):

实例:

-450方向线的检测:

3.边沿检测

方法:

使用一阶或者二阶导数。

对一节导数,关键问题是怎样估计水平和垂直方向的梯度Gx和Gy,二阶导数通常使用Laplacian算子计算,但是Laplacian算子很少单独用来检测边缘,因为其对噪声非常敏感,而且其结果会产生双边沿,加大了边缘检测的困难。

然而,如果Laplacian算子能与其他边缘检测算法相结合,如边缘定位算法,则其是一个强有力的补充。

通常两个标准用来测度图像强度的迅速变化:

(1)找出强度的一阶导数值大于某个事先阈值标准的位置;

(2)找出图像二阶导数的跨零点。

IPT工具箱函数edge提供了几种基于上面两种标准的估计器:

其语法为:

[g,t]=edge(f,‘method’,parameters);

这里‘method’参数包括这几种类型的边缘检测子:

Sobel,Prewitt,Roberts,LaplacianofaGaussian(LoG),ZerocrossingsandCanny,前三种的模板见下图:

另一个强有力的边缘检测器:

CannyEdgeDetector(Canny[1986]),其算法的基本步骤如下:

(1)First,theimageissmoothedusingaGaussianfilterwithaspecifiedstandarddeviation

(2)Thelocalgradient,g(x,y)=[Gx2+Gy2]1/2,andedgedirection,(x,y)=tan-1(Gy/Gx),arecomputedateachpoint.AnyofthefirstthreetechniquescanbeusedtocomputertheGxandGy.Anedgepointisdefinedtobeapointwhosestrengthislocallymaximuminthedirectionofthegradient.

(3)Theedgepointsgiverisetoridgesinthegradientmagnitudeimage.Thealgorithmthentracksalongthetopoftheseridgesandsetstozeroallpixelsthatarenotactuallyontheridgetopsoastogiveathinline,aprocessknownasnonmaximalsuppression.Theridgepixelsarethethresholdedusingthresholds,T1andT2,withT1

(4)Finally,thealgorithmperformsedgelinkingbyincorporatingtheweakpixelsthatare8-connectedtostrongpixels.

注意:

Edgefunctiondoesnotcomputeedgesat±450.Tocomputeedgesweneedtospecifythemaskanduseimfilter.

4.Hough变换

Inpractice,theresultingpixelsproducedbythemethodsdiscussedintheprevioussectionsseldomcharacterizeanedgecompletelybecauseofnoise,breaksfromnonuniformillumination,andothereffectsthatintroducespuriousdiscontinuities.HoughTransformisonetypeoflinkingproceduretofindandlinklinesegmentsforassemblingedgepixelsintomeaningfuledges.

AbouttheprincipleofHoughtransform,pleaserefertopage586intextbook.

InstanceofHoughtransform:

%constructinganimagecontaining5isolatedforegroundpixelsinseverallocaitons:

f=zeros(101,101);

f(1,1)=1,f(101,1)=1,f(1,101)=1,f(101,101)=1,f(51,51)=1;

[H,theta,rho]=hough(f);%houghtransform

imshow(theta,rho,H,[],'notruesize');

axison,axisnormal;

xlabel('\theta'),ylabel('\rho');

●图象分割

图像分割是将图像划分成若干个互不相交的小区域的过程,小区域是某种意义下具有共同属性的像素的连通集合。

如不同目标物体所占的图像区域、前景所占的图像区域等。

连通是指集合中任意两个点之间都存在着完全属于该集合的连通路径。

单色(灰度)图像的分割通常是基于图像强度的两个基本特征:

灰阶值的不连续性和灰度区域的相似性。

第一类方法主要是基于图像灰阶值的突然变换(如边缘)来分割图像,而第二类方法主要是把图像的某个子区域与某预定义的标准进行比较,以二者之间的相似性指标为指导来划分图像区域:

如阈值化技术、面向区域的方法、形态学分水岭分割算法等。

1.双峰法

先给出原图的直方图,再定出阈值(门限)T,一般取两个峰值间的谷值。

2.P参数法

这种方法用于目标所占图像面积已知的情况。

设目标在最简单图像f(i,j)中所占的面积s0与图像面积s之比为P=s0/s,则背景所占面积比为1-P=(s-s0)/s。

一般来说,低灰度值为背景,高灰度值为目标。

如果统计图像f(i,j)灰度值不大于某一灰度t的像元数和图像总像元数之比为1-p时,则以t为阈值。

3.自适应全局阈值(单阈值)

算法步骤如下:

1、初始化阈值T(一般为原图像所有像素平均值)。

2、用T分割图像成两个集合:

G1和G2,其中G1包含所有灰度值小于T的像素,G2包含所有灰度值大于T的像素。

3、计算G1中像素的平均值m1及G2中像素的平均值m2。

4、计算新的阈值:

T=(m1+m2)/2。

5、如果新阈值跟原阈值之间的差值小于一个预先设定的范围,停止循环,否则继续2-4步。

全局单阈值分割只适用于很少的图像。

对一般图像采用局部阈值法或多阈值法会得到更好的效果

4.最大类间方差法(OTSU)

设有M-1个阈值:

0≤k1<k2<…<KM-1≤L-1。

将图像分割成M个灰度值的类Cj,(Cj∈[kj-1+1,…,kj];j=1,2,…,M;k0=0,kM=L),则各类Cj的发生概率ωj和平均值μj为

(3-1)

(3-2)

式中,ω(0)=0,μ(0)=0。

由此可得各类的类间方差为

(3-3)

将使上式的σ2值为最大的阈值组(k1,k2,…,kM-1),作为M值化的最佳阈值组。

若取M为2,即分割成2类,则可用上述方法求出二值化的阈值。

三.实验提示

1.MATLAB的图像处理工具箱中提供的edge函数可以实现检测边缘的功能,其语法格式如下:

BW=edge(I,’sobel’)

BW=edge(I,’sobel’,thresh,direction)

BW=edge(I,‘Roberts’)

BW=edge(I,’log’)

BW=edge(I,’log’,thresh,sigma)

BW=edge(I,‘canny’)

BW=edge(I,’canny’,thresh,sigma)

这里BW=edge(I,'sobel')采用Sobel算子进行边缘检测。

BW=edge(I,'sobel',direction)可以指定算子方向,即:

direction=’horizontal’,为水平方向;

direction=‘vertical‘,为垂直方向;

direction=‘both‘,为水平和垂直两个方向。

BW=edge(I,'canny',thresh,sigma)和BW=edge(I,'log',thresh,sigma)分别为用canny算子和拉普拉斯高斯算子进行边缘检测。

选项’log’和’canny’的Sigma默认值分别为2.0和1.0。

例:

用三种算子进行边缘检测。

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('用拉普拉斯高斯算子')

2.也可以通过滤波方式实现图像的图象边缘,如拉普拉斯模板(有好几个):

i=imread('w01.tif')

I=doubole(i);

h=[0,1,0;1,-4,0;0,1,0]

j=conv2(I,h,’same’);

k=I-j;

imshow(k,[]);

3.I>T结果为一个逻辑值矩阵,I中大于T的值对应的位置为1(真),其余位置为0(假)。

I(I>T)表示I中所有大于T的值组成的向量。

255*(I>T)+0*(I<=T)可将I中大于T的像素值设为255,小于等于T的像素值设为0。

四、练习

1点、线和边缘检测

1.1.1点检测

点检测模板w:

-1

-1

-1

-1

8

-1

-1

-1

-1

检测方法:

g=abs(imfilter(double(f),w))>=T

练习1

f=imread(‘moon.tif’);

w=[-1-1-1;-18-1;-1-1-1];

g=abs(imfilter(double(f),w));

T=max(g(:

));

T=T*0.5;

g=g>=T;

imshow(f);figure,imshow(g);

1.1.2线检测

水平模板、+45度模板、垂直模板、-45度模板。

练习2

f=imread(‘circbw.tif’);

imshow(f);

w=[2-1-1;-12-1;-1-12];

g=abs(imfilter(double(f),w));

figure,imshow(g);

1.1.3使用edge函数的边缘检测

语法:

[g,t]=edge(f,‘method’,parameter)

说明:

g是一个逻辑数组,其值为:

在f中检测到边缘的位置为1,其他位置为零;t是edge是用的阈值;method为边缘监测器方法,可选为:

‘sobel’,‘prewit’,‘roberts’,‘log’(LoG),‘zerocoss’,‘canny’等;parameter包含两部分:

T为指定的阈值,第二部分为dir(检测边缘的首选方向:

‘horizontal’,‘vertical’,‘both’),或sigma(标准方差),或H(指定的滤波函数)。

练习3

f=imread(‘rice.tif’);

imshow(f);

[gsobel,t]=edge(f,‘sobel’);

figure,imshow(gsobel);

[glog,t]=edge(f,‘log’);

figure,imshow(glog);

[gcanny,t]=edge(f,‘canny’);

figure,imshow(gcanny);

2.2使用Hough变换的线检测

练习4

设计与实现一个基于Hough变换的直线检测器。

2.3阈值处理

2.3.1全局阈值处理

语法:

T=graythresh(f)

说明:

T是阈值,归一化为0至1之间的值。

2.3.2局部阈值处理

通过一个形态学顶帽算子并对得到的结果使用graythresh来计算。

练习5

f=imread(‘moon.tif’);

imshow(f);

T=graythresh(f);

g=f>=T;

figure,imshow(g);

2.4基于区域的分割

2.4.1区域生长

2.4.2区域分裂和合并

练习6

设计与实现一个基于区域生长的分割程序。

2.5使用分水岭变换的分割

练习7

f=imread(‘cell.tif’);

imshow(f);

g=im2bw(f,graythresh(f));

figure,imshow(g);

gc=~g;

D=bwdist(gc);

L=watershed(-D);

w=L==0;

g2=g&~w;

figure,imshow(g2);

2.6分割后处理

语法:

BW2=bwfill(BW1,c,r,n)

说明:

填充二进制图像的背景色。

(形态学处理)

练习8

BW1=[10000000

11111000

10001010

10001110

11110111

10011010

10001010

10001110]

BW2=bwfill(BW1,3,3,8)

I=imread('blood1.tif');

BW3=~im2bw(I);

BW4=bwfill(BW3,'holes');

imshow(BW3)

figure,imshow(BW4)

语法:

bwareaopen

说明:

二进制图像区域打开,清除小物体。

五.部分参考程序和参考结果

1.房屋轮廓描绘

代码:

f=imread('Fig1006(a)(building).tif');

[gv,t]=edge(f,'sobel','vertical');%usingthresholdcomputedautomatically,heret=0.0516

subplot(231);imshow(f,[]);

title('theoriginalimage');

subplot(232);imshow(gv,[]);

title('verticaledgewiththresholddeterminedautomatically');

gv1=edge(f,'sobel',0.15,'vertical');%usingaspecifiedthreshold.

subplot(233);imshow(gv1,[]);

title('verticaledgewithaspecifiedthreshold');

gboth=edge(f,'sobel',0.15);%edgedetectionoftwodirections

subplot(234);imshow(gboth,[]);

title('horizontalandverticaledge');

%edgedetectionof450directionusingimfilterfunction

w45=[-2-10;-101;012];

g45=imfilter(double(f),w45,'replicate');

T=0.3*max(abs(g45(:

)));

g45=g45>=T;

subplot(235);imshow(g45,[]);

title('edgeat45withimfilter');

wm45=[012;-101;-2-10];

g45=imfilter(double(f),wm45,'replicate');

T=0.3*max(abs(g45(:

)));

g45=g45>=T;

subplot(236);imshow(g45,[]);

title('edgeat-45withimfilter');

另一个实验:

为比较三种检测方法的相对性能:

Sobel,LoG和Cannyedgedetectors,和为了改善检测效果所需使用的技巧。

%usingthedefaultthreshold

f=imread('Fig1006(a)(building).tif');

[gs_default,ts]=edge(f,'sobel');%ts=0.074

[gl_default,tl]=edge(f,'log');%tl=0.002andthedefaultsigma=0.2

[gc_default,tc]=edge(f,'canny');%tc=[0.01890.047]andthedefaultsigma=0.1

%usingtheoptimalthresholdacquiredbymanualtest

gs_best=edge(f,'sobel',0.05);

gl_best=edge(f,'log',0.003,2.25);

gc_best=edge(f,'canny',[0.040.1],1.5);

Theleftcolumninabovefigureshowstheedgeimagesobtainedusingthedefaultsyntaxforthe‘sobel’,‘log’and‘canny’operatorrespectively,whereastherightcolumnaretheresultsusingoptimalthresholdandsigmavaluesobtainedbytry.

2.Hough变换用于线检测从而增强边缘的连续性

2.1Houghtransformforpeakdetection

PeakdetectionisthefirststepinusingHoughtransformforlinedetectionandlinking.However,findingameaningfulsetofdistinctpeaksinaHoughtransformcanbechallenging.BecauseofthequantizationinspaceofthedigitalimageandinparameterspaceoftheHoughtransform,aswellasthefactthatedgesintypicalimagesarenotperfectlystraight,HoughtransformpeakstendtolieinmorethanoneHoughtransformcell.Onestrategytoovercomethisproblemisfollowing:

(1)findt

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1