基于Matlab的图像边缘检测算法的实现及应用毕业论文

更新时间:2023-03-08 18:08:30 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目录

摘要 ..................................................................................................................................... 1 引言 ..................................................................................................................................... 2 第一章绪论 ........................................................................................................................ 3

1.1 课程设计选题的背景及意义 ............................................................................. 3 1.2 图像边缘检测的发展现状 ................................................................................. 4 第二章边缘检测的基本原理 ........................................................................................... 5

2.1 基于一阶导数的边缘检测 ................................................................................. 8 2.2 基于二阶导的边缘检测 ..................................................................................... 9 第三章边缘检测算子 ..................................................................................................... 10

3.1 Canny算子.......................................................................................................... 10 3.2 Roberts梯度算子 ............................................................................................... 11 3.3 Prewitt算子 ........................................................................................................ 12 3.4 Sobel算子 ........................................................................................................... 13 3.5 Log算子 .............................................................................................................. 14 第四章 MATLAB简介 .................................................................................................. 15

4.1 基本功能 ............................................................................................................ 15 4.2 应用领域 ........................................................................................................... 16 第五章编程和调试 .......................................................................................................... 17

5.1 edge函数............................................................................................................. 17 5.2 边缘检测的编程实现 ....................................................................................... 17 第六章总结与体会 .......................................................................................................... 20 参考文献........................................................................................................................... 21

摘要

边缘是图像最基本的特征,包含图像中用于识别的有用信息,边 缘检测是数字图像处理中基础而又重要的内容。该课程设计具体考察 了 5种经典常用的边缘检测算子,并运用 Matlab进行图像处理结果比 较。梯度算子简单有效,LOG 算法和 Canny 边缘检测器能产生较细 的边缘。

边缘检测的目的是标识数字图像中灰度变化明显的点,而导函数 正好能反映图像灰度变化的显著程度,因而许多方法利用导数来检测 边缘。在分析其算法思想和流程的基础上,利用 MATLAB对这 5种 算法进行了仿真实验,分析了各自的性能和算法特点,比较边缘检测 效果并给出了各自的适用范围。

关键词:边缘检测;图像处理;MATLAB仿真

引言

边缘检测在图像处理系统中占有重要的作用,其效果直接影响着 后续图像处理效果的好坏。许多数字图像处理直接或间接地依靠边缘 检测算法的性能,并且在模式识别、机器人视觉、图像分割、特征提 取、图像压缩等方面都把边缘检测作为最基本的工具。但实际图像中 的边缘往往是各种类型的边缘以及它们模糊化后结果的组合,并且在 实际图像中存在着不同程度的噪声,各种类型的图像边缘检测算法不 断涌现。早在 1965 年就有人提出边缘检测算子,边缘检测的传统方 法包括 Kirsch,Prewitt,Sobel,Roberts,Robins,Mar-Hildreth 边缘 检测方法以及 Laplacian-Gaussian(LOG)算子方法和 Canny 最优算 子方法等。

本设计主要讨论其中 5种边缘检测算法。在图像处理的过程需要 大量的计算工作,我们利用MATLAB各种丰富的工具箱以及其强大的 计算功能可以更加方便有效的完成图像边缘的检测。并对这些方法进 行比较

第一章 绪论

1.1 课程设计选题的背景及意义

边缘是图像的最基本特征,它包含了用于识别的有用信息,为人 们描述或识别目标以及解释图像提供了一个重要的特征参数。物体的 边缘是以图像局部特性的不连续性为形式出现的。从本质上说,边缘 常常意味着一个区域的终结和另一个区域的开始,它普遍存在于目标 与背景、目标与目标、区域与区域、基元与基元之间,是图像分割所 依赖的重要特征,也是纹理特征的重要信息源和形状特征的基础。有 了图像边缘,我们就可以确定物体的几何尺寸并进一步对其测量,确 定物体在空间中的几何位置,确定物体的形状特征并对物体进行识 别。图像的边缘信息在图像分析和计算机视觉中都是十分重要的,是 图像识别中提取图像特征的一个重要属性。尽管边缘在数字图像处理 中的作用非常重要,但是到目前为止还没有关于边缘的精确且被广泛 承认的数学定义。这里将边缘定义为图像局部特性的不连续性,如灰 度的突变、颜色的突变、纹理结构的突变等。对于灰度图像,边缘是 指灰度的突变,是图像中灰度变化较剧烈的地方,也即我们通常所说 的信号发生奇异变化的地方。通常沿边缘走向的像素变化平缓,而垂 直于边缘走向的像素变化剧烈。图像的边缘有方向和幅度两个特性。 按照幅度的变化,边缘可粗略分为两种 :一种是阶跃型边缘,它两边 象素的灰度值有显著不同;另一种是屋顶状边缘,它位于灰度值从增

加到减少的变化的转折点。图 1.1给出这两种边缘的示意图。

(a) 阶跃型边缘 (b) 屋顶状边缘

图1.1 边缘类型

边缘检测就是要检测出图像中这种灰度的不连续性,同时确定它 们在图像中的精确位置,是在局部区域上针对“点”的一种运算,表 现为一种典型的信号处理问题。在图像处理、模式识别和计算机视觉 中,图像的边缘检测具有极其重要的意义。在大量的视觉模块计算中, 边缘检测通常是视觉计算的第一步,高层次计算机视觉处理的成功与 否极大地依赖于边缘检测算子的优越性能。

1.2 图像边缘检测的发展现状

图像的边缘检测有着很长的研究历史,学术思想非常活跃,新理 论、新方法不断涌现,一直是国内外图像处理领域研究的热点,目前 为止己经提出了许多方法和理论。至今提出的关于边缘检测的方法和 理论尚存在不足之处,在某些具体情况下仍然无法很好的检测出目标 物体的边缘,难以找到一种普遍适应性的边缘检测方法。因此,根据 具体的应用要求设计新的边缘检测方法,或对现有的方法进行改进以 得到满意的边缘检测结果,这些依然是研究的主流方向。

第二章 边缘检测的基本原理

图像边缘是图像最基本的特征,边缘在图像分析中起着重要的作 用。所谓边缘(edge)是指图像局部特征的不连续性。灰度或结构等 信息的突变称为边缘,例如:灰度级的突变、颜色的突变、纹理结构 的突变。边缘是一个区域的结束,也是另一个区域的开始,利用该特 征可以分割图像。

当人们看一个有边缘的物体时,首先感觉到的便是边缘,如图 2.1所示。

(a) 理想边缘模型 (b) 斜坡边缘模型

图2.1 灰度级跃变的边缘模型

一条理想的边缘应该具有如图 2.1(a) 所示模型的特性。每个像素 都处在灰度级跃变的一个垂直的台阶上(例如图形中所示的水平线通 过图像的灰度剖面图)。

而实际上,诸如图像采集系统的性能、采样频率和获得图像的照 明条件等因素的影响,得到的边缘往往是模糊的,边缘被模拟成具有 “斜坡面”的剖面,如图 2.1(b) 所示,在这个模型中不再有细线(宽 为一个像素的线条),而是出现了边缘的点包含斜坡中任意点的情况。

由此可以看到:模糊的边缘使边缘的“宽度”较大,面清晰的边缘使 边缘的宽度较小。

由于图像中物体的边缘是以图像的局部特征,像素的不连续性形 成出现的,同时也是图像局部亮度变化最显著的部分,同时物体的边 缘也是不同区域的分界线。图像的边缘是具有方向和幅度两个特性, 通常沿边缘的走向灰度变化平缓,垂直于边缘走向的像素点灰度变化 剧烈。而这种不连续性往往可以通过求导数方便地检测到,根据灰度 变化的特点,一般常用一阶导数和二阶导数来检测边缘。如图 2.2所 示,第一行是一些具有边缘的图像示例,第二行是沿图像水平方向的 一个剖面,第三行和第四行分别为剖面的一阶导数据和二阶导数。边 缘剖面有 3种:阶跃形、脉冲形和屋顶形。

(a) 正阶跃形 (b) 负阶跃形 (c) 脉冲形 (d) 屋顶形

图2.2 图像边缘的灰度变化与导数

阶跃形的边缘处于图像中两个不同灰度值的相邻区间之间,脉冲 形的边缘主要对应细条状的灰度值突变区域,而屋顶状的边缘上升沿 和下降沿都比较缓慢。由于采样的缘故,数字图像的边缘总有一些模

糊,所以这里垂直上下的边缘剖面都表示有一定的坡度。

在图 2.2(a) 中,对灰度剖面的一阶导数在图像由亮变暗的位置 处,有一个向上的阶跃而在其它位置为零。这表明可以用一阶导数来 检测边缘的存在,幅度峰值一般对应边缘位置。对灰度剖面的二阶导 数在一阶导数的阶跃上升区有一个向上的脉冲,而在一阶导数的阶跃 下降区有一个向下的脉冲。在这两个阶跃之间有一个过零点,它的位 置正对应原图像的边缘位置。所以可以用二阶导数的过零点来检测边 缘位置,而用二阶导数在过零点处的符号确定边缘像素在图像边缘的 暗区或亮区。同样分析图 2.2(b) 可以得到相同的结论。这这里是由亮 变暗,所以与图 2.2(a) 相比,剖面左右对换,一阶导数左右对换,二 阶导数据上下对换。

图 2.2(c) 中,脉冲形的剖面边缘与图 2.2(a) 的一阶导数形状相 同,所以图 2.2(c) 的一阶导数形状与图 2.2(a) 的二阶导数形状相同, 而它的 2个二阶导数过零点正好对应脉冲的上升沿和下降沿。通过检 测脉冲剖面的 2个二阶导数过零点就可以确定脉冲的范围。

同理,不难得出图 2.2(d) 屋顶形边缘,通过检测屋顶形边缘的剖 面的一阶导数过零点就可以确定屋顶位置。

图像的边缘有方向的幅度两个属性,沿边缘方向像素变化平缓, 垂直于边缘方向像素变化剧烈。边缘上的这种变化可以用微分算子检 测出来,通常用一阶导数或二阶导数来检测边缘,不同的是一阶导数 认为最大值对应边缘位置,而二阶导数以过零点对应边缘位置。实际

上,对于图像中的任意方向上的边缘都可以进行类似的分析。图像边 缘检测中对任意点的一阶导数可以利用该点梯度的幅度来获得,二阶 导数可以用拉普拉斯算子得到。

2.1 基于一阶导数的边缘检测

梯度是函数变化的一种度量,是图像对应二维函数的一阶导数。 而一幅图像可以看作是图像强度连续导数的取样点数组。梯度是一阶 导数的二维等价式,可定义为向量

有两个重要的性质和梯度有关,一是向量 G(x,y)的方向就是函数 f(x,y)增大时的最大变化率方向;二是梯度的幅值。

对于数字图像,偏导数可用差分来近似,则边缘往往在差分值最 大处,最小处或过零点发生。

在计算梯度时,计算空间同一位置处(x,y)的真实偏导数是至关重 要的。而采用上面公式计算的梯度近似值并不位于同一位置。所以常 常使用 2×2的一阶差分模板来计算位于内插点[x+1/2,y+1/2]的 x方向

和 y方向偏导数,此时 Gx和 Gy可表示为

2.2 基于二阶导的边缘检测

以上介绍的计算一阶导数的方法,把一阶导数大于阈值的点作为 边界点的方法,有可能会导致检测出的边缘点过多,数据存储量比较 大。一种在理论上更有效的方法是求梯度局部最大值对应的点,并认 为它们是边缘点。这种去除了一阶导数中的非局部最大值的方法,可 以检测出更精确的边缘,一阶导数的局部最大值对应着二阶导数的零 交叉点。这样,通过找图像灰度的二阶导数的零交叉点就能较好地找 到精确边缘点。从图 1可以看出,图像灰度二阶导数的过零点对应边 缘点。

图2.3 图像的二阶导数

第三章 边缘检测算子

数字图像中,边缘(edge)是指图像局部强度变化最显著的部分。 边缘主要存在于目标与目标、目标与背景、区域与区域(包括不同色 彩)之间。边缘检测常用到的有属于简单空域微分算法的 Roberts算 子、Sobel算子、Prewitt算子,拉普拉斯高斯(LOG)算法以及 Canny 边缘检测器等。边缘检测算法的基本步骤:①滤波:改善与噪声有关 的边缘检测器的性能;一般滤波器降导致了边缘的损失;增强边缘和 降低噪声之间需要折衷;②增强:将邻域强度值有显著变化的点突显 出来,边缘增强一般是通过计算梯度幅值来完成的;③检测:最简单 的边缘检测判据是梯度幅值阀值;④定位:边缘的位置和方位在子像 素分辨率上估计。

3.1 Canny算子

Canny边缘检测利用高斯函数的一阶微分,在噪声抑制和边缘检 测之间寻求较好的平衡,其表达式近似于高斯函数的一阶导数。

Canny算子是一阶算子。其方法的实质是用 1个准高斯函数作平 滑运算 fs=f(x,y)×G(x,y),然后以带方向的一阶微分算子定位导数最大 值。平滑后 fs(x,y)的梯度可以使用 2×2一阶有限差分近似式:

P[i,j]≈(fs[i,j+1]-fs[i,j]+fs[i+1,j+1]-fs[i+1,j])/2 Q[i,j]≈(fs[i,j]-fs[i+1,j]+fs[i,j+1]-fs[i+1,j+1])/2

在这个 2×2正方形内求有限差分的均值,便于在图像中的同一点 计算 x和 y的偏导数梯度。幅值和方向角可用直角坐标到极坐标的坐 标转化来计算:

M[i,j]反映了图像的边缘强度;? [i,j]反映了边缘的方向。使得 M[i,j] 取得局部最大值的方向角? [i,j],就反映了边缘的方向。Canny 算子也 可用高斯函数的梯度来近似,在理论上很接近 4 个指数函数的线性组 合形成的最佳边缘算子。在实际工作应用中编程较为复杂且运算较 慢。Canny边缘检测算子对受加性噪声影响的边缘检测是最优的。

3.2 Roberts梯度算子

对阶跃状边缘,在边缘点处一阶导数有极值,因此可计算每个像 素处的梯度来检测边缘点。对于图像 g(x,y),在(x,y)处的梯 度定义为 grad(x,y)。梯度是一矢量,大小代表边缘的强度,方向 与边缘走向垂直。梯度算子仅用最近邻像素的灰度计算,对噪声敏感, 无法抑制噪声的影响。

Roberts 边缘检测算子根据任意一对垂直方向上的差分可用来计 算剃度的原理;采用对角线方向相临两像素之差,即:

△x f=f(i,j)-f(i+1,j+1)(1)

△y f=f(i,j)-f(i+1,j+1)(2)

有了△x f,△y f之后,可以根据下式计算出 Roberts的剃度幅度值:

它们的卷职算子为:

适当选取门限 TH,并作如下判断:如果 R(i,j)>TH,则(i,j)为阶跃状边 缘点,{R(i,j)}为边缘图像。

3.3 Prewitt算子

Prewitt 从加大边缘检测算子的模板大小出发,由 2×2 扩大到 3 ×3来计算差分算子,采用 Prewitt算子不仅能检测边缘点,而且能抑 制噪声的影响。

这些算子样板由理想的边缘图像构成。依次用边缘样板去检测图 像,与被检测区域最为相似的样板给出最大值。用这个最大值作为算 子的输出值 P(i,j),这样可将边缘像素检测出来。定义 Prewitt边缘检测 算子模板如下:

8个算子样板所对应的边缘方向分别是 8个等份方向的。 适当选取门限 TH,并作如下判断:如果 P(i,j)>TH,则(i,j)为阶跃状 边缘点。{P(i,j)}为边缘图像。

3.4 Sobel算子

Sobel 在 Pre-witt 算子的基础上,对 4-邻域采用带权的方法计算 差分,该算子不仅能检测边缘点,且能进一步抑制噪声的影响,但检 测的边缘较宽。

Sobel算法是基于一阶导数的边缘检测,通过逼近导数来找边缘, 其边缘点存在于图像梯度最大值处。Sobel 算子中用到了两个卷积模 板(一个水平算子,一个垂直算子)。

它是一种奇数大小(3×3)模板下的全方向微分算子,对检测点的 上下左右进一步加权。Sobel 算子的思想是邻域的像素对当前像素产 生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子 结果产生的影响也不同。我们用 Sobel来检测边缘的时候,先分别用 上述的模板对图像进行卷积,得到的是两个矩阵,在不考虑边界的情 形下也是和原图像同样大小的 bx,by,它们分别表示图像 a 中相同位 置处的两个偏导数。然后把 bx,by对应位置两个数平方后相加得到一

个新的矩阵 b,b表示图像 a 中各个像素的灰度的梯度值。最后通过 阈值处理和细化处理得到边缘图像。在阈值不为空的情况下,边缘存 在于梯度幅值大于阈值平方的点上。

3.5 Log算子

Log算法是基于二阶导数的边缘检测,这种方法是将高斯平滑滤 波器和拉普拉斯锐化滤波器结合了起来,先平滑掉噪声,再进行边缘 检测。它是对图像进行滤波和微分的过程,是利用旋转对称的 Log 模板与图像做卷积,确定滤波器输出的零交叉位置。常用的 Log算子 是 5×5的模板,如下所示

Log算法的特点是图像首先与高斯滤波器进行卷积,这样在平滑 图像的同时降低了噪声,孤立的点噪声和较小的结构组织将被滤除。 由于平滑会导致边缘的延伸,因此边缘检测只考虑那些具有局部梯度 最大值的点为边缘点。正确地选用 Log 算子中的尺度参数是很重要 的。直观上说,大的对应于更大的平滑范围,它有利于抑制噪声,但 不利于定位精度;值小时,边缘定位精度高,但边缘细节变化多,信 噪比低。因此应根据噪声水平和边缘定位精度的要求来决定的值。

第四章 MATLAB简介

MATLAB 是矩阵实验室( Matrix Laboratory)的简称,是美国 MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、 数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括 MATLAB和 Simulink两大部分。

4.1基本功能

MATLAB 和 Mathematica 、Maple 并称为三大数学软件。它 在数学类科技应用软件中在数值计算方面首屈一指。 MATLAB 可 以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、 连 接其他编程语言的程序等,主要应用于工程计算、控制设计、 信号处理与通讯、图像处理、信号检测、金融建模设计与分析等 领域。

MATLAB 的基本数据单位是矩阵,它的指令表达式与数学、 工程中常用的形式十分相似,故用 MATLAB 来解算问题要比用 C,FORTRAN 等语言完成相同的事情简捷得多,并且 mathwork 也吸收了像 Maple 等软件的优点 ,使 MATLAB 成为一个强大的数 学软件。在新的版本中也加入了对 C,FORTRAN,C++ ,JAVA 的支持。可以直接调用,用户也可以将自己编写的实用程序导入到 MATLAB 函数库中方便自己以后调用,此外许多的 MATLAB 爱好者

都编写了一些经典的程序,用户可以直接进行下载就可以用。 4.2应用领域

MATLAB 产品族可以用来进行以下各种工作: ● 数值分析 ● 数值和符号计算 ● 工程与科学绘图 ● 控制系统的设计与仿真 ● 数字图像处理技术 ● 数字信号处理技术 ● 通讯系统设计与仿真 ● 财务与金融工程

MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控 制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应 用领域。附加的工具箱(单独提供的专用 MATLAB 函数集)扩展了 MATLAB 环境,以解决这些应用领域内特定类型的问题。

第五章 编程和调试

5.1 edge函数

在 MATLAB 图像处理工具箱中提供了专门的边缘检测 edge 函 数,由 edge函数可以实现各算子对边缘的检测,其调用格式如下:

BW=edge(I,’method’) BW=edge(I,’method’,thresh) Bw=edge(I,’method’,thresh,direction) [BW,thresh]=edge(I,’method’,…)

其中,I是输入图像。edge函数对灰度图像 I进行边缘检测,返 回与 I同样大的二值图像 BW;其中 1 表示边缘,表示非边缘。I可 以是 uint8型、uint16型或 double型;BW是 uint8型。

method是表示选用的方法(算子)类型,可以选择的 method有 Sobel、Prewitt、Roberts、Log、Canny等。

可选的参数有 thresh(阈值)、sigma(方差)和 direction(方向)。

5.2 边缘检测的编程实现

利用 edge函数,分别采用 Sobel、Roberts、Prewitt、Log、Canny 5 种不同的边缘检测算子编程实现对图 5.1 所示的原始图像进行边缘 提取。

图5.1 原始灰度图像

程序代码如下:

%MATLAB调用 edge函数实现各算子进行边缘检测程序 I=imread('tire.tif');%读入灰度图像并显示 figure(1),imshow(I);

BW1=edge(I,'sobel',0.1);%用 sobel算子进行边缘检测,判断阈值为 0.1 figure(2),imshow(BW1)

BW2=edge(I,'roberts',0.1);%用 roberts算子进行边缘检测,判断阈值为 0.1 figure(3),imshow(BW2)

BW3=edge(I,'prewitt',0.1);%用 prewitt算子进行边缘检测,判断阈值为 0.1 figure(4),imshow(BW3)

BW4=edge(I,'log',0.01);%用 log算子进行边缘检测,判断阈值为 0.01 figure(5),imshow(BW4)

BW5=edge(I,'canny',0.1);%用 canny算子进行边缘检测,判断阈值为 0.1 figure(6),imshow(BW5)

检测效果如图 5.2 所示,从图中可以看出,在采用一阶微分进行 边缘检测时,除了微分算子对边缘检测结果有影响外,阈值选择也对 检测有重要影响。比较几种边缘检测结果,可以看到Canny算子提取 边缘较完整,其边缘连续性较好,效果优于其它算子。其次是Prewitt 算子,其边缘比较完整。再次就是Sobel算子。

(a)原始灰度图像 (b)Sobel算子检测效果 (c)Roberts算子检测效果

(d)Prewitt算了检测效果 (e)Log算子检测效果 (f)Canny算子检测效果

图5.2 采用各种边缘检测算子得到的边缘图像效果

本文来源:https://www.bwwdw.com/article/x716.html

Top