
学生姓名: 专业班级:
指导教师: 工作单位:
题目4: 灰度图像边界跟踪程序设计
初始条件:
(1)提供实验室机房及其matlab软件;
(2)数字图像处理的基本理论学习。
要求完成的主要任务(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求):
(1)掌握图像边缘检测与连接的基本原理,利用matlab设计程序完成以下功能;
(2)选择一幅包含一个明显物体的256级灰度图像;
(3)用一种边缘检测方法计算出该图像的梯度图;
(4)对梯度图像进行边界跟踪,得到跟踪结果图;
(5)对结果进行分析;
(6)要求阅读相关参考文献不少于5篇;
(7)根据课程设计有关规范,按时、完成课程设计说明书。
时间安排:
(1)布置课程设计任务,查阅资料,确定方案 1.5天;
(2)进行编程设计、调试 2天;
(3)完成课程设计报告书、答辩 1.5天;
指导教师签名: 年 月 日
系主任(或责任教师)签名: 年 月
摘要
图像边缘检测技术是图像分割、目标识别、区域形态提取等图像分析领域中十分重要的基础。本文简要介绍各种经典图像边缘检测算子的基本原理,用Matlab仿真实验结果表明各种算子的特点及对噪声的敏感度,为学习和寻找更好的边缘检测方法提供参考价值。一副边缘图通常用边缘点勾画出个物体的轮廓,但很少能形成图像分割所需要的闭合且连通的界面。因此需要对边缘点进行连接才能完成物体的检测过程,边缘点连接就是一个将临近的边缘点连接起来,从而产生一条闭合的连通界面的过程。
关键字:边缘检测;算子;边缘连接;matlab
1 边界跟踪的原理
1.1边缘检测的定义
图像边缘是图像最基本的特征,边缘在图像分析中起着重要的作用。所谓边缘(edge)是指图像局部特征的不连续性。灰度或结构信息的突变称为边缘,例如:灰度级的突变、颜色的突变、纹理结的突变。边缘是一个区域的结束,也是另一个区域的开始,利用该特征可以分割图像。 当人们看一个有边缘 的物体时,首先感觉到的便是边缘,如
图1.1 边缘模型
一条理想的边缘应该具有如图1(a) 所示模型的特性。每个像素都处在灰度级跃变的一个垂直的台阶上(例如图形中所示的水平线通过图像的灰度剖面图)。 而实际上,诸如图像采集系统的性能、采样频率和获得图像的照明条件等因素的影响,得到的边缘往往是模糊的,边缘被模拟成具有“斜坡面”的剖面,如图1(b) 所示,在这个模型中不再有细线(宽为一个像素的线条),而是出现了边缘的点包含斜坡中任意点的情况。由此可以看到:模糊的边缘使边缘的“宽度”较大,面清晰的边缘使边缘的宽度较小。图像的边缘有方向的幅度两个属性,沿边缘方向像素变化平缓,垂直于边缘方向像素变化剧烈。边缘上的这种变化可以用微分算子检测出来,通常用一阶导数或二阶导数来检测边缘,不同的是一阶导数认为最大值对应边缘位置,而二阶导数以过零点对应边缘位置。实际上,对于图像的任意方向上的边缘都可以进行类似的分析。图像边缘检测中对任意点的一阶导数可以利用该点梯度的幅度来获得,二阶导数可以用拉普拉斯算子得到。
1.2 边缘检测算子
1.2.1 Roberts(罗伯特)边缘检测算子
景物的边缘总是以图像中强度的突变形式出现的,所以景物边缘包含着大量的信息。由于景物的边缘具有十分复杂的形态,因此,最常用的边缘检测方法是所谓的“梯度检测法”。
设是图像灰度分布函数;是图像边缘的梯度值;是梯度的方向。
(n=1,2,...)
可以得到图像在(x,y)点处的梯度大小和梯度方向。
称为Roberts边缘检测算子。式中对等的平方根运算使该处理类似于人类视觉系统的发生过程。事实上Roberts边缘检测算子是一种利用局部差分方法寻找边缘的算子,Robert梯度算子所采用的是对角方向相邻两像素值之差,所以用差分代替一阶偏导,算子形式可表示如下:
上述算子对应的两个模板如图1.2所示。实际应用中,图像中的每个像素点都用这两个模板进行卷积运算,为避免出现负值,在边缘检测时常提取其绝对值。
图1.2 Roberts 模版
1.2.2Prewitt(普瑞维特)边缘检测算子
Prewitt边缘检测算子就是一种利用局部差分平均方法寻找边缘的算子,它体现了三对像素点像素值之差的平均概念,因为平均能减少或消除噪声,为此我们可以先求平均,再求差分,即利用所谓的平均差分来求梯度。用差分代替一阶偏导可得算子形式如下:
Prewitt边缘检测算子的两个模板如图1.3所示,它的使用方法同Sobel算子一样,图像中的每个点都用这两个核进行卷积,取得最大值作为输出。Prewitt算子也产生一幅边缘图像。
| 1 |
| -1 | ||
| -1 | ||
| -1 |
图1.3 Prewitt算子模板
1.2.3 Sobel(索贝尔)边缘检测算子
该算子是由两个卷积核与对原图像进行卷积运算而得到的。其数学表达式为:
实际上Sobel边缘算子所采用的算法是先进行加权平均,然后进行微分运算,我们可以用差分代替一阶偏导,算子的计算方法如下: 算子垂直方向和水平方向的模板如图1.4所示,前者可以检测出图像中的水平方向的边缘,后者则可以检测图像中垂直方向的边缘。实际应用中,图像中的每一个像素点都用这两个卷积核进行卷积运算,取其最大值作为输出。运算结果是一幅体现边缘幅度的图像。
| 0 | ||
| 0 | ||
| 1 | 0 |
图1.4 Sobel算子模板
1.2.4 Kirsch(凯西)边缘检测算子
Kirsch边缘检测算子由8个卷积核组成,图像中的每个像素点都用这8个核进行卷积运算,即须求出8个方向的平均差分。像素与不同卷积核卷积运算的结果给出了相应特定边缘方向的响应。从所有方向相应中找出一个最大值,就给出了经过该点的边缘幅度图像的输出值。使输出最大的卷积核的序号既是边缘方向的编码。该算子还可以较好地抑制边缘检测的噪声。假设原始图像的子图像如图1.5所示。
图1.5 子图像示意图
则边缘的梯度大小为
式中
式中的下标超过7就用8去除并取余数。k=0,1,...,7实际上就是使用了8个模板,
8个方向的模板如图1.6所示
| 5 | 5 | 5 |
| 3 | 0 | -3 |
| -3 | -3 | 3 |
| 3 | 5 | 5 |
| -3 | 0 | 5 |
| -3 | -3 | -3 |
| -3 | 3 | 5 |
| -3 | 0 | 5 |
| -3 | -3 | 5 |
| -3 | -3 | -3 |
| -3 | 0 | 5 |
| -3 | 5 | 5 |
| -3 | -3 | -3 |
| -3 | 0 | 3 |
| 5 | 5 | 5 |
| -3 | -3 | -3 |
| 5 | 0 | 3 |
| 5 | 5 | 3 |
| 5 | -3 | -3 |
| 5 | 0 | 3 |
| 5 | 5 | 3 |
| 5 | 5 | 3 |
| 5 | 0 | 3 |
| -3 | -3 | -3 |
图1.6 Kirsch算子的8方向模板
从上面的8个方向模板可以看出,每两个卷积核(模板)之间的夹角为45度。
对于图像T,模块为(k=1,2,...,8),则边缘强度在点(x,y)处为:
{k=1,2,...,8}
其中,以表示点乘运算。如果取最大值的模作为边缘强度,同时用考虑最大值符号的方法来确定相对应的边缘方向,则考虑到各模板的对称性,只需要前四个模板即可。
1.2.5 拉普拉斯算子
拉普拉斯(Laplacian)边缘算子是一个二阶导数算子,而前面提到的三种算子均为一阶导数算子。该算子是一个与方向无关的各向同性(旋转轴对称)边缘检测算子。若只关心边缘点的位置而不顾其周围的实际灰度差时,一般选择该算子进行检测。
式中表示数字图像中每个像素关于x轴和y轴的二阶偏导数之和,即处理后的像素(x,y)处的灰度值f(x,y)是具有整数像素坐标的输入图像。
由于拉普拉斯(Laplacian)边缘算子为二阶差分,其方向信息丢失,产生双像素,对噪声有双倍加强的作用,因此很少直接用于边缘检测。
鉴于此,Marr和Hildreth将高斯滤波和拉普拉斯(Laplacian)边缘检测结合在一起,形成了LoG(Laplacian of Gaussian)算子,即高斯-拉普拉斯算子,也常称为马尔(Marr-Hildreth)算子。该算子先用高斯算子对图像进行平滑处理,然后采用拉普拉斯算子根据二阶微分过零点来检测图像的边缘。
高斯-拉普拉斯算子是两种算子的结合,既具备高斯算子的平滑特点又具备拉普拉斯算子锐化的特点。平滑和锐化,积分和微分是一个矛盾的两个侧面,但统一起来之后就变成了最佳的因子。因为图像中往往包含噪声,平滑和积分能够滤掉这些噪声,消除噪声后再进行边缘检测(锐化和微分)会得到较好的效果。
| 0 | 0 | -1 | 0 | 0 |
| 0 | -1 | -2 | -1 | 0 |
| -1 | -2 | 16 | -2 | -1 |
| 0 | -1 | -2 | -1 | 0 |
| 0 | 0 | -1 | 0 | 0 |
图1.6 LoG算子
1.3 算子比较
Roberts 算子 :Roberts算子利用局部差分算子寻找边缘,边缘定位精度
较高,但容易丢失一部分边缘,不具备抑制噪声的能力。该算子对具有陡峭边缘且含噪声少的图像效果较好。
Sobel 算子 和Prewitt 算子 :都是对图像先做加权平滑处理,然后再做微分运算,所不同的是平滑部分的权值有些差异,因此对噪声具有一定的抑制能力,但不能完全排除检测结果中出现的虚假边缘。虽然这两个算子边缘定位效果不错,但检测出的边缘容易出现多像素宽度。
Laplacian 算子 :是不依赖于边缘方向的二阶微分算子,对图像中的阶跃型边缘点定位准确,该算子对噪声非常敏感,它使噪声成分得到加强,这两个特性使得该算子容易丢失一部分边缘的方向信息,造成一些不连续的检测边缘,同时抗噪声能力比较差。
LOG 算子 :该算子首先用高斯函数对图像作平滑滤波处理,然后才使用Laplacian 算子检测边缘,因此克服了 Laplacian 算子抗噪声能力比较差的缺点,但是在抑制噪声的同时也可能将原有的比较尖锐的边缘也平滑掉了,造成这些尖锐边缘无法被检测到。
1.4 边缘连接
利用前面的方法检测出边缘点,但由于噪声、光照不均等因素的影响,获得边缘点有可能是不连续的,必须使用连接过程将边缘像素组合成有意义的边缘信息,以备后续处理。
填充小的间隙可以简单地实现,通过搜索一个以某端点为中心的5×5或更大的邻域,在邻域中找出其它端 点并填充上必要的边界像素,从而将它们连接起来。对具有许多边缘点的复杂场景,这种方法可能会对图像过度分割。为了避免过度的分割,可以规定:两个端点只有在边缘强度和走向相近的情况下才能连接。
从图像中一个边缘点出发,然后根据某种判别准则搜索下一个边缘点以此跟踪出目标边界。确定边界的起始搜索点,起始点的选择很关键,对某些图像,选择不同的起始点会导致不同的结果。确定合适边界判别准则和搜索准则,判别准则用于判断一个点是不是边界点,搜索准则则指导如何搜索下一个边缘点。确定搜索的终止条件。
|▽f(x,y)-▽f(x0 ,y0)|≤E
|α(x,y)-α(x0 ,y0)|≤C
2 边界跟踪的设计
2.1 prewitt 边缘检测
先建立一个prewitt算子模板,求出图片梯度幅值并保存,接着对每一个像素点的梯度幅值进行判定,小于判定值的点写‘0’,否则写‘1’。 最后显示图片。
I=imread('3
figure;
imshow(I);
title('原图像');
I=double(I);
[m,n]=size(I);
LEN= zeros(m,n); %建立矩阵保持对应像素的梯度幅度
THETA = zeros(m,n); %建立矩阵保持对应像素的角
JC = zeros(m,n); %建立边缘检测图矩阵
hv = fspecial('prewitt');
hh = hv.';
gv = abs(imfilter(I,hv,'replicate')); %水平方向梯度
gh = abs(imfilter(I,hh,'replicate')); %竖直方向梯度
LEN = sqrt(gv.^2 + gh.^2); %梯度幅值
THETA = atan(gh./gv); %保存角度量
for i=2:m-1
for j=2:n-1
if LEN(i,j) < 127 %建立删选条件
JC(i,j) = 0;
else
JC(i,j) = 1;
end
end
end
figure;
imshow(JC);
title('prewitt边缘检测图');
2.2 边界连接图
将使用premitt算子得到的图片的梯度的模长和幅值读入,并且将其与判定值进行对比,当像素点的模长和幅值都满足判定要求时,对该像素点写‘1’,否则写‘0’,最后显示图片。
LJ = zeros(m,n); %建立连接图矩阵,大小和边缘图一样
for i = 3:m-2
for j = 3:n-2
if JC(i,j) == 1
LJ(i,j) = JC(i,j); %将此边缘点保存在连接图中
for x = -2:2
for y = -2:2
if (abs(LEN(i,j) - LEN(i+x,j+y)) < 40)&&(abs(THETA(i,j) -THETA(i+x,j+y))<20*pi/180)
LJ(i+x,j+y) = 1; %将满足条件的点点亮(相连)
end
end
end
end
end
end
figure;
imshow(LJ);
title('边界跟踪图');
3 结果及分析
显示为原图像灰度图
图3.1 原图像
Prewitt算子生成的边缘线边界不是很完整,边界上有像素间隙的缺口,图像较为简单。
图3.2 边缘检测图
通过搜索一个以某端点为中心的5×5或更大的邻域,在邻域中找出其它端 点并填充上必要的边界像素,从而将它们连接起来。填充小的间隙。
使用边缘检测算法后紧跟连接过程将边缘像素组合成更有意义的边缘。
图3.3 边界跟踪图
4 心得体会
通过分析几种应用于数字图像处理中的边缘检测算子,根据它们在实践中的应用结果进行研究,主要包括:Robert 边缘算子、Prewitt 边缘算子、Sobel 边缘算子、Log边缘算子等对图像及噪声图像的边缘检测,根据实验处理结果讨论了几种检测方法的优劣.几种边缘提取算法在边缘明显、噪声很低的情况下会得到很好的边缘效果。
通过该课程设计,全面系统的理解了数字图像处理的一般原理和基本实现方法。把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的数字图像处理基础原理的知识强化,能够把课堂上学的知识通过自己编写的程序表示出来,加深了对理论知识的理解。在这次课程设计中,我先是认真阅读课本上的相关知识,理解透后又翻阅关于matlab的书籍,学习matlab中一些函数及运算符的用法。总体来说,这次课设我学到了很多。在设计过程中,加深了对可内知识的理解就,真正懂得了学以致用,熟悉了matlab的使用,了解了matlab在数字图像处理中的重大应用。做课程设计我体会到了设计的艰辛的同时,更让我体会到成功的喜悦和快乐. 这次数字图像处理课程设计,虽然短暂但是让我得到多方面的提高: 首先,提高了我们的对matlab语言的运用能力。以前也曾用matlab做过课程设计,但以前写的程序既没有人机交互功能,这次课程设计首次运用模块化思想,将多个功能分模块编写,然后通过主函数调用,并且有一定的人机交互。matlab程序设计中也有顺序、选择、循环三种结构,这一点和C语言很像。
参考文献
[1]杨杰 《数字图像处理及MATLAB实现》电子工业出版社
[2]张强 《精通MATLAB图像处理》电子工业出版 2002
[3]杨帆 《数字图像处理与分析》北京航空航天大学出版社 2004
[4]朱习军《MATLAB在信号与系统与图象处理中的应用》电子出版社2002
[5]陈怀琛《MATLAB及其在课程中的应用指南》西安电子科技大学出版社2000
本科生课程设计成绩评定表
| 姓 名 | 性 别 | ||
| 专业、班级 | |||
| 课程设计题目: | |||
| 课程设计答辩或质疑记录: | |||
| 成绩评定依据: | |||
| 最终评定成绩(以优、良、中、及格、不及格评定) | |||
年 月 日
