基于Matab的数字图像边缘检测算法研究
专业:自动化
班级:2006级4班 姓名:
沈阳大学毕业设计(论文)
目 录
引言 ................................................................................................................................................ 3 1 基于一阶微分的边缘检测算法 ..................................................................................... 7
1.1 1.2 1.3
Roberts算子 ..................................................................................................................... 7 Prewitt算子 ...................................................................................................................... 8 Kirsch算子 ....................................................................................................................... 8
2 基于二阶微分的边缘检测算法 ................................................................................... 10
2.1 2.2 2.3
Laplacian算子 ................................................................................................................ 10 LoG算子 ........................................................................................................................ 12 Canny算子 ..................................................................................................................... 14
3 最佳Sobel边缘检测方法 .............................................................................................. 18
3.1 3.2 3.3
Sobel图像边缘检测方法 ............................................................................................... 18 改进的Sobel边缘检测方法 .......................................................................................... 18 Sobel算子的最佳阈值选取 ........................................................................................... 19
4 基于Matlab的实验结果与分析 .................................................................................. 22
4.1 4.2 4.3 4.4
Matlab简介 .................................................................................................................... 22 一阶微分算法的实验结果与分析 ................................................................................. 25 二阶微分算法的实验结果与分析 ................................................................................. 30 最佳Sobel边缘检测算法的实验结果与分析 .............................................................. 35
结论 .............................................................................................................................................. 40 致谢 .............................................................................................................................................. 42 参考文献 .................................................................................................................................... 43 附录 源程序清单 .................................................................................................................. 45
沈阳大学毕业设计(论文)
摘 要
在实际图像处理问题中,图像的边缘作为图像的一种基本特征,经常被应用到较高层次的图像应用中去。它在图像识别,图像分割,图像增强以及图像压缩等的领域中有较为广泛的应用,也是它们的基础。
边缘检测是图像处理与分析中最基础的内容之一,也是至今仍没有得到圆满解决的一类问题。图像的边缘包含了图像的位置、轮廓等特征,是图像的基本特征之一,广泛地应用于特征描述、图像分割、图像增强、图像复原、模式识别、图像压缩等图像分析和处理中。因此,图像边缘和轮廓特征的检测与提取方法,一直是图像处理与分析技术中的研究热点,新理论、新方法不断涌现。
本文研究了一些边缘检测算法,包括传统的Roberts、Sobel、Prewitt、LoG、Canny、Kirsch等算法。经典边缘检测方法的抗噪声性能都较差,解决该问题的主要方法就是设置阈值,把得到的图像高频部分与阈值相比较以达到去噪的目的,所以阈值的选取显得尤为重要。传统方法中的阈值都是通过实验确定的,没有统一的阈值选取方法。本文利用边缘的最大后验概率估计,介绍一种新的边缘估计方法,从理论上说明了怎样选取最佳阈值。文章中关于这些方法都有较详细的介绍,以及算法的实现步骤。对算法均进行了仿真实验。
论文的主要目的是进行图像边缘检测算法性能比较的研究。实验结果表明,本文的算法比较可以为图像处理的后续环节提供一些有益的参考。 关键词:
边缘检测; 图像处理; Matlab; Sobel; 检测算法
沈阳大学毕业设计(论文) No 1
Abstract
In image processing, as a basic characteristic, the edge of the image, which is widely used in the recognition, segmentation, intensification and compress of the image, is often applied to high-level domain.
Edge detection is one of the most fundamentals in image processing and analyzing, which is still unsolved. Image’s edges include image’s features such as position and outline, which belong to the fundamental features. Edge detection is widely used in image analysis and processing such as feature description, image segmentation, image enhancement, pattern recognition and image compression etc, so Edge Detection and extract of outline figure are the research hotspot in the technology of image processing and analysis all, on which the new theory and methods are put forward constantly.
Some edge detection algorithms are researched, including Roberts, Sobel, Prewitt, LoG, Canny, Kirsch etc. The classic edge detection methods have some drawbacks in image denoising. The main idea of resolving this problem is to set a threshold, then compare the threshold with the high-frequency components of an image to remove the noise.The choice of the threshold is the key of image denoising. The threshold of traditional methods is obtained by experiments, and there is no general method to determine it. A new method of edge estimation by the Maximum a Posteriori (MAP) is presented in this paper. It proves how to choose the optimal threshold in theory. These algorithms are introduced in detail, and the steps of algorithm realization are introduce too.The algorithm is tested by simulation.
The main aim of the paper is studying Performance Evaluation in edge detection algorithms, and the detection results are compared. The experiments results show that the algorithms can be a useful reference of latter parts of image processing.
Keywords:
edge detection; image processing; Matlab; Sobel; detection algorithm
沈阳大学毕业设计(论文) No 2
引 言
图像边缘是图像最基本的特征之一,往往携带着一幅图像的大部分信息。而边缘存在于图像的不规则结构和不平稳现象中,也即存在于信号的突变点处,这些点给出了图像轮廓的位置,这些轮廓常常是在图像处理时所需要的非常重要的一些特征条件,这就需要对一幅图像检测并提取出它的边缘。而边缘检测算法则是图像处理问题中经典技术难题之一,它的解决对于进行高层次的特征描述、识别和理解等有着重大的影响;又由于边缘检测在许多方面都有着非常重要的使用价值,所以人们一直在致力于研究和解决如何构造出具有良好性质及好的效果的边缘检测算子的问题[1]。
在通常情况下,可以将信号中的奇异点和突交点认为是图像中的边缘点,其附近灰度的变化情况可从它相邻像素灰度分布的梯度来反映。根据这一特点,提出了多种边缘检测算子:如Robert算子、Sobel算子、Prewitt算子、Laplacian算子等。这些方法多是以待处理像素为中心的邻域作为进行灰度分析的基础,实现对图像边缘的提取并已经取得了较好的处理效果。但这类方法同时也存在有边缘像素宽、噪声干扰较严重等缺点,即使采用一些辅助的方法加以去噪,也相应的会带来边缘模糊等难以克服的缺陷。解决该问题的丰要方法就是设置阈值,把得到的图像高频部分与阈值相比较以达到去噪的目的,所以阈值的选取显得尤为重要[2]。传统方法中的阈值都是通过实验确定的,没有统一的阈值选取方法。本文利用边缘的最大后验概率估计,介绍一种新的边缘估计方法,从理论上说明了怎样选取最佳阈值。
图像的大部分主要信息都存在于图像的边缘中,主要表现为图像局部特征的不连续性,是图像中灰度变化比较剧烈的地方,即通常所说的信号发生
沈阳大学毕业设计(论文) No 3
奇异变化的地方。奇异信号沿边缘走向的灰度变化剧烈,通常将边缘划分为阶跃状和屋顶状两种类型如图1所示。阶跃边缘中两边的灰度值有明显的变化;而屋顶状边缘位于灰度增加与减少的交界处。在数学上可利用灰度的导数来刻画边缘点的变化,对阶跃边缘、屋顶状边缘分别求其一阶、二阶导数[3]。
图1 阶跃边缘和屋顶状边缘处一阶和二阶导数变化规律
(其中第一排为理想信号,第二排对应实际信号)
对一个边缘来说,有可能同时具有阶跃和线条边缘特性。例如在一个表面上,由一个平面变化到法线方向不同的另一个平面就会产生阶跃边缘;如果这一表面具有镜面反射特性且两平面形成的棱角比较圆滑,则当棱角圆滑表面的法线经过镜面反射角时,由于镜面反射分量,在棱角圆滑表面上会产生明亮光条,这样的边缘看起来像在阶跃边缘上叠加了一个线条边缘.由于边缘可能与场景中物体的重要特征对应,所以它是很重要的图像特征。比如,一个物体的轮廓通常产生阶跃边缘,因为物体的图像强度不同于背景的图像
沈阳大学毕业设计(论文) No 4
强度。
论文选题来源于在图像工程中占有重要的地位和作用的实际应用课题。所谓图像工程学科是指将数学、光学等基础学科的原理,结合在图像应用中积累的技术经验而发展起来的学科。图像工程的内容非常丰富,根据抽象程度和研究方法等的不同分为三个层次:图像处理,图像分析和图像理解。如图2所示,在图中,图像分割处于图像分析与图像处理之间,其含义是,图像分割是从图像处理进到图像分析的关键步骤,也是进一步理解图像的基础。
图像工程 图像处理 图像分割
图2 图像分割在图像工程中的地位和作用
图像分析 图像理解 图像分割对特征有重要影响。图像分割及基于分割的目标表达、特征提取和参数测量等将原始图像转化为更抽象更紧凑的形式,使得更高层的图像分析和理解成为可能。而边缘检测是图像分割的核心内容,所以边缘检测在图像工程中占有重要的地位和作用。因此边缘检测的研究一直是图像技术研究中热点和焦点,而且人们对其的关注和投入不断提高。
本文的主要工作如下:
(1)本文对图像边缘检测作了一个概要的说明,并说明了进行图像边缘检测的重要意义。
(2)系统的介绍了比较经典的基于一阶微分的图像边缘检测算子及其具体的实现原理,为介绍基于二阶微分的图像边缘检测算子做铺垫,以便于大家
沈阳大学毕业设计(论文) No 5
的理解。
(3)系统介绍了比较经典的基于二阶微分的图像边缘检测算子及其具体的实现原理。
(4)介绍了一种基于Sobel算子的改进型算法,此方法的最大优点是:在去噪的同时有效地保留了图像的真实边缘,即给出了边缘检测的最佳结果。
(5)对上述的算法用Matlab为工具进行仿真,并对其仿真结果进行分析,分析各种算法的特点。
沈阳大学毕业设计(论文) No 6
1 基于一阶微分的边缘检测算法
1.1 Roberts算子
由Roberts提出的算子是一种利用局部差分算子寻找边缘的算子,对于边界陡峭且噪比较小的图像检测效果比较好,它在2×2邻域上计算对角导数,
Gi,j=fi,jfi1,j1fi1,jfi,j1 22(1-1)
G[i,j]又称为Roberts交叉算子。在实际应用中,为简化运算,用梯度函数的Roberts绝对值来近似:
Gi,j=fi,jfi1,j1fi1,jfi,j1 (1-2)
用卷积模板,上式变成:
Gi,jGxGy (1-3)
其中Gx和Gy由下面图3所示的模板计算:
图3 Robert边缘检测算子的模板
Roberts算子是该点连续梯度的近似值,而不是所预期的点处的近似值。由上面两个卷积算子对图像运算后,代入(1-3)式,可求得图像的梯度幅度值G[i,j],然后选取适当的门限TH,作如下判断:G[i,j]>TH,[i,j]为阶跃状边缘点,{G[i,j]}为一个二值图像,也就是图像的边缘。由于利用局部差分检测比较陡峭的边缘,但对于噪声比较敏感,经常会出现孤立点,于是人们又提出了Prewitt算子[4]。
沈阳大学毕业设计(论文) No 7
1.2 Prewitt算子
为在检测边缘的同时减少噪声的影响,Prewitt算子从加大边缘检测算子出发。由2×2扩大到3×3来计算差分算子,所以其卷积模板为图4所示:
图4 Prewitt边缘检测算子的模板
在图像中的每个像素位置都用这2个模板做卷积,Prewitt算子将方向差分运算与局部平均结合起来,表达式如下:
fxfx1,y1fx,y1fx1,y1fx1,y1fx,y1fx1,y1(1-4) fyfx1,y1fx1,yfx1,y1fx1,y1fx1,yfx1,y1 (1-5)
根据(1-4)和(1-5)式可以计算Prewitt梯度,选取适当的阈值T,对梯度图像二值化,得到一幅边缘二值图像。采用Prewitt算子不仅能检测边缘点,而且还能抵制噪声的影响[5]。
1.3 Kirsch算子
1971年,R.Kirsch提出了一种能检测边缘方向的Kirsch算子新方法:它使用了8个模板来确定梯度幅度值和梯度的方向。Kirsch算子是用一组模板对图像中同一像素求卷积,选取其中最大的值作为边缘强度,而将与之对应的方向作为边缘方向[6]。常用的八方向Kirsch模板各方向间的夹角为45度,模板如图5所示:
沈阳大学毕业设计(论文) No 8
图5 Kirsch边缘检测算子的模板
上述算子都是计算一阶导数的边缘检测器。其基本思想都是:如果所求的一阶导数高于某一阈值,则确定该点为边缘点。但是这样做会导致检测的边缘点太多。总的来说,造成这些算子不能准确判定边缘的存在及正确位置的原因在于:
(1)实际的边缘灰度与理想的边缘灰度值间存在差异,这类算子可能检测出多个边缘。
(2)边缘存在的尺度范围各不相同,这类算子固定的大小不利于检测出不同尺度上的所有边缘。
(3)对噪声比较敏感为了解决这一问题,发展并产生了平滑滤波边缘检测方法,也就是边缘检测中理论最成熟的线性滤波方法,也称线性边缘检测算子。在线性滤波边缘检测方法中,最具代表性的是Marr-Hildreth提出的LoG(Laplacian of Gaussian)算法、Canny最优算子的边缘检测方法[7]。
沈阳大学毕业设计(论文) No 9
2 基于二阶微分的边缘检测算法
2.1 Laplacian算子
拉普拉斯算子是二阶导数的二维等效式。函数f(x,y)的拉普拉斯算子公式为:
2f2ff22
xy2(2-1)
使用差分方程对x和y方向上的二阶偏导数近似如下:
2fGx2xxfi,j1fi,jx
fi,j1fi,jxxfi,j22fi,j1fi,j (2-2)
这一近似式是以点f[i,j+1]为中心的,用j-1替换j得到
2ffi,j12fi,jfi,j1 x2(2-3)
它是以点[i,j]为中心的二阶偏导数的理想近似式,类似地,
2ffi1,j2fi,jfi1,j 2x(2-4)
把式(2-3)和式(2-4)合并为一个算子,就成为式(2-5)能用来近似拉普拉斯算子的模板:
010 2141010(2-5)
有时候希望邻域中心点具有更大的权值,比如下面式(2-6)的模板就是一种基于这种思想的近似拉普拉斯算子:
沈阳大学毕业设计(论文) No 10
141 24204141(2-6)
当拉普拉斯算子输出出现过零点时就表明有边缘存在,其中忽略无意义的过零点(均匀零区)。原则上,过零点的位置精度可以通过线性内插方法精确到子像素分辨率,不过由于噪声,以及由噪声引起的边缘两端的不对称性,结果可能不会很精确[8]。
考虑图6所给的例子。图中表明了对一幅具有简单阶跃边缘的图像进行拉普拉斯运算的结果。输出图像中的一行是:
在本例中,对应于原始图像边缘的零交叉点位于两个中心像素点之间。因此,边缘可以用其左边的像素或右边的像素来标记,但整幅图像的标记必须一致。在多数情况下,零交叉点很少恰好在两像素点中间,因此边缘的实际位置要通过内插值来确定。
图6 (a)为包含垂直阶跃边缘的图像 (b)为垂直方向的阶跃边缘拉普拉斯响应
现在考虑一下图7所示的例子。该图给出了拉普拉斯算法对斜坡边缘的响应,其中的一行输出是:
沈阳大学毕业设计(论文) No 11
零交叉点直接对应着图像中的一个像素点。当然,这是一种理想情况,图像边缘的实际情况要比这个复杂的多。
图7 (a)为包含垂直斜坡边缘的图像 (b)为垂直方向的斜坡边缘拉普拉斯响应
拉普拉斯算子有两个缺点:其一是边缘方向信息的丢失,其二是它是二阶差分,双倍加强了图像中噪声影响。所以,后来才有人提出了改进的LoG算法。
2.2 LoG算子
正如上面所提到的,利用图像强度二阶导数的零交叉点来求边缘点的算法对噪声十分敏感。所以,希望在边缘增强前滤除噪声。为此,Marr和Hildreth将高斯滤波和拉普拉斯边缘检测结合在一起,形成LoG(Laplaciall of GausSian,LoG)算法,也有人称之为拉普拉斯高斯算法。
LoG算法理论是从生物视觉理论导出的方法。其基本思想是:首先在一定范围内做平滑滤波,然后利用差分算子检测在相应尺度上的边缘。滤波器的选择取决于两个因素,一是要求滤波器在空间上平稳,空间位置误差x要小,二是要求平滑滤波器本身是带通滤波器,在其有限带通内是平稳的,即要求频域误差∆ω要小。由信号处理中的测不准原理知,∆x与∆ω是矛盾的,达到测不准下限的滤波器是高斯滤波器。Marr和Hildreth提出的差分算子是
沈阳大学毕业设计(论文) No 12
各向同性的拉普拉斯二阶差分算子。
LoG边缘检测器的基本特征是 (1)平滑滤波器是高斯滤波器
(2)增强步骤采用二阶导数(二维拉普拉斯函数)
(3)边缘检测判据是二阶导数零交叉点并对应一阶导数的较大峰值 这种方法的特点是图像首先与高斯滤波器进行卷积,这一步既平滑了图像又降低了噪声,孤立的噪声点和较小的结构组织将被滤除[9]。由于平滑会导致边缘的延展,因此边缘检测器只考虑那些具有局部梯度最大值的点为边缘点,这一点可以用二阶导数的零交叉点来实现。拉普拉斯函数用作二维二阶导数的近似,是因为它是一种无方向算子。为了避免检测出非显著边缘,应选择一阶导数大于某一阈值的零交叉点作为边缘点[10]。
LoG算子的输出h(x,y)是通过卷积运算得到的:
根据卷积求导法有: 其中:
x2y2222gx,ye4x2y2222hx,ygx,yfx,y
hx,y2gx,yfx,y
(2-7)
(2-8)
(2-9)
称之为墨西哥草帽算子。
由以上分析知,下面两种方法在数学上是等价的: (1)求图像与高斯滤波器卷积,再求卷积的拉普拉斯变换 (2)求高斯滤波器的拉普拉斯变换,再求与图像的卷积
沈阳大学毕业设计(论文) No 13
如果采用第一种方法,就要用到高斯平滑滤波器。直接实现LoG算法的典型模板见图8。
图8 典型拉普拉斯高斯模板
滤波(通常是平滑)、增强、检测这三个边缘检测步骤对使用LoG边缘检测仍然成立,其中平滑是用高斯滤波器来完成的;增强是将边缘转换成零交叉点来实现的;边缘检测则是通过检测零交叉点来进行的。
可以看到,零交叉点的斜率依赖于图像强度在穿过边缘时的变化对比度。剩下的问题是把那些由不同尺度算子检测到的边缘组合起来。在上述方法中,边缘是在特定的分辨下得到的。为了从图像中得到真正的边缘,有必要把那些通过不同尺度算子得到的信息组合起来。
这里介绍一下尺度空间概念。高斯平滑运算导致图像中边缘和其它尖锐不连续部分的模糊,其中模糊量取决于σ的值。噪声滤波效果越好,σ值越大,但同时也丢失了重要的边缘信息,影响了边缘检测器的性能。如果用小尺度的滤波器,又有可能平滑不完全而留有太多的噪声。大尺度滤波器在平滑相互邻近的两个边缘时,可能会将它们连在一起,这样只能检测出一个边缘。因此,在不知道物体尺度和位置的情况下,很难准确确定滤波器的尺度[11]。
2.3 Canny算子
沈阳大学毕业设计(论文) No 14
Canny检测阶跃边缘的基本思想是在图像中找出具有局部最大梯度幅值的像素点。检测阶跃边缘的大部分工作集中在寻找能够用于实际图像的梯度数字逼近。由于实际的图像经过了摄像机光学系统和电路系统(带宽限制)固有的低通滤波器的平滑,因此,图像中的阶跃边缘不是十分陡立。图像也受到摄像机噪声和场景中不希望的细节的干扰。图像梯度逼近必须满足两个要求:首先逼近必须能够抑制噪声效应;其次必须尽量精确地确定边缘的位置。抑制噪声和边缘精确定位是无法同时得到满足的,也就是说,边缘检测算法通过图像平滑算子去除了噪声,但却增加了边缘定位的不确定性;反过来,若提高边缘检测算子对边缘的敏感性,同时也提高了对噪声的敏感性。有一种线性算子可以在抗噪声干扰和精确定位之间提供最佳折衷方案,它就是高斯函数的一阶导数。
Canny根据检测的要求,定义了下面三个最优准则:
(1)最优检测。对真实边缘不漏检,非边缘点不错检,即要求输出信噪比最大。
(2)最优检测精度。检测的边缘点的位置距实际的边缘点的位置最近。 (3)检测点与边缘点一一对应。每一个实际存在的边缘点和检测的边缘点是一一对应的关系。
Canny首次将上述判据用是数学的形式表示出来,然后采用最优化数值方法,得到最佳边缘检测模板。对于二维图像,需要使用若干方向的模板分别对图像进行卷积处理,再取最可能的边缘方向。现在对Canny边缘检测器作一概括说明。用f[i,j]表示图像。使用可分离滤波方法求图像与高斯平滑滤波器卷积,得到的结果是一个已平滑数据阵列。
沈阳大学毕业设计(论文) No 15
Si,jGi,j;fi,j
(2-10)
其中G[i,j;σ]代表一个高斯滤波的过程,而σ是高斯函数的标准差,它控制着平滑程度。
已平滑数据阵列S[i,j]的梯度可以使用2×2一阶有限差分近似式来计算x与y偏导数的两个阵列P[i,j]与Q[i,j]:
Pi,jSi,j1Si,jSi1,j1Si1,j2 Qi,jSi,jSi1,jSi,j1Si1,j12
(2-11) (2-12)
在这个2×2正方形内求有限差分的均值,以便在图像中的同一点计算x和y的偏导数梯度。幅值和方位角可用直角坐标到极坐标的坐标转化公式来计算:
Mi,jPi,jQi,j i,jarctanQi,jPi,j
22(2-13) (2-14)
其中,反正切函数包含了两个参量,它表示一个角度,其取值范围是整个圆周范围内。为高效率地计算这些函数,尽量不用浮点运算。梯度的幅度和方向也可以通过查找表由偏导数计算。反正切函数的大多数计算使用的是定点运算,很少的几个计算是基本浮点运算,其中的浮点运算是由整数和定点算术通过软件实现的。
在上式中,M[i,j]反映了图像上的点[i,j]处的边缘强度,𝜃[i,j]是图像点[i,j]的法向矢量,正交于边缘方向。根据Canny的定义,中心边缘点为算子G[i,j;σ]与图像f[i,j]的卷积在边缘梯度方向上的最大值,这样就可以在每一个点的梯度方向上判断此点强度是否为其邻域的最大值来确定该点是否为边缘点。当一个像素满足下面三个条件时,则被认为是图像的边缘点:
沈阳大学毕业设计(论文) No 16
(1)该点的边缘强度大于沿该点梯度方向的两个相邻像素点的边缘强度 (2)与该点梯度方向上相邻两点的方向差小于
(3)以该点为中心的3×3邻域中的边缘强度极大值小于某个阈值 Canny给出的这三个判据具有广泛的代表意义[12]。
4 沈阳大学毕业设计(论文) No 17
3 最佳Sobel边缘检测方法
3.1 Sobel图像边缘检测方法
传统的Sobel图像边缘检测方法,是在图像空间利用两个方向模板与图像进行邻域卷积来完成的。这两个方向模板一个检测垂直边缘,一个检测水平边缘,如图9所示。图中,模板内的数字为模板系数,梯度方向与边缘方向总是正交
水平边缘Sobel算子
图9 Sobel算子
垂直边缘Sobel算子
模板元素和窗口像素之间的对应关系(以3×3窗口为例)定义如下: 设窗口灰度为:
Fj1,k1Fj1,kFj1,k1 Fj,k1Fj,kFj,k1FFj1,k1Fj1,kFj1,k1(3-1)
模板卷积计算就是下式求乘积和的过程:
fij,km1n1Fjm,knM11im,n
(3-2)
式中,i=1,2分别代表垂直和水平模板。fij,k为模板卷积法边缘检测的输出,lL2,L为窗口宽度,对3×3窗口,l=1。将两个卷积结果的最大值,赋给图像中对应模板中心位置的像素,作为该像素的新灰度值,即:
fmaxmaxfij,ki1,2
(3-3)
3.2 改进的Sobel边缘检测方法
一种改进的Sobel边缘检测方法,就是在3.1节中两个模板的基础上,又
沈阳大学毕业设计(论文) No 18
增加六个方向的模板,即45°,135°,180°,225°,270°,315°,具体如图10所示。这样可以更加有效地检测图像多个方向的边缘,使边缘信息更加完整。上面式(3-2)、式(3-3)中的i=1,2,…,8代表图中的八个方向[13]。
图10 边缘检测的八个方向模板
3.3 Sobel算子的最佳阈值选取
尽管八方向的Sobel算子可以得到更完整的边缘信息,但是和Sobel算子一样,它们的抗噪声能力都较差,即对于叠加噪声图像的边缘检测效果很不理想。解决该问题的一个方法就是设定一个阈值,然后与经过Sobel算子检测后的边缘值进行比较,当其幅值大于该阈值时定义为边缘,反之取为零,如式(3-4)所示。
A,fij,kTgj,k0,fij,kT0A255
(3-4)
由此可以看出,阈值T的选取至关重要。然而怎样选择阈值却是一个比较难的问题,因为在数字图像中无用的背景数据和目标数据常常混在一起,此外在图像中还有噪声的影响。如果阈值选得偏低,则会有较多的噪声被保留而影响边缘的质量;如果阈值选的偏高,则会使那些灰度值较小的边缘丢失,破坏边缘的连续性。上述方法的阈值一般是通过实验的方法决定的,因此很难得到一个最佳结果[14]。
沈阳大学毕业设计(论文) No 19
本节将给出一种新的边缘估计方法,通过它可以确定最佳阈值。为此,假设经过Sobel算子检测后的图像可以表示成:
xlm,nslm,nwlm,n
l(3-5)
2其中,slm,n是原始图像的边缘部分,wlm,n是均值为0,方差为w的Guass
白噪声。
由于经过Sobel算子检测后的边缘为图像的高频分量,而图像的高频分量一般服从拉普拉斯分布,其概率密度函数为:
21pxexpx
2ss(3-6)
其中,s为slm,n的标准差。
基于式(3-5)出的信号模型,可以推出slm,n的最大后验概率估计(Maximum a Posteriori:MAP)为:
其中,
T02xlm,nT0,xlm,nT0xlm,nsgn slm,nxlm,nT00,(3-7)
s2 wl(3-8)
(3-7)式给出的边缘估计方法在小波域称为软门限去噪法,因此可以认定T0即为所需要的最佳阈值。
可以看出,由(3-7)式和(3-8)式所给出的边缘估计的特点是:当图像边缘的幅值大于阈值时,边缘的估计值为边缘幅值减去阈值。因此,具有更强的去噪功能。为了由(3-7)式得到边缘信号的最佳估计,首先需要确定T0的值。因此要分别估计出s和w的值。
l 沈阳大学毕业设计(论文) No 20
假定图像大小为M×M,那么w的值可以用中值法估计:
l
wlmedianxlm,n0.6745,1m,nM (3-9)
其中median[·]表示取中值的运算。这样,注意到
及
21MM2xl2xlm,n
Mm1n12 x2s2wll(3-10)
(3-11)
就可以得到
22smaxxlw,0 l(3-12)
把上面的(3-9),(3-12)给出的s和w,的估计值代入(3-7),就可以得到
l阈值T0,即最佳阈值。
上述方法的最大优点是:在去噪的同时有效地保留了图像的真实边缘,即给出了边缘检测的最佳结果[15]。
沈阳大学毕业设计(论文) No 21
4 基于Matlab的实验结果与分析
4.1 Matlab简介
在科学研究和工程应用中,往往要进行大量的数学计算,其中包括矩阵运算。这些运算一般来说难以用手工精确和快捷地进行,而要借助计算机编制相应的程序做近似计算。目前流行用Basic、Fortran和C语言编制计算程序,既需要对有关算法有深刻的了解,还需要熟练地掌握所用语言的语法及编程技巧。对多数科学工作者而言,同时具备这两方面技能有一定困难。通常,编制程序也是繁杂的,不仅消耗人力与物力,而且影响工作进程和效率。为克服上述困难,美国Mathwork公司于1967年推出了“Matrix Laboratory”(缩写为Matlab)软件包,并不断更新和扩充。目前最新的5.x版本(windows环境)是一种功能强、效率高便于进行科学和工程计算的交互式软件包。其中包括:一般数值分析、矩阵运算、数字信号处理、建模和系统控制和优化等应用程序,并集应用程序和图形于一体便于使用的集成环境中。在此环境下所解问题的Matlab语言表述形式和其数学表达形式相同,不需要按传统的方法编程。不过,Matlab作为一种新的计算机语言,要想运用自如,充分发挥它的威力,也需先系统地学习它。但由于使用Matlab编程运算与人进行科学计算的思路和表达方式完全一致,所以不象学习其它高级语言——如Basic、Fortran和C等那样难于掌握[16]。实践证明,你可在几十分钟的时间内学会Matlab的基础知识,在短短几个小时的使用中就能初步掌握它.从而使你能够进行高效率和富有创造性的计算。Matlab大大降低了对使用者的数学基础和计算机语言知识的要求,而且编程效率和计算效率极高,还可在计算机上直接输出结果和精美的图形拷贝,所以它的确为一高效的科研助手。自推出后即风行美国,
沈阳大学毕业设计(论文) No 22
流传世界[17]。
综上所述,Matlab语言有如下特点: (1)编程效率高
它是一种面向科学与工程计算的高级语言,允许用数学形式的语言编写程序,且比Basic、Fortran和C等语言更加接近书写计算公式的思维方式,用Matlab编写程序犹如在演算纸上排列出公式与求解问题。因此,Matlab语言也可通俗地称为演算纸式科学算法语言由于它编写简单,所以编程效率高,易学易懂。
(2)用户使用方便
Matlab语言是一种解释执行的语言(在没被专门的工具编译之前),它灵活、方便,其调试程序手段丰富,调试速度快,需要学习时间少。人们用任何一种语言编写程序和调试程序一般都要经过四个步骤:编辑、编译、连接以及执行和调试。各个步骤之间是顺序关系,编程的过程就是在它们之间作瀑布型的循环。Matlab语言与其它语言相比,较好地解决了上述问题,把编辑、编译、连接和执行融为一体。它能在同一画面上进行灵活操作快速排除输入程序中的书写错误、语法错误以至语意错误,从而加快了用户编写、修改和调试程序的速度,可以说在编程和调试过程中它是一种比VB还要简单的语言。
具体地说,Matlab运行时,如直接在命令行输入Mailab语句(命令),包括调用M文件的语句,每输入一条语句,就立即对其进行处理,完成绩译、连接和运行的全过程。又如,将Matlab源程序编辑为M文件,由于Mat1ab磁盘文件也是M文件,所以编辑后的源文件就可直接运行,而不需进行编译
沈阳大学毕业设计(论文) No 23
和连接。在运行M文件时,如果有错,计算机屏幕上会给出详细的出锗信息,用户经修改后再执行,直到正确为止。所以可以说,Mat1ab语言不仅是一种语言,广义上讲是一种该语言开发系统,即语言调试系统。
(3)扩充能力强
高版本的Matlab语言有丰富的库函数,在进行复杂的数学运算时可以直接调用,而且Matlab的库函数同用户文件在形成上一样,所以用户文件也可作为Matlab的库函数来调用。因而,用户可以根据自己的需要方便地建立和扩充新的库函数,以便提高Matlab使用效率和扩充它的功能。另外,为了充分利用Fortran、C等语言的资源,包括用户已编好的Fortran,C语言程序,通过建立Me调文件的形式,混合编程,方便地调用有关的Fortran,C语言的子程序。
(4)语句简单,内涵丰富
Mat1ab语言中最基本最重要的成分是函数,其一般形式为[a,b,c……]=fun(d,e,f,……),即一个函数由函数名,输入变量d,e,f,……和输出变量a,b,c……组成,同一函数名F,不同数目的输入变量(包括无输入变量)及不同数目的输出变量,代表着不同的含义(有点像面向对象中的多态性。这不仅使Matlab的库函数功能更丰富,而大大减少了需要的磁盘空间,使得Matlab编写的M文件简单、短小而高效。
(5)高效方便的矩阵和数组运算
Matlab语言象Basic、Fortran和C语言一样规定了矩阵的算术运算符、关系运算符、逻辑运算符、条件运算符及赋值运算符,而且这些运算符大部分可以毫无改变地照搬到数组间的运算,有些如算术运算符只要增加“·”就可
沈阳大学毕业设计(论文) No 24
用于数组间的运算,另外,它不需定义数组的维数,并给出矩阵函数、特殊矩阵专门的库函数,使之在求解诸如信号处理、建模、系统识别、控制、优化等领域的问题时,显得大为简捷、高效、方便,这是其它高级语言所不能比拟的。在此基础上,高版本的Matlab已逐步扩展到科学及工程计算的其它领域。因此,不久的将来,它一定能名符其实地成为“万能演算纸式的”科学算法语言。
(6)方便的绘图功能
Matlab的绘图是十分方便的,它有一系列绘图函数(命令),例如线性坐标、对数坐标,半对数坐标及极坐标,均只需调用不同的绘图函数(命令),在图上标出图题、XY轴标注,格(栅)绘制也只需调用相应的命令,简单易行。另外,在调用绘图函数时调整自变量可绘出不变颜色的点、线、复线或多重线。这种为科学研究着想的设计是通用的编程语言所不及的。
总之,Matlab语言的设计思想可以说代表了当前计算机高级语言的发展方向,在不断使用中,人们会发现它的巨大潜力[18]。
4.2 一阶微分算法的实验结果与分析
4.2.1 实验程序清单
Roberts算子程序:
clc
clear all close all
A = imread('cameraman.tif'); % 读入图像 imshow(A);title('原图');
x_mask = [1 0;0 -1]; % 建立X方向的模板
y_mask = rot90(x_mask); % 建立Y方向的模板 I = im2double(A); % 将图像数据转化为双精度 dx = imfilter(I, x_mask); % 计算X方向的梯度分量
沈阳大学毕业设计(论文) No 25
dy = imfilter(I, y_mask); % 计算Y方向的梯度分量 grad = sqrt(dx.*dx + dy.*dy); % 计算梯度
grad = mat2gray(grad); % 将梯度矩阵转换为灰度图像 level = graythresh(grad); % 计算灰度阈值
BW = im2bw(grad,level); % 用阈值分割梯度图像 figure, imshow(BW); % 显示分割后的图像即边缘图像 title('Roberts')
Prewitt算子程序:
clc
clear all close all
A = imread('cameraman.tif'); % 读入图像 imshow(A);title('原图');
y_mask = [-1 -1 -1;0 0 0;1 1 1]; % 建立Y方向的模板 x_mask = y_mask'; % 建立X方向的模板
I = im2double(A); % 将图像数据转化为双精度 dx = imfilter(I, x_mask); % 计算X方向的梯度分量 dy = imfilter(I, y_mask); % 计算Y方向的梯度分量 grad = sqrt(dx.*dx + dy.*dy); % 计算梯度
grad = mat2gray(grad); % 将梯度矩阵转换为灰度图像 level = graythresh(grad); % 计算灰度阈值
BW = im2bw(grad,level); % 用阈值分割梯度图像 figure, imshow(BW); % 显示分割后的图像即边缘图像 title('Prewitt')
Kirsch算子程序
clc
clear all close all
A = imread('cameraman.tif'); % 读入图像 imshow(A);title('原图');
mask1=[-3,-3,-3;-3,0,5;-3,5,5]; % 建立方向模板 mask2=[-3,-3,5;-3,0,5;-3,-3,5]; mask3=[-3,5,5;-3,0,5;-3,-3,-3]; mask4=[-3,-3,-3;-3,0,-3;5,5,5]; mask5=[5,5,5;-3,0,-3;-3,-3,-3]; mask6=[-3,-3,-3;5,0,-3;5,5,-3]; mask7=[5,-3,-3;5,0,-3;5,-3,-3]; mask8=[5,5,-3;5,0,-3;-3,-3,-3];
I = im2double(A); % 将数据图像转化为双精度 d1 = imfilter(I, mask1); % 计算8个领域的灰度变化 d2 = imfilter(I, mask2); d3 = imfilter(I, mask3);
沈阳大学毕业设计(论文) No 26
d4 = imfilter(I, mask4); d5 = imfilter(I, mask5); d6 = imfilter(I, mask6); d7 = imfilter(I, mask7); d8 = imfilter(I, mask8);
dd = max(abs(d1),abs(d2)); % 取差值变化最大的元素组成灰度变化矩阵 dd = max(dd,abs(d3)); dd = max(dd,abs(d4)); dd = max(dd,abs(d5)); dd = max(dd,abs(d6)); dd = max(dd,abs(d7)); dd = max(dd,abs(d8));
grad = mat2gray(dd); % 将灰度变化矩阵转化为灰度图像 level = graythresh(grad); % 计算灰度阈值
BW = im2bw(grad,level); % 用阈值分割梯度图像
figure, imshow(BW); % 显示分割后的图像,即边缘图像 title('Kirsch')
沈阳大学毕业设计(论文) No 27
4.2.2 实验结果
以cameraman图片为例,分别用Roberts、Prewitt和Kirsch三种算法,在无噪声(图11)和有高斯白噪声(图12)的环境下,分别给检测结果。
图11对未加噪声图片的检测结果
沈阳大学毕业设计(论文) No 28
图12 对加入高斯白噪声图片的检测结果
4.2.3 实验结果分析
通过图11和图12知,在图像没有噪声的情况下,Roberts算子、Prewitt算子、Kirsch算子,都能够比较准确的检测出图像的边缘。加入高斯白噪声后,三种边缘检测算子的边缘检测效果都多少受到噪声的干扰,检测出大量的噪声点和伪边缘,甚至无法检测出边缘。Roberts算子受噪声的影响最大,Kirsch算子、Prewitt算子受噪声影响比Roberts算子小。
由于各种原因,图像总是受到随机噪声的干扰,可以说噪声无处不在。
沈阳大学毕业设计(论文) No 29
经典的边缘检测方法由于引入了各种形式的微分运算,从而必然引起对噪声的极度敏感,边缘检测的结果常常是把噪声当作边缘点检测出来,而真正的边缘也由于受到噪声干扰而没有检测出来。对于有噪声图像来说,一种好的边缘检测方法应该具有良好的噪声抑制能力,同时又有完备的边缘保持特性。
基于一阶微分的边缘检测算子具有实现简单、运算速度快等特点,但其检测受噪声的影响很大,检测结果不可靠,不能准确判定边缘的存在及边缘的准确位置,造成这种情况的原因:(1)实际边缘灰度与理想边缘灰度值间存在差异,这类算子可能检测出多个边缘;(2)边缘存在的尺度范围各不相同,这类算子固定的大小不利于检测出不同尺度上的所有边缘;(3)对噪声都比较敏感。
4.3 二阶微分算法的实验结果与分析
4.3.1 实验程序清单
Laplacian算子程序:
clc
clear all close all
A = imread('cameraman.tif'); % 读入图像 imshow(A);title('原图');
mask=[0,-1,0;-1,4,-1;0,-1,0]; % 建立模板
I = im2double(A); % 将数据图像转化为双精度 dx = imfilter(I, mask); % 计算梯度矩阵
grad = mat2gray(dx); % 将梯度矩阵转化为灰度图像 BW = im2bw(grad,0.58); % 用阈值分割梯度图像
figure, imshow(BW); % 显示分割后的图像,即梯度图像 title('Laplacian')
LoG算子程序:
clc
clear all close all
沈阳大学毕业设计(论文) No 30
A = imread('cameraman.tif'); % 读入图像 imshow(A);title('原图');
mask=[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]; % 建立模板 I = im2double(A); % 将数据图像转化为双精度 dx = imfilter(I, mask); % 计算梯度矩阵
grad = mat2gray(dx); % 将梯度矩阵转化为灰度图像 BW = im2bw(grad,0.58); % 用阈值分割梯度图像
figure, imshow(BW); % 显示分割后的图像,即梯度图像 title('log')
Canny算子程序:
clc
clear all close all
I = imread('cameraman.tif'); % 读入图像 imshow(I);title('原图')
BW1 = edge(I,'canny'); % 调用canny函数
figure,imshow(BW1); % 显示分割后的图像,即梯度图像 title('Canny')
沈阳大学毕业设计(论文) No 31
4.3.2 实验结果
以cameraman图片为例,分别用Laplacian、LoG和Canny三种算法,在无噪声(图13)和有高斯白噪声(图14)的环境下,分别给检测结果。
图13对未加噪声图片的检测结果
沈阳大学毕业设计(论文) No 32
图14 对加入高斯白噪声图片的检测结果
4.3.3 实验结果分析
由图13和图14可以看出
Laplacian算子:对图像中的阶跃性边缘点定位准确,但是对噪声非常敏感,丢失一部分边缘的方向信息,造成一些不连续的检测边缘。
LoG算子:首先用高斯函数进行滤波,然后使用Laplacian算子检测边缘,克服了Laplacian算子抗噪声能力比较差的缺点,LoG算子中高斯函数中方差参数σ的选择很关键,σ越大避免了虚假边缘的检出,边缘也被平滑造成边缘
沈阳大学毕业设计(论文) No 33
点的丢失。σ越小,噪声抑制能力相对下降,容易出现虚假边缘。
Canny:采用高斯函数对图像进行平滑处理,因此具有较强的噪声抑制能力;同样该算子也将一些高频边缘平滑掉,造成边缘丢失,采用了双阈值算法检测和连接边缘,边缘的连续性较好。
Laplacian算子是对二维函数进行运算的二阶导数算子,与方向无关,对取向不敏感,因而计算量要小。根据边缘的特性,Laplacian算子可以作为边缘提取算子,计算数字图像的Laplacian值可以借助模板实现,但是它对噪声相当敏感,它相当于高通滤波,常会出现一些虚假边缘。因此,Marr提出首先对图像用Gauss函数进行平滑,然后利用Laplacian算子对平滑的图像求二阶导数后得到的零交叉点作为候选边缘,这就是LoG算子。LoG算子就是对图像进行滤波和微分的过程,是利用旋转对称的LoG模板与图像做卷积,确定滤波器输出的零交叉位置。Canny算子是一个具有滤波、增强和检测的多阶段的优化算子。
在进行处理前,Canny算子先利用高斯平滑滤波器来平滑图像以除去噪声(即用高斯平滑滤波器与图像作卷积)。增强边缘是将邻域(或局部)强度值有显著变化的点突出来,一般通过计算梯度幅值来完成。Canny分割算法采用一阶偏导的有限差分来计算梯度的幅值和方向。对一个边缘来说,其一阶导数在边界处存在一个向上的阶跃,或者其二阶导数过零点。在处理过程中,Canny算法还将经过一个非极大值抑制的过程。最后Canny算法将采用两个阈值来连接边缘。
传统Canny算法也有不足之处,Canny算法对整幅图像采用同一高斯函数进行滤波,无法顾及图像局部特征信息,一方面很难消除局部噪声的影响,
沈阳大学毕业设计(论文) No 34
另一方面会丢失灰度值变化缓慢的局部边缘,导致目标物体轮廓边缘不连续,影响检测效果。此外,边缘检测的阈值需要预先设定。先确定一个阈值系数,该系数定义为梯度小于阈值的像素数所占边缘像素总数的比例,以此来确定阈值。这种方法没有利用图像自身的信息,不具有自适应能力。
4.4 最佳Sobel边缘检测算法的实验结果与分析
4.4.1 实验程序清单
传统的Sobel算子程序:
clc
clear all close all
A = imread('cameraman.tif'); % 读入图像 imshow(A);title('原图');
y_mask = [-1 -2 -1;0 0 0;1 2 1]; % 建立Y方向的模板 x_mask = y_mask'; % 建立X方向的模板
I = im2double(A); % 将图像数据转化为双精度 dx = imfilter(I, x_mask); % 计算X方向的梯度分量 dy = imfilter(I, y_mask); % 计算Y方向的梯度分量 grad = sqrt(dx.*dx + dy.*dy); % 计算梯度
grad = mat2gray(grad); % 将梯度矩阵转换为灰度图像 level = graythresh(grad); % 计算灰度阈值
BW = im2bw(grad,level); % 用阈值分割梯度图像
figure, imshow(BW); % 显示分割后的图像即边缘图像 title('Sobel')
改进的Sobel算子程序:
clc
clear all close all
A = imread('cameraman.tif'); % 读入图像 imshow(A);title('原图');
mask1=[-1 -2 -1;0 0 0;1 2 1]; % 建立方向模板 mask2=[-2 -1 0;-1 0 1;0 1 2]; mask3=[-1 0 1;-2 0 2;-1 0 1]; mask4=[0 1 2;-1 0 1;-2 -1 0]; mask5=[1 2 1;0 0 0;-1 -2 -1]; mask6=[2 1 0;1 0 -1;0 -1 -2];
沈阳大学毕业设计(论文) No 35
mask7=[1 0 -1;2 0 -2;1 0 -1]; mask8=[0 -1 -2;1 0 -1;2 1 0];
I = im2double(A); % 将数据图像转化为双精度 d1 = imfilter(I, mask1); % 计算8个领域的灰度变化 d2 = imfilter(I, mask2); d3 = imfilter(I, mask3); d4 = imfilter(I, mask4); d5 = imfilter(I, mask5); d6 = imfilter(I, mask6); d7 = imfilter(I, mask7); d8 = imfilter(I, mask8);
dd = max(abs(d1),abs(d2)); % 取差值变化最大的元素组成灰度变化矩阵 dd = max(dd,abs(d3)); dd = max(dd,abs(d4)); dd = max(dd,abs(d5)); dd = max(dd,abs(d6)); dd = max(dd,abs(d7)); dd = max(dd,abs(d8));
grad = mat2gray(dd); % 将灰度变化矩阵转化为灰度图像 level = graythresh(grad); % 计算灰度阈值
BW = im2bw(grad,level); % 用阈值分割梯度图像
figure, imshow(BW); % 显示分割后的图像,即边缘图像 title('八方向Sobel') BB = grad;
FW=median(BB(:))/0.6745; B = BB.*BB; B = sum(B(:)); FX= sqrt(B/256^2);
FS=sqrt(max(FX^2-FW^2,0));
T=sqrt(2)*FW^2/FS; % 计算最佳阈值
grad = mat2gray(BB); % 将梯度矩阵转化为灰度图像 BW2=im2bw(grad,T); % 用最佳阈值分割梯度图像
figure, imshow(BW2); % 显示分割后的图像,即边缘图像 title('改进的sobel');
沈阳大学毕业设计(论文) No 36
4.4.2 实验结果
以cameraman图片为例,分别用传统的Sobel、八方向的Sobel和采用了最佳阈值的Sobel三种算法,在无噪声(图15)和有高斯白噪声(图16)的环境下,分别给检测结果。
图15 对未加噪声图片的检测结果
沈阳大学毕业设计(论文) No 37
图16 对加入高斯白噪声图片的检测结果
4.4.3 实验结果分析
由图15和图16可以看出当没有噪声的时候,八方向的Sobel算子的边缘检测效果最好,传统的Sobel算子出现了一些的噪声,而采用了最佳阈值的改进Sobel算子检测效果很不好,但是对于加入例如高斯白噪声的图片,传统的Sobel算子和八方向Sobel算子虽然检测到的边缘信息很丰富,也较为连续,但是由于噪声太多,边缘很模糊,严重的影响了视觉效果;而采用最佳阈值的改进Sobel算子检测极大地改善了这缺点,得到的图像边缘具有很好的清晰
沈阳大学毕业设计(论文) No 38
度和连续性,信息比较完整,效果令人满意。所以最佳阈值的改进Sobel算子最大优点是:在去噪的同时有效地保留了图像的真实边缘,即给出了边缘检测的最佳结果。
沈阳大学毕业设计(论文) No 39
结 论
本文就现在比较成熟经典的基于一阶微分的边缘检测算法进行了回顾,并循序渐进的对基于二阶微分的边缘检测算法作了介绍,最后,还介绍了适用于含高斯噪声图片的改进Sobel算子。
总结如下:
Roberts算子:采用对角线方向相邻两像素之差表示信号的突变,检测水平和垂直方向边缘的性能好于斜线方向,定位精度比较高,但对噪声敏感,检测出的边缘较细。
Prewitt算子:对噪声有平滑作用,检测出的边缘比较粗,定位精度低,容易损失角点。
Kirsch算子:Kirsch算子是像素邻域的加权和,模板中心值较大,不但产生较好的边缘效果,而且对噪声具有平滑作用。但存在伪边缘,边缘比较粗且定位精度低。
Laplacian算子:是二阶微分算子,对图像中的阶跃性边缘点定位准确,对噪声非常敏感,丢失一部分边缘的方向信息,造成一些不连续的检测边缘。
LoG算子:首先用高斯函数进行滤波,然后使用Laplacian算子检测边缘,克服了Laplacian算子抗噪声能力比较差的缺点。
Canny算子:采用高斯函数对图像进行平滑处理,因此具有较强的噪声抑制能力;同样该算子也将一些高频边缘平滑掉,造成边缘丢失,采用了双阈值算法检测和连接边缘,边缘的连续性较好。
Sobel算子:产生的边缘效果较好,对噪声具有平滑作用。但存在伪边缘,边缘比较粗且定位精度低。
沈阳大学毕业设计(论文) No 40
八方向Sobel算子:可以得到更完整的边缘信息,但是和Sobel算子一样,它们的抗噪声能力都较差,即对于叠加噪声图像的边缘检测效果很不理想。
最佳Sobel算子:在图像进行八方向Sobel算子检测后的梯度图像使用最佳阈值分割图像,解决了八方向Sobel算子抗噪能力差的特点,在去噪的同时有效地保留了图像的真实边缘,即给出了边缘检测的最佳结果。但这种算法对于部分灰度图像的检测结果并不理想,甚至无法检测。至于具体原因还有待进一步的研究。
沈阳大学毕业设计(论文) No 41
致 谢
首先衷心感谢我的导师王忠石老师,我的成长与王老师的教导、培养息息相关。我有幸在本科学习期间师从王老师,在论文的写作过程中一直得到王老师的精心培养和指导。导师渊博的科学知识、严谨求实的工作作风和勤奋敬业的工作精神以及诲人不倦、平易近人的态度始终激励着我。在以后的工作学习中,我也将以王老师为榜样来追求一名科技工作者应具备的素质和品质。
感谢王老师带领下的同组同学李春辉、程小青、张吉、王国峰、李春、马悦、吕建的支持和帮助。这几个月来,各位同学为我提供了一个积极、和谐的学习氛围和研究环境,我们相互交流、讨论共同面对课题中的各个难题,所以论文的完成也包含着他们的心血和智慧。我将永远珍惜与他们在学习、工作中所结下的深厚友谊。在此,我要深深感谢各位同学给予我的帮助。
我的成长,离不开沈阳大学各位老师的培养和教导。我感谢沈阳大学曾经给予我知识和帮助的各位老师以及与我以起学习成长的各位同学们。
最后,深深地感谢我的家人和朋友,我将永远感谢他们的鼓励和无微不至的关怀,正是他们的理解、支持和关心,使得我能够顺利完成学业。
沈阳大学毕业设计(论文) No 42
参考文献
[1] 陈宇云. 灰度图像的边缘检测研究[D]. 电子科技大学硕士学位论文. 2009 [2] 朱虹. 数字图像处理基础[M]. 北京: 科学出版社. 2005.4:217-220
[3] 余成波. 数字图像处理及MATLAB实现[M]. 重庆: 重庆大学出版社. 2003.7:356-359
[4] 陈书海,傅录祥. 实用数字图像处理[M].北京: 科学出版社. 2005:280-290 [5] 张晶. 图像边缘检测算法的研究[D]. 山东大学硕士学位论文. 2006 [6] 韩磊 .MATLAB在数字图象处理中的应用[J]. 电脑知识与技术. 2008,1(1):29-31
[7] 卢洋,张旭秀.图像边缘检测算法的对比分析与研究[J]. 太原科技. 2009,(3):17-18
[8] 熊秋菊,杨慕生. 图像处理中边缘检测算法的对比研究[J]. 机械工程与自动化. 2009,(2)21-23
[9] 尹建媛. 图像处理中边缘检测算法的研究[J]. 科技信息. 2008,(4):30-32 [10] 李雪. 灰度图像边缘检测算法的性能评价[D]. 沈阳工业大学硕士论文 .2007
[11] 范立南, 韩晓微, 王忠石等. 基于多结构元的噪声污染灰度图像边缘检测研究[J]. 武汉大学学报(工学版), 2003,49(3):45-49
[12] XU Xian-ling,LIN Yi-shui.Application of MatLab in Dingital Image Processing[J]. MODERN COMPUTER. 2008,(5):35-37
[13] LV Yu-qin,ZENG Guang-yu.Detection Algorithm of Picture Edge[J]. TAIYUAN SCIENCE & TECHNOLOGY. 2009,(2):24-25
沈阳大学毕业设计(论文) No 43
[14] 王予生,卜佳俊,陈纯.一种基于积分变换的边缘检测算法[J]. 中国图象图形学报. 2002,7(2):145—149
[15] 吕同富,刘宝军,毕秀芝.图像边缘提取的简单方法及应用[J]. 计算机仿真, 2003,20(4):99—101
[16] 雷丽珍.数字图像边缘检测方法的探讨[J]. 测绘通报, 2006,3:40-42 [17] 任民宏.图像边缘检测算法的比较与展望[J]. 中国科技信息, 2007,(4):65-67
[18] 李安安.几种图像边缘检测算法的比较与展望[J]. 大众科技, 2009,(12):46-47
沈阳大学毕业设计(论文) No 44
附录 源程序清单
clear all; close all; chos=0;
possibility=12;
messaggio='Insert the number of set: each set determins a class. This set should include a number of images for each person, with some variations in expression and in the lighting.'; while chos~=possibility,
chos=menu('边缘检测,'Roberts','Prewitt','Kirsch','Laplacian','LoG','Canny','Sobel','八方向Sobel', '¸改进的Sobel','加入噪声','退出');
%========================================================================== if chos==1 clc;
close all;
selezionato=0;
while selezionato==0
[namefile,pathname]=uigetfile({'*.bmp;*.tif;*.tiff;*.jpg;*.jpeg;*.png;*.gif','IMAGE Files (*.bmp,*.tif,*.tiff,*.jpg,*.jpeg,*.png,*.gif)'},'Chose GrayScale Image'); if namefile~=0
[img,map]=imread(strcat(pathname,namefile)); selezionato=1; else
disp('Select a grayscale image'); end
if (any(namefile~=0) && (~isgray(img))) disp('Select a grayscale image'); selezionato=0; end end
figure('Name','Selected image'); imshow(img); if isa(img,'uint8')
graylevmax=2^8-1; end
if isa(img,'uint16')
graylevmax=2^16-1; end
if isa(img,'uint32')
graylevmax=2^32-1; end end
%========================================================================== if chos==2
沈阳大学毕业设计(论文) No 45
clc;
close all; A = img; x_mask = [1 0;0 -1];
y_mask = rot90(x_mask); I = im2double(A);
dx = imfilter(I, x_mask); dy = imfilter(I, y_mask); grad = sqrt(dx.*dx + dy.*dy); grad = mat2gray(grad); level = graythresh(grad); BW = im2bw(grad,level); figure, imshow(BW); title('Roberts') end
%========================================================================== if chos==3
clc; close all; A = img;
y_mask = [-1 -1 -1;0 0 0;1 1 1]; x_mask = y_mask'; I = im2double(A);
dx = imfilter(I, x_mask); dy = imfilter(I, y_mask); grad = sqrt(dx.*dx + dy.*dy); grad = mat2gray(grad); level = graythresh(grad); BW = im2bw(grad,level); figure, imshow(BW); title('Prewitt') end
%========================================================================= if chos==4 clc;
close all; A = img;
mask1=[-3,-3,-3;-3,0,5;-3,5,5]; mask2=[-3,-3,5;-3,0,5;-3,-3,5]; mask3=[-3,5,5;-3,0,5;-3,-3,-3]; mask4=[-3,-3,-3;-3,0,-3;5,5,5]; mask5=[5,5,5;-3,0,-3;-3,-3,-3]; mask6=[-3,-3,-3;5,0,-3;5,5,-3]; mask7=[5,-3,-3;5,0,-3;5,-3,-3];
沈阳大学毕业设计(论文) No 46
mask8=[5,5,-3;5,0,-3;-3,-3,-3]; I = im2double(A);
d1 = imfilter(I, mask1); d2 = imfilter(I, mask2); d3 = imfilter(I, mask3); d4 = imfilter(I, mask4); d5 = imfilter(I, mask5); d6 = imfilter(I, mask6); d7 = imfilter(I, mask7); d8 = imfilter(I, mask8); dd = max(abs(d1),abs(d2)); dd = max(dd,abs(d3)); dd = max(dd,abs(d4)); dd = max(dd,abs(d5)); dd = max(dd,abs(d6)); dd = max(dd,abs(d7)); dd = max(dd,abs(d8)); grad = mat2gray(dd); level = graythresh(grad); BW = im2bw(grad,level); figure, imshow(BW); title('Kirsch') end
%========================================================================== if chos==5 clc;
close all; A=img;
mask=[0,-1,0;-1,4,-1;0,-1,0]; I = im2double(A); dx = imfilter(I, mask); grad = mat2gray(dx); BW = im2bw(grad,0.58); figure, imshow(BW); title('Laplacian') end
%========================================================================== if chos==6 clc;
close all; A=img;
mask=[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]; I = im2double(A); dx = imfilter(I, mask);
沈阳大学毕业设计(论文) No 47
grad = mat2gray(dx); BW = im2bw(grad,0.58); figure, imshow(BW); title('log') end
%========================================================================== if chos==7 clc;
close all; A=img;
BW1 = edge(I,'canny'); figure,imshow(BW1); title('Canny') end
%========================================================================= if chos==8 clc;
close all; A=img;
y_mask = [-1 -2 -1;0 0 0;1 2 1]; x_mask = y_mask'; I = im2double(A);
dx = imfilter(I, x_mask); dy = imfilter(I, y_mask); grad = sqrt(dx.*dx + dy.*dy); grad = mat2gray(grad); level = graythresh(grad); BW = im2bw(grad,level); figure, imshow(BW); title('sobel') end
%========================================================================== if chos==9 clc;
close all; A=img;
mask1=[-1 -2 -1;0 0 0;1 2 1]; mask2=[-2 -1 0;-1 0 1;0 1 2]; mask3=[-1 0 1;-2 0 2;-1 0 1]; mask4=[0 1 2;-1 0 1;-2 -1 0]; mask5=[1 2 1;0 0 0;-1 -2 -1]; mask6=[2 1 0;1 0 -1;0 -1 -2]; mask7=[1 0 -1;2 0 -2;1 0 -1]; mask8=[0 -1 -2;1 0 -1;2 1 0];
沈阳大学毕业设计(论文) No 48
I = im2double(A);
d1 = imfilter(I, mask1); d2 = imfilter(I, mask2); d3 = imfilter(I, mask3); d4 = imfilter(I, mask4); d5 = imfilter(I, mask5); d6 = imfilter(I, mask6); d7 = imfilter(I, mask7); d8 = imfilter(I, mask8);
dd = max(abs(d1),abs(d2));% dd = max(dd,abs(d3)); dd = max(dd,abs(d4)); dd = max(dd,abs(d5)); dd = max(dd,abs(d6)); dd = max(dd,abs(d7)); dd = max(dd,abs(d8)); grad = mat2gray(dd); level = graythresh(grad); BW = im2bw(grad,level); figure, imshow(BW); title('sobel°Ë·½Ïò') end
%========================================================================== if chos==10 clc;
close all; A=img;
mask1=[-1 -2 -1;0 0 0;1 2 1]; mask2=[-2 -1 0;-1 0 1;0 1 2]; mask3=[-1 0 1;-2 0 2;-1 0 1]; mask4=[0 1 2;-1 0 1;-2 -1 0]; mask5=[1 2 1;0 0 0;-1 -2 -1]; mask6=[2 1 0;1 0 -1;0 -1 -2]; mask7=[1 0 -1;2 0 -2;1 0 -1]; mask8=[0 -1 -2;1 0 -1;2 1 0]; I = im2double(A);
d1 = imfilter(I, mask1); d2 = imfilter(I, mask2); d3 = imfilter(I, mask3); d4 = imfilter(I, mask4); d5 = imfilter(I, mask5); d6 = imfilter(I, mask6); d7 = imfilter(I, mask7); d8 = imfilter(I, mask8);
沈阳大学毕业设计(论文) No 49
dd = max(abs(d1),abs(d2)); dd = max(dd,abs(d3)); dd = max(dd,abs(d4)); dd = max(dd,abs(d5)); dd = max(dd,abs(d6)); dd = max(dd,abs(d7)); dd = max(dd,abs(d8)); grad = mat2gray(dd); level = graythresh(grad); BW = im2bw(grad,level); BB = grad;
FW=median(BB(:))/0.6745; B = BB.*BB; B = sum(B(:)); [M,N] = size(A);
FX= sqrt(B/(M*N));
FS=sqrt(max(abs(FX^2-FW^2))); T=sqrt(2)*FW^2/FS; grad = mat2gray(BB); BW2=im2bw(grad,T); figure, imshow(BW2); title('¸Ä½øµÄsobel'); end
%======================================================================== if chos==11 clc;
close all;
img=imnoise(img,'gaussian',0.005); %加入0.005的高斯白噪声 imshow(img); end end
沈阳大学毕业设计(论文) No 50
因篇幅问题不能全部显示,请点此查看更多更全内容