图像边缘检测方法的研究与实现刘法200832800066

发布时间:2020-01-16 12:26:36

图像边缘检测方法的研究与实现刘法200832800066


青岛大学

专业课程设计

: 自动化学院

: 电子信息工程

: 08级电子信息工程3

学生姓名:

指导教师: 王汉萍 庄晓东

: 20111223

题目:图像边缘检测方法的研究与实现

一、边缘检测以及相关概念

11 边缘,边缘检测的介绍

边缘(edge)是指图像局部强度变化最显著的部分.边缘主要存在于目标与目标、目标与背景、区域与区域(包括不同色彩)之间,是图像分割、纹理特征和形状特征等图像分析的重要基础.图像分析和理解的第一步常常是边缘检测(edge detection)

边缘检测是指使用数学方法提取图像像元中具有亮度值(灰度)空间方向梯度大的边、线特征的过程。

在讨论边缘算子之前,首先给出一些术语的定义:

边缘点:图像中具有坐标d41d8cd98f00b204e9800998ecf8427e.png且处在强度显著变化的位置上的点.

边缘段:对应于边缘点坐标d41d8cd98f00b204e9800998ecf8427e.png及其方位d41d8cd98f00b204e9800998ecf8427e.png,边缘的方位可能是梯度角.

边缘检测器:从图像中抽取边缘(边缘点和边缘段)集合的算法.

轮廓:边缘列表,或是一条表示边缘列表的拟合曲线.

边缘连接:从无序边缘表形成有序边缘表的过程.习惯上边缘的表示采用顺时针方向序.

边缘跟踪:一个用来确定轮廊的图像(指滤波后的图像)搜索过程.

边缘点的坐标可以是边缘位置像素点的行、列整数标号,也可以在子像素分辨率水平上表示.边缘坐标可以在原始图像坐标系上表示,但大多数情况下是在边缘检测滤波器的输出图像的坐标系上表示,因为滤波过程可能导致图像坐标平移或缩放.边缘段可以用像素点尺寸大小的小线段定义,或用具有方位属性的一个点定义.请注意,在实际中,边缘点和边缘段都被称为边缘.

边缘连接和边缘跟踪之间的区别在于:边缘连接是把边缘检测器产生的无序边缘集作为输入,输出一个有序边缘集;边缘跟踪则是将一幅图像作为输入,输出一个有序边缘集.另外,边缘检测使用局部信息来决定边缘,而边缘跟踪使用整个图像信息来决定一个像素点是不是边缘.

12 边缘检测算子

边缘检测是图像特征提取的重要技术之一, 边缘常常意味着一个区域的终结和另一个区域的开始. 图像的边缘包含了物体形状的重要信息,它不仅在分析图像时大幅度地减少了要处理的信息量,而且还保护了目标的边界结构. 因此,边缘检测可以看做是处理许多复杂问题的关键.

边缘检测的实质是采用某种算法来提取出图像中对对象与背景间的交界线。图像灰度的变化情况可以用图像灰度分布的梯度来反映,因此可以用局部图像微分技术来获取边缘检测算子。经典的 边缘检测方法是对原始图像中的像素的某个邻域来构造边缘检测算子。以下是对几种经典的边缘检测算子进行理论分析,并对各自的性能特点做出比较和评价。

边缘检测的原理是:由于微分算子具有突出灰度变化的作用,对图像进行微分运算,在图像边缘处其灰度变化较大,故该处微分计算值教高,可将这些微分值作为相应点的边缘强度,通过阈值判别来提取边缘点,即如果微分值大于阈值,则为边缘点。

Roberts,Sobel,Prewwit是基于一阶导数的边缘检测算子,图像的边缘检测是通过2*2或者3*3模板作为核与该图像中的每个像素点做卷积和运算,然后选取合适的阈值以提取边缘。

Laplace边缘检测算子是基于二阶导数的边缘检测算子,该算子对噪声敏感。Laplace算子的改进方式是先对图像进行平滑处理,然后再应用二阶导数的边缘检测算子,其代表是拉普拉斯高斯(LOG)算子。前边介绍的边缘检测算法是基于微分方法的,其依据是图像的边缘对应一阶导数的极大值点和二阶导数过零点。Canny算子是另外一类边缘检测算子,它不是通过微分算子检测边缘,而是在满足一定约束条件下推导出的边缘检测最优化算子。

13 边缘检测算法

对于边缘的检测常常借助于空域微分算子进行,通过将其模板与图像卷积完成 两个具有不同灰度值的相邻区域之间总存在灰度边缘 灰度边缘是灰度值不连续(或突变) 的结果,这种不连续常可利用求一阶和二阶导数方便地检测到 已有的局部技术边缘检测方法,主要有一次微分(Sobel 算子、Robert s 算子等) 、二次微分(拉普拉斯算子等)这些边缘检测器对边缘灰度值过渡比较尖锐且噪声较小等不太复杂的图像,大多数提取算法均可以取得较好的效果 但对于边缘复杂、采光不均匀的图像来说,则效果不太理想 主要表现为边缘模糊、边缘非单像素宽、弱边缘丢失和整体边缘的不连续等方面

用算子检测图像边缘的方法是用小区域模板对图像进行处理,即采用卷积核作为掩模模板在图像中依次移动,完成图像中每个像素点同模板的卷积运算,最终输出的边缘幅度结果可以检测出图像的边缘卷积运算是一种邻域运算图像处理认为:某一点像素的结果不但和本像素灰度有关,而且和其邻域点值有关运用模板在图像上依此对每一个像素进行卷积, 即模板上每一个点的值与其在图像上当前位置对应的像素点值相乘后再相加,得出的值就是该点处理后的新值

边缘检测算法有如下四个步骤:

滤波:边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声很敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的性能需要指出,大多数滤波器在降低噪声的同时也导致了边缘强度的损失,因此,增强边缘和降低噪声之间需要折衷

增强:增强边缘的基础是确定图像各点邻域强度的变化值增强算法可以将邻域(或局部)强度值有显著变化的点突显出来边缘增强一般是通过计算梯度幅值来完成的

检测:在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某种方法来确定哪些点是边缘点最简单的边缘检测判据是梯度幅值阈值判据

定位:如果某一应用场合要求确定边缘位置,则边缘的位置可在子像素分辨率上来估计,边缘的方位也可以被估计出来

二、经典边缘检测算子的理论分析和比较

21 Roberts算子

Roberts算子是一种斜向偏差分的梯度计算方法, 梯度的大小代表边缘的强度, 梯度的方向与边缘走向垂直。该算子定位精度高, 但容易丢失部分边缘。因为没进行平滑处理, 不具有抑制噪声的能力。用该算子处理边缘陡峭度高且噪声小的图像效果较佳。

Roberts交叉算子为梯度幅值计算提供了一种简单的近似方法:

9bf8a43c46952d817ae65a4be5da7584.png (11)

用卷积模板,上式变成:

a64b08c110c5d8478d73954341b3b257.png (12)

其中7e0e2bc0b6c1b73e52d1a68695ae463d.png22cb2e73509152b597f3cd24850f5ac7.png由下面的模板计算:

word/media/image9.gif d41d8cd98f00b204e9800998ecf8427e.png d41d8cd98f00b204e9800998ecf8427e.png (13)

同前面的d41d8cd98f00b204e9800998ecf8427e.png梯度算子一样,差分值将在内插点d41d8cd98f00b204e9800998ecf8427e.png处计算.Roberts算子是该点连续梯度的近似值,而不是所预期的点d41d8cd98f00b204e9800998ecf8427e.png处的近似值

22 Sobel算子、Prewitt算子

Sobel 算子和P rew it t 算子都是一阶的微分算子,都是先对图像进行平滑处理, 虽然两者都是加权平均滤波, 但是前者邻域的像素对当前像素产生的影响不是等价的, 距离不同的像素具有不同的权值, 对算子结果产生的影响也不同。这两种算子对噪声都有一定的抑制作用, 但不能完全排除检测结果中出现虚假边缘的情况。这两者对灰度渐变低噪声的图像有较好的检测效果, 但是对于混合多复杂噪声的图像处理效果就不理想了。

正如前面所讲,采用2186a2f93b980592546925eb4d0c26af.png邻域可以避免在像素之间内插点上计算梯度.考虑一下上图中所示的点d41d8cd98f00b204e9800998ecf8427e.png周围点的排列Sobel算子也是一种梯度幅值,

d41d8cd98f00b204e9800998ecf8427e.png (14)

其中的偏导数用下式计算:

48f26bdd339fcdad237102a56b75dcad.png (15)

其中常数4847acef124418c705153576282ebd02.png

word/media/image20.gif和其他的梯度算子一样,d41d8cd98f00b204e9800998ecf8427e.pngd41d8cd98f00b204e9800998ecf8427e.png可用卷积模板来实现:

84be0e0066615c0330f1ebb590a77996.png c72609f0cfd164d2d33f8cb6dc447325.png

11

请注意这一算子把重点放在接近于模板中心的像素点Sobel算子是边缘检测器中最常用的算子之一

word/media/image25.gifcb7f3f97ab788798c2077a17e4afceb5.png

12

12 用于说明Sobel算子和Prewitt算子的邻域像素点标记

Prewitt算子与Sobel算子的方程完全一样,只是常量c=1所以

word/media/image27.gifb257052714971a026523256a50e633c7.png e64aa101c7f5b385661ba26f0a9b7e2d.png (16)

请注意,与Sobel算子不同,这一算子没有把重点放在接近模板中心的像素点

23拉普拉斯算子

  平滑过的阶跃边缘二阶导数是一个在边缘点处过零的函数拉普拉斯算子是二阶导数的二维等效式函数d41d8cd98f00b204e9800998ecf8427e.png的拉普拉斯算子公式为

d41d8cd98f00b204e9800998ecf8427e.png (17)

使用差分方程对9dd4e461268c8034f5c8564e155c67a6.png415290769594460e2e485922904f345d.png方向上的二阶偏导数近似如下:

04390cc0cfa625a643419625cfd62fc8.png (18)

这一近似式是以点a01b7ccf65c0e1d82c18d1dcc0ab1ed2.png为中心的434d9f1ecd553db9c4b31800256ef658.png替换363b122c528f54df4a0446b6bab05515.png,得到

3b7c0cf254147da23ec2eb0cc88c2407.pngd41d8cd98f00b204e9800998ecf8427e.png (19)

它是以点d41d8cd98f00b204e9800998ecf8427e.png为中心的二阶偏导数的理想近似式,类似地,

3d901e6e236be43de5bc72a2ce6ed687.png17bb7a4d0111274f02e8d274d0f2270a.png (110)

把这两个式子合并为一个算子,就成为下面能用来近似拉普拉斯算子的模板:

940f8ebdc1ac21e3cecf0aedd9d44b09.png 111)

 当拉普拉斯算子输出出现过零点时就表明有边缘存在,其中忽略无意义的过零点(均匀零区)原则上,过零点的位置精度可以通过线性内插方法精确到子像素分辨率,不过由于噪声,结果可能不会很精确

24 LoG 算法

正如上面所提到的,利用图像强度二阶导数的零交叉点来求边缘点的算法对噪声十分敏感,所以,希望在边缘增强前滤除噪声为此,MarrHildreth[146]将高斯滤波和拉普拉斯边缘检测结合在一起,形成LoGLaplacian of Gaussian, LoG)算法,也称之为拉普拉斯高斯算法LoG边缘检测器的基本特征是:

1 平滑滤波器是高斯滤波器

2 增强步骤采用二阶导数(二维拉普拉斯函数)

3 边缘检测判据是二阶导数零交叉点并对应一阶导数的较大峰值

4 使用线性内插方法在子像素分辨率水平上估计边缘的位置

LoG算子的输出d41d8cd98f00b204e9800998ecf8427e.png是通过卷积运算得到的:

d41d8cd98f00b204e9800998ecf8427e.png (112)

根据卷积求导法有

d41d8cd98f00b204e9800998ecf8427e.png (113)

其中:

d41d8cd98f00b204e9800998ecf8427e.png (114)

称之为墨西哥草帽算子.

25 Canny 边缘检测器

检测阶跃边缘的基本思想是在图像中找出具有局部最大梯度幅值的像素点检测阶跃边缘的大部分工作集中在寻找Canny边缘检测器是高斯函数的一阶导数,是对信噪比与定位之乘积的最优化逼近算子[Canny 1986].我们将通过下面的符号对Canny边缘检测器算法作一概括说明eeac0fb5a5cb5b038ba13e524d77f520.png表示图像使用可分离滤波方法求图像与高斯平滑滤波器卷积,得到的结果是一个已平滑数据阵列

c9497fa36b2a2b4d24f0027a72e8fc9e.png

其中3122c41ebe889f745cb9bbe1c92165c3.png是高斯函数的散布参数,它控制着平滑程度

Canny算子边缘检测的三条准则是:

a) 低误判率,既要尽可能地检查出真实的边缘,同时又要尽量避免检测中出现的虚假边缘

b) 高定位精度,即检测出的边缘位置要尽量接近真正的边缘位置

c) 对同一边缘要有低的响应次数,即同一边缘产生多个响应的概率要低。

三、边缘检测算子的应用实例

1对某图像进行算子提取


m=imread('F22.jpg');

I=rgb2gray(m);

figure(1)

subplot(2,3,1);

imshow(I);

title('原始图像');

BW2= edge(I,'Canny',0.06) ;

subplot(2,3,2);imshow(BW2);

title( 'Canny算子(阈值=0.06)');

BW11=edge(I,'log',0.003);

subplot(2,3,3);imshow(BW11);

title('LOG算子(阈值=0.003)');

BW10=edge(I,'Roberts ',0.06);

subplot(2,3,4);imshow(BW10);

title('Roberts算子(阈值=0.06)');

BW20=edge(I, 'sobel ',0.06);

subplot(2,3,5);imshow(BW20);

title('sobel算子(阈值=0.06)');

BW31=edge(I,'Prewitt ',0.06);

subplot(2,3,6);imshow(BW31);

title( 'Prewitt算子(阈值=0.06)');


结果如下:

word/media/image51_1.png

2对加入高斯噪声,椒盐噪声的图像进行各个算子提取


m=imread('F22.jpg');

I=rgb2gray(m);

I=imnoise(I,'gaussian',0,0.01); %添加均值为0、方差为0.02的噪声

figure(2)

subplot(2,3,1);

imshow(I)

title('加躁后图像');

BW2= edge(I,'Canny',0.2) ;

subplot(2,3,2);imshow(BW2);

title( '阈值0.2Canny算子');

BW11=edge(I,'log',0.01);

subplot(2,3,3);imshow(BW11);

title('阈值0.01LOG算子');

BW10=edge(I,'Roberts ',0.2);

subplot(2,3,4);imshow(BW10);

title('阈值0.2Roberts算子');

BW20=edge(I, 'sobel ',0.2);

subplot(2,3,5);imshow(BW20);

title('阈值0.2sobel算子');

BW31=edge(I,'Prewitt ',0.2);

subplot(2,3,6);imshow(BW31);

title( '阈值0.2Prewitt算子');


结果如下:

word/media/image52_1.png


m=imread('F22.jpg');

I=rgb2gray(m);

I=imnoise(I,'salt & pepper'); %加入椒盐噪声

% I=imnoise(I,'gaussian',0,0.01); %添加均值为0、方差为0.02的噪声

figure(2)

subplot(2,3,1);

imshow(I)

title('加椒盐噪声后图像');

BW2= edge(I,'Canny',0.2) ;

subplot(2,3,2);imshow(BW2);

title( '阈值0.2Canny算子');

BW11=edge(I,'log',0.01);

subplot(2,3,3);imshow(BW11);

title('阈值0.01LOG算子');

BW10=edge(I,'Roberts ',0.2);

subplot(2,3,4);imshow(BW10);

title('阈值0.2Roberts算子');

BW20=edge(I, 'sobel ',0.2);

subplot(2,3,5);imshow(BW20);

title('阈值0.2sobel算子');

BW31=edge(I,'Prewitt ',0.2);

subplot(2,3,6);imshow(BW31);

title( '阈值0.2Prewitt算子');


结果如下:

word/media/image53_1.png

边缘检测方法性能比较

  梯度边缘检测方法利用梯度幅值在边缘处达到极值检测边缘。该法不受施加运算方向限制,同时能获得边缘方向信息,定位精度高,但对噪声较为敏感。
  Roberts算子采用对角线方向相邻两像素之差近似梯度幅值检测边缘。检测水平和垂直边缘的效果好于斜向边缘,定位精度高,对噪声敏感。
  Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。
  Prewitt算子利用像素点上下、左右邻点灰度差,在边缘处达到极值检测边缘。对噪声具有平滑作用,定位精度不够高。
  Laplace算子是二阶微分算子,利用边缘点处二阶导函数出现零交叉原理检测边缘。不具方向性,对灰度突变敏感,定位精度高,同时对噪声敏感,且不能获得边缘方向等信息。

五、学习心得

本课题从理论上对几种经典的边缘检测算法(Roberts算子、Sobel算子、Prewitt算子、Krisch算子、高斯-拉普拉斯算子)进行分析,并用MATLAB(7.0以上版本)实现这些算法。最后,通过实例图像对不同边缘检测算法的效果进行分析,找出各种算法的适用范围。通过本课题的研究拓宽了自己的知识面,为以后进一步学习数字图像处理打下了基础,提高了学生的独立工作能力和编程能力。通过这次数字图像课程设计,让我可以更娴熟的运用matlab这个软件。Matlab在工业方面的应用很广泛,我希望能有机会更深刻的学习理解它。在指导教师的指导下,我顺利的完成了这次数字图像的课程设计,虽然题目是简单的,但对我们的课程学习,和知识的运用有着很好的作用。总之,我认为这次课程设计是成功的,收获也是丰富的。

参考文献:

1、王卜堂,杨善林. 基于Gauss—Laplace算子的灰度图像边缘检测

计算机工程与应用 20032月。

2、何斌,马天予,王运坚,朱红莲.Visual C++数字图像处理(第二版)北京:人民邮电出版社 200212月。

3、张兆礼 赵春晖 梅晓丹.现代图像处理技术及Matlab实现人民邮电出版社 2001

4、王润生. 图像理解长沙: 国防科技大学出版社, 1994

图像边缘检测方法的研究与实现刘法200832800066

相关推荐