图像分割方法之边缘检测及MATLAB的实现
张庭 2011301130001 地信1
摘要:图像分割是图像处理中的一项关键技术,自20世纪70年代起一直受到人们的高度重
视,至今已提出上千种分割算法,但因尚无通用的分割理论,现提出的分割算法大都是针对
具体问题的,并没有一种适合所有图像的通用分割算法。最近几年又出现了许多新思路、新
方法或改进算法F对一些经典方法和新出现的方法作了概述,并将图像分割方法分为阈值分
割方法、区域提取方法、边缘检测方法和结合特定理论工具的分割方法4类。本文主要介绍
了图像分割的基本理论和常用方法,并借助MATLAB对几种边缘检测算子进行了详细的分析比
较,指出了不同算子的适用情况。
关键词:图像分割;边缘检测;算子;MATLAB。
1、 图像分割理论概述
图像分割是数字图像处理技术中的一个重要的部分。图像分割就是按一定的规则将图像
划分成若干个有意义或者感兴趣的区域的过程,各个区域能代表一个对象(目标或者目标的
一部分)。通过图像分割,图像中有意义的特征部分(如边缘,区域等)被提取出来。其基
础是像素间的相似性和跳变性。图像分割技术主要分为四大类:区域分割,阈值分割,差分
法运边缘检测和结合特定理论工具的分割方法。下面分别对前三类分割技术作简要介绍,并
重点对边缘检测技术的研究现状以及几种常用算子进行比较分析,通过MATb墟数字图像处理
工具编程实现基于各算子的边缘检测。
2、区域特性的图像分割
图像分割的最终目的是把图像分成若干区域,根据区域的形成过程不同,分割方法分为
两种:区域生长法和区域分裂合并法。
区域生长法的主要过程是:从一个已知种子点开始,依次检测其邻近点,根据检测标准,
加入与其特性相似的邻近点形成一个区域,在各个方向上生长区域,当新的点被合并后再用
新的区域重复这一过程,直到没有可接受的邻近点时生长过程终止;对于有多个目标区域的
图像,可在之前已划分的区域外再选取一种子点,按同样过程生成新的区域;最终将图像分
割成若干个目标区域。
区域分裂合并方法利用了图像数据的金字塔或四叉树数据结构的层次概念,将图像划分
成一组任意不相交的初始区域,根据给定的均匀性检测准则进行分裂和合并这些区域,逐步
改善区域划分的性能,直至最后将图像分成数量最少的均匀区域为止。
3、阈值的图像分割
阈值分割是一种常用的图像分割方法,它主要利用图像中要提取的目标物与其背景在灰
度特性上的差异,通过设置合适的灰度门限(阈值),将图像的灰度划分为两个或多个灰度区
间,以确定有意义的区域或分割物体的边界。阈值分割常用于图像的二值化处理,即选择一
个合适的阅值,通过判断图像中的每一个像素点的特征属性是否满足阈值的要求来确定图像
中该像素点是属于目标区域还是属于背景区域,从而将图像转化成二值图像。
在用阈值法对图像进行分割时,阈值的取值不同,对于处理结果的影响很大。阈值过大
或过小,都会导致分割的误差增大。根据阈值选取的方法不同,阈值分割可分为直方图阈值
分割,类间方差阈值分割,二维最大熵阈值分割和模糊阈值分割。
4、边缘检测的图像分割方法的研究现状
根据检测边缘采用方式的不同,边缘检测方法大致包括以下几类:基于局部图像函数的
方法、多尺度方法、图像滤波法、基于反应—扩散方程的方法、多分辨分法、基于边界曲线
拟合方法、状态空间搜索法、动态规划法、边界跟踪法、哈夫变换法等。
如宋焕生等人提出了多尺度脊边缘方法,该方法利用 Mallat 算法,对图像进行二进度
小波分解,然后计算出在二进尺度空间的多尺度脊边缘及强度,最后通过脊边缘跟踪、滤波
和小波反变换,得到分割结果。
张静等人提出了行扫描空间带通滤波法,是在总结前人理论和实验结果的基础上提出的
一种边缘提取新方法,对电视图像的自动跟踪识别有很好的效果!
林峰提出了基于人眼边缘的图像分割方法,利用 IOSDATA 分类算法分割图像,再对所得
到的边缘数据作曲线拟合!该方法对直方图上有明显峰值特性的图像边缘的提取非常有利!
殷德奎等人提出了基于多分辨分析的多模板边缘提取方法,根据图像边缘灰度阶跃噪声
在不同分辨率层次上表现出来的相关性质,合理地确定检测规划并推断出边缘,此方法适用
于复杂噪声环境和宽分割阈值下的边缘定位!
张斌、朱正中等提出了基于边缘轮廓信息的多源遥感图像分割,该方法有效地利用了多
源遥感图像中共有的区域结构信息,将特征匹配和最小二乘影像匹配相结合,具有较好的普
适性,且运算快速、抗噪性能好,可实现快速、精确的特征。边缘轮廓信息,匹配,而且利
用特征匹配所得的精确控制块对,可在最小二乘误差准则下实现实测图与基准图的影像匹配
定位,用于海岸线、河流、湖泊等大尺度地理标志的场景或地区的图像得到很好的效果!
王宇生等人提出了基于积分变换的边缘检测算法,该方法引入了灰度尺度和空间尺度,
将图像变为表示象素点相互吸引的向量场,从而将边缘检测问题转化为在向量场中寻找相分
离向量的问题!
梁毅军等人提出了用 BD 模型检测边缘的方法,证明了 BD 模型是 GD 模型的快速算法,
并且取得的效果和用 GD 模型取得的效果是一样的!杨恒等人提出了基于图像信息测度(EIM)
的多尺度边缘检测方法,该方法利用 EIM 能自适应地调整多尺度边缘检测中的滤波度参数,
克服了传统图像信息定义的缺陷,使该方法具有较好的抗噪声和检测结果!
戴青云提出了数学形态学在图像分割中的应用,利用数学形态学这种非线性滤波方法来
抑制噪声、特征提取、边缘检测等!周凌翔等人提出了结合信噪比与定位精度的新的边缘检
测准则,导出了满足最佳性质的算子,利用该算子进行边缘检测,取得了较好的效果!
GALAMBOSC 等人提出了哈夫变换的改进算法,利用角度信息来控制选择和分配像素在
同一直线上的过程,使分割效果优于标准哈夫变换的同时,大大减少了计算量,同时受噪声
和曲线间断的影响较小。
5、边缘检测的图像分割及算子分析
边缘是指图像中像素灰度值或色彩等属性有突变的像素的集合,它存在于目标与背景、
目标与目标之间,包含了丰富的图像信息。边缘检测,简单的说就是提取数字图像的边缘轮
廓。对一幅图像,人眼可以轻易的分辨出大致的轮廓。然而,计算机做不到。边缘检测技术
就是对数字图像进行数据分析,通过一阶导数,二阶导数或者其他的约束条件来得到边缘点。
对图像进行微分运算,可求得灰度的变化率,加强图像中高频分量的作用,从而使图像中的
边缘更清晰。实际数字图像图像处理中,常用差分近似微分,通过小区域模板卷积近似实现
微分运算,这是利用各种微分算子进行边缘检测的基本原理。下面以梯度算子为例对边缘检
测原理进行具体分析。
对于图像函数f(x,y),它在像素点(x,y)处的梯度是一个矢量,定义为:
梯度有两个重要特性:
(1) 梯度的方向为函数f(x,y)最大变化率的方向;
(2) 梯度的幅度可表示为:
用差分近似偏微分,G[f(i,j)]可近似表示为:
进一步近似简化得:
这种梯度法又称之为水平垂直差分法。其中各像素点的相对位置如图1所示,与之对应
的模版如图2所示,Gx、Gy分别对应其中水平方向和垂直方向的模板,两个模板共同构成一
个梯度算子。
由梯度的计算式可知,在图像中灰度变化较大的区域,对应的梯度幅度较大,变化平缓
的区域,对应的梯度幅度较小。图像中的边缘即对应梯度值较大的区域。因此,根据梯度的
幅度可以检测出图像中的边缘。
常用的边缘检测算子还有Prewitt算子,Sobel算子,Canny算子,LOG算子等,其中LOG
算子为二阶微分算子,其它算子为一阶微分算子。各种微分算子的模板大小和其中的元素值
不相同,但基本原理都同上面相同。下面对上述几种算子分别作介绍,并基于各种算子对同
一图像利用MATLAB进行边缘检测,比较分析。
5.1 Roberts 算子
Roberts 算子采用交叉分差的方法近似计算梯度,因此也称为 Roberts 交叉算子。它对
应的 2*2 模板如图三所示:
其梯度计算公式可近似表示为:
Roberts 算子边缘定位准确,但在加强边缘的同时也使噪声得到增强,因而对噪声敏感。
5.2 Prewitt 算子和 Sobel 算子
Prewitt 算子和 Sobel 算子均由两个 3*3 的模板组成,如图 4 和图 5 所示。与 Roberts
算子不同,这两种算子采用被检测点两侧(行或列)像素的差分来近似微分,引入平均因素,
对图像中的随机噪声有一定的抑制作用。
5.3 LOG算子
LOG算子,即拉普拉斯一高斯算子。LOG算子先通过高斯滤波器对图像进行平滑滤波,再
对图像进行拉普拉斯运算,最后通过检测过零点来确定图像边缘。
5.4 Canny算子
Canny的研究思想主要是把检测像素点转换为检测单位函数极大值,他指出一个好的边
缘检测算子应有的三个特性:检测性噪比高,边缘定位精度高,单边响应效果好。Canny算
子基于Laplace滤波,采用两个阈值,对强边和弱边进行检测。从实验结果可以看出,相对
其它边缘检测算子,Canny算子对像素变化更加敏感,能更好地捕捉图像中的微弱边缘。
6、各种边缘检测算子的MATlAB实现与比较分析
6.1各种边缘检测算子的MATlAB实现
利用MATLAB平台进行图像处理中的边缘检测,主要是利用MATLAB软件工具箱中所提供的
edge函数,利用以上算子来检测边缘。Edge函数提供许多微分算子模板,对于某些模板可以
指定其是水平边缘还是对垂直边缘(或者两者都有)敏感,即主要检测水平还是垂直边缘。
edge函数在检测边缘时可以指定一个灰度阈值,只有满足这个阈值条件的点才能视为边界点。
Edge函数的基本调用格式是:BW=edge(I,’type’,parmeter,…),其中,I表示输入图像,type
表示使用的算子类型,parmeter则是与具体算子有关的参数。
另外,MATLAB在用边缘检测是,还常用到的代码命令有:imread(‘…’),读取图片,’…’
表示图片所在的路径;imshow(),显示图片;subplot(a,b,c),用于见图片窗口分割成a行b
列,并指定第c个窗口为当前窗口;figure,另开启一个新窗口,等等。
图6为利用MATLAB对jay灰度图像运用各种微分算子进行边缘检测的效果图。
图6 各种算子边缘检测效果
主要程序代码为:
6.2 各种边缘检测算子的比较分析
在边缘检测中,边缘定位能力和噪声抑制能力是一对矛盾体,有的算子边缘检测能力比
较强,而有的抗噪能力好。边缘检测算子参数的选择也直接影响到边缘定位能力和噪声抑制
能力,每种算法都有各自的优缺点。虽然,在边缘检测领域,我们已经取得了相当的研究成
绩,取得了许多比较成熟的算法。但是,至今没有一种算法是可以对任何图片处理都适用的。
所以,在处理具体问题时,我们就必须分清楚情况,对不同的数字图像采取不同的边缘检测
算子。这就要求我们能过清楚的认识到上诉几种边缘算子的特征。
1) 在去噪能力上:Roberts算子没有对图像先进行平滑去噪处理,去噪能力较差;Sobel算
子和Prowitt算子都是对图像先做加权平滑处理,然后在做微分处理,对噪声具有一定
的抑制能力,但是这种算法对噪声的抑制不是很彻底;首先用高斯函数对图像做平滑滤
波处理,然后才使用拉普拉斯算子检测边缘,这种算法对噪声的滤波作用较前面几种算
法强了很多。
2) 在边缘的连续性方面:由于噪声的影响,检测的边缘不够连续;Sobel算子和Prowitt算
子先经过了加权的平滑处理,可以去除部分噪声的影响,边缘的连续性上较Roberts算
子强一些;LOG算子对灰度值的变化比较敏感,因此,这种算法可以检测到相对较弱的
边缘。
3) 在边缘的定位能力方面:Roberts算子利用局部查分算子寻找边缘,边缘定位精度较高,
但由于没有经过平滑去噪处理,由于噪声的干扰,容易丢失一部分边缘;Sobel算子和
Prowitt算子这两个算子的边缘定位效果不错,但检测出的边缘容易出现多像素宽度;
LOG算子克服了拉普拉斯算子抗噪声能力比较差的缺点,但是在抑制噪声的同时也可能
将原有的比较尖锐的边缘也平滑掉了,造成这些尖锐边缘无法被检测到。
4) Canny算子虽然是基于最优化思维推出的边缘检测算子,但实际效果并不一定最优,原
因在于理论和实际有许多不一致的地方。该算子同样采用高斯函数对图像进行平滑处理,
因此具有较强的抑制噪声能力;同样该算子也会将一些高频边缘平滑掉,造成边缘丢失。
Canny算子之后采用了双阈值算法检测和连接边缘,它采用的多尺度检测和方向性搜索
较LOG算子好。
总的可以分析出,Roberts算子算法最简单,但对图像中的噪声敏感,边缘定位精度不
如其它算子高,有些强边亦不能很好地检测出来;Prewin算子和Sobel算子相对Robets算子
而言,对强边的检测效果较好,对弱边则反应较迟钝;Canny算子由于采用双阈值分割,能
较好地检测出图像中的强边和弱边,且边缘点的连续性也较好;LOG算子在微分前先对图像
滤波,能较好地抑制噪声干扰,LoG算子采用过零检测,对于图像中对弱边也较敏感,但边
缘单边响应不如Canny算子好,边缘连续性也较Canny算子差。
7、未来工作展望
以上的这几种边缘检测的方法基本都是最经典的算子。各种算子的特点不同,相应边缘
检测也各有优劣,不可简单地说孰好孰坏。实际应用中,可根据不同场合选择不同的微分算
子对图像进行分割。例如,在只需大致识别图像中目标物轮廓,可忽略图像内部细节时,选
用Roberts算子、Prewitt算子或Sobel算子,就能达要求,且计算量相对较小。需对图像作
较全面边缘检测时,Canny算子和LOG算子都是不错的选择。在提取图像轮廓时,Canny算子
就相对较有优势。总之,根据需求合理选则图像分割方法是十分必要的。
由于MATLAB不能自动迅速的读取图片,得通过人工进行,而且MATLAB不能将编好的程序
代码生成相应性程序,只能在MATLAB平台上进行模拟仿真,这给边缘检测技术的应用带来了
局限性。
以后,我们要解决好上诉这些问题,通过在MATLAB上进行仿真测试,寻找更好的能达更
高要求的边缘检测算子。并且,可以用C语言、C++语音等高级编程语言,来进行程序的设计
编写。重点要放在如何讲边缘检测算子做成一个可以集图像采集,平滑处理分析比较等多功