人民大学当代商城-人民大学当代商城
图像边缘检测程序
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2012
年秋季学期
图像处理
综合训练
题
目:
图像边缘检测程序设计
专业班级:
姓
名:
学
号:
指导教师:
成
绩:
11
目
录
摘
要
................................................. .................................................. ....
1
一、前言
.. .................................................. ................................................
2
二、算法分析与描述
.. .................................................. ............................
3
三、详细设计过程
....................... .................................................. ...........
7
四、调试过程中出现的问题及相应解决办法
......................................
1
1
五、程序运行截图及其说明
................... ...............................................
1
2
六、简单操作手册
....................... .................................................. .........
1
5
设计总结
........................... .................................................. .....................
1
8
参考资料
........................... .................................................. .....................
1
9
致谢
.
.............. .................................................. ..........................................
2
0
附录
< /p>
.
.................................... .................................................. ....................
2
1
11
摘
要
图像处理就是对图像信息加工以满足人的视
觉心理或应用需求的方法。图像
处理方法有光学方法和电子学方法。数字图像处理是利用
数字计算机或其它的
硬件设备对图像信息转换而得到的电信号进行某些数学处理以提高图
像的实用
性。
边缘检测是目前图像分析领域中
的基础技术,也是数字图像处理中的一项重要
内容。它利用图像一阶倒数的极值或二阶倒
数的过零点信息来提取边缘。本文
对图像边缘检测的几种经典算法包括一阶微分的
Sobel
算子、
Robert
算子、
< br>Priwitt
算子,
二阶微分
laplacian
算子及
Canny
算子。
通过实例图像对不同边
缘检测算法的效果进行分析,比较了不同算法的特点和适用范围。
关键词
:图像处理;边缘检测;一阶微分;二阶微分
11
一、前言
< /p>
在实际图像边缘检测问题中图像的边缘作为图像的一种基本特征经常被应
< br>用到较高层次的图像应用中去。它在图像识别图像分割图像增强以及图像压
缩等的
领域中有较为广泛的应用也是它们的基础。
图像边缘是图像最基本的
特征之一往往携带着一幅图像的大部分信息。而
边缘存在于图像的不规则结构和不平稳现
象中也即存在于信号的突变点处这
些点给出了图像轮廓的位置。这些轮廓常常是我们在图
像边缘检测时所需要
的非常重要的一些特征条件这就需要我们对一幅图像检测并提取出它
的边
缘。边缘是以图像的局部特征不连续的形式出现的,也就是指图像局部亮度
变化最显著的部分,同时边缘也是不同区域的分界处。
边缘检测是图像特征提取的重要技术之一,
边缘常常意味着一个区域的终
结和另一个区域的开始。
图像的边缘包含了物体形状的重要信息
,
它不仅在
分析图像时大幅度地减少了要处理的信息量
,
而且还保护了目标的边界结 构,
它对于我们进行高层次的特征描述、识别和理解等有着重大的影响。又由于
边缘检测是图像分割、目标区域的识别、区域形状提取等图像分析领域十分
重要的基础,是图像识别中提取图像特征的一个重要属性。图像理解和分析
的第一步往
往就是边缘检测。在工程应用中占有十分重要的地位,所以人们
一直在致力于研究和解决
如何构造出具有良好性质及好的效果的边缘检测算
子的问题。
本次的目的是从理论上对几种经典的边缘检测算法(
S obel
算子、
Robert
算子、
Pr iwitt
算子、
laplacian
算子及
Ca nny
算子)进行分析,并用实现这
些算法。最后,通过实例图像对不同
边缘检测算法的效果进行分析,找出各
种算法的适用范围。
11
二、算法分析与描述
2.1
基于一阶微分的边缘的检测
1
、
Sobel
算子
Sobel
算子和
P rew it t
算子都是一阶的微分算子
,
都是先对图像进行
平
滑处理
,
虽然两者都是加权平均滤波
,
但是前者邻域的像素对当前像素产生
的影响不是等价的
,
距离不同的像素具有不同的权值
,
对算子结果产生的影响
也不同。这两种算子对噪声都有一定的抑制作用
,
但不能完全 排除检测结果中
出现虚假边缘的情况。这两者对灰度渐变低噪声的图像有较好的检测效果
,
但
是对于混合多复杂噪声的图像处理效果就不理想了。
正如前面所讲,
采用
3
?
3
邻域可以避免在像素之间内插点上计算梯度.
考
虑一下上图中所示的点
[
i
,
j
]
周围点的排列.
Sobel
算子也是一种梯度幅值,
2
2
M
?
s
x
(1
.
1)
?
s
y
其中的偏导数用下式计算:
s
x
?
(
a< /p>
2
?
ca
3
?
a
4
)
?
(
a
0
?
ca
< p>7
?
a
6
)
s
y
?
(
< p>a
0
?
ca
1
p>
?
a
2
)
?
(
a
6
?
ca< /p>
5
?
a
4
)
(1
.
2)
其中常数
c
?
2
和其他的梯度算子一样,
s
x
和
s
y
可用
卷积模板来实现,如图
1.1
所示:
?
1
0
1
1
2
0
1
0
s
x
?
?
2 p>
0
2
?
1
0
1
s
y
?
0
?
1
?
2
?
1
图
1
.
1
< br>请注意这一算子把重点放在接近于模板中心的像素点.
Sobel
算子是边 缘检测
器中最常用的算子之一.
a
0
a
7
a
6
p>
a
1
a
2
[
i
,
j
]
a p>
3
(图
1
.
2
)
< /p>
a
5
a
4
11
图
1
.
2 < /p>
用于说明
Sobel
算子和
Prewitt
算子的邻域像素点标记
Prewitt
算子与
Sobel
算子的方程完全一样,只是常量
c=1
.所以
?
1
0
1
s
x
?
1
0
1
s
y
?
?
1
0
1
1
0
1
0
1
0
(1
.
3)
?
1
? p>
1
?
1
请注意,与
Sobel
算子不同,这一算子没有把重点放在接近模板中心的像素
点如图
1.3
所示
2
、
Robert
算子
Robert
算子边缘检测算子也叫交叉差分算子,
是一种利用局部差分寻找
边缘的算子,用
2
?
2
领域的处理。
边缘,是指周
围像素灰度有阶跃变化或屋顶等变化的那些像素的集合。图
像的边缘对应着图像灰度的不
连续性。显然图像的边缘很少是从一个灰度跳
到另一个灰度这样的理想状况。真实图像的
边缘通常都具有有限的宽度呈现
出陡峭的斜坡状。
边缘 的锐利程度由图像灰度的梯度决定。
梯度是一个向量,
?
f
指出灰度变化最快的方向和变化量。
?
f
?
(
?
f
?
f
,
)
(1.5)
?
x
?
y
< br>2
2
?
?
f p>
?
?
?
f
< br>?
?
?
f p>
?
?
?
?
?
(
1.6
)
?
?
?
?
x
?
p>
?
?
y
?
< br>
?
?
f
?
p>
?
?
y
?
< br>?
?
?
?
(1.7)
?
f
?
?
?
x
?
?
梯度大
小由确定。而梯度方向则由确定,因此最简单的边缘检测算子是用图像
的垂直和水平差分
来逼近梯度算子:
?
f
?
< p>(f
?
x
,
y
?
?
f
?
x
?
1
,
y
?
,
f
(
x
,
< p>y)
?
f
(
x
,
y
?
1
))
(1.8)
因此当我们寻找边缘的时候,最简单的方法是对每一个像素计算出(
1.8
)
的向量
,
然后求出它的 绝对值。利用这种思想就得到了
Roberts
算子:
11
g
(
x
,
y
)
?
{[
f
(
x
,
y
)
?
f
(
x< /p>
?
1
,
y
?
1
)]
?
[
f
(
x
,
y
?
1
)
?
f
(
x
?
1
,
y
)]
}
2
(1.9)
其中
f(x,y)
是具有整数像素坐标的输入图像。 p>
其中
g(x,y)
由下面的模板计算:
G
x
?
1
0
2
2
1
0
?
1
G
y
?
0
1
(1
.
3)
1
0
同前面的
2
?
2
梯度算子一样,差分值将在内插
点
[x+1/2;y+1/2]
处计
算.
Roberts
算子是该点连续梯度的近似值,而不是所预期的点
[x,y] p>
处的近
似值。
3
、
laplacian
算子
平滑过的阶跃
边缘二阶导数是一个在边缘点处过零的函数。拉普拉斯算子
是二阶导数边缘算子。函数<
/p>
f
(
x
,
y
)
的拉普拉斯算子公式为
?
< br>2
f
?
2
f
?
f
?
2
< br>?
2
(1
.
7)
?
x
?
y
2
x
和
y
方向上的二阶偏导数近似如下:
5
(1
.
8)
这一
近似式是以点
[x,y+1]
为中心的。用
y-1
替换
y
,得到
?
2
f
?
(
f
[
i
,
j
?
1
]
?
2
f
[
i
,
j
])
?
f
[
i< /p>
,
j
?
1
]
(1
.
9)
?
x
2
它是以点
[
i
,< /p>
j
]
为中心的二阶偏导数的理想近似式,类似地,
?
2
f
2
?
(
f
[
i
?
1
,
j
]
?
2
f
[
i
, p>
j
])
?
f
[
i
?
1
,
j
]
(1
.
10)
?
y
把这两个式子合并为一个算子,
就成为下面能用来近似拉普拉斯算子的模板:
?
0
1< /p>
0
?
?
?
2
?
?
?
1
?
4
1
?
?
?
0
1
0
?
?
(
1
.
11)
当拉普拉斯算子输出出现过零点时就表明有边缘存在,
其中忽略无意义的
11
过
零点
(
均匀零区
)
。原则上,过零点的位置精度可 以通过线性内插方法精确
到子像素分辨率,不过由于噪声,结果可能不会很精确。
4
.
Canny
算子
< /p>
检测阶跃边缘的基本思想是在图像中找出具有局部最大梯度幅值的像素点。
检测阶跃边缘的大部分工作集中在寻找。
Canny<
/p>
边缘检测器是高斯函数的一阶导数,是对信噪比与定位之乘积的最优
化逼近
算子
[Canny 1986]
。我们将通过下面的符号对
Can ny
边缘检测器算法作一
概括说明。用
I
[
i
,
j
]
表示
图像,使用可分离滤波方法求图像与高斯平滑滤波器卷
积,得到的结果是一个已平滑数据
阵列
S
[
i
,
j
]
?
G
[ p>
i
,
j
;
?
< br>]
?
I
[
i
,
j
]
,
其中
?
是高斯函数的散布参数,它控制
着平滑程度。
已平滑数据阵列
S
[
i
,
j
]
< p>的梯度可以使用
2
?
2
一阶有限差分近似来计算
x
与
y<
/p>
偏导数的两个阵列
P
[
i
,
j
]
与
Q
[
i
,
j
]
:
P
[
i
,
j p>
]
?
(
S
[
i
,
j
?
1
]
?
S
[
i
,
j
]
?
S
[
i
?
1
, p>
j
?
1
]
?
S
[
i
?
1
,
j
])
/
2
(1
.
12)
Q
[
i< /p>
,
j
]
?
(
S
[
i
,
j
]
?
< p>S[
i
?
1
,
j
]
?
S
[
i
,< /p>
j
?
1
]
?
S
[
i
?
1
,
j
< p>?1
])
/
2
在这个
2
?
2
正方形内求有限差分的均
值,以便在图像中的同一点计算
x
和
y
的
偏导数梯度。
幅值和方位角可用直角坐标到极坐标的坐标转化公式来计算:
p>
M
?
i
,
j
?
?
P
[
i p>
,
j
]
2
?
Q
[
i
,
j
]
2
(1
.
13)
?
[
,
j
]
?
arctan p>
(
Q
[
i
,
j
]
/
P
[
i
,
j
]
)
(1
.
14)
其中,反正切函 数包含了两个参量,它表示一个角度,其取值范围是整个
圆周范围内。为高效率地计算这
些函数,尽量不用浮点运算.梯度的幅度和方
向也可以通过查找表由偏导数计算。
11
三、详细设计过程
1
、分析
图像的大部分主要信
息都存在于图像的边缘中,主要表现为图像局部特征
的不连续性,是图像中灰度变化比较
剧烈的地方,即通常所说的信号发生奇异
变化的地方。奇异信号沿边缘走向的灰度变化剧
烈,通常将边缘划分为阶跃状
和屋顶状两种类型如图
3.1
所示。阶跃边缘中两边的灰度值有明显的变化;而
屋顶状边缘位于灰度增加与减少的交
界处。在数学上可利用灰度的导数来刻画
边缘点的变化,对阶跃边缘、屋顶状边缘分别求
其一阶、二阶导数。
图
3.1
阶跃边缘和屋顶状边缘处一阶和二阶导
数变化规律
p>
(
其中第一排为理想信号,
第二排对应实际信号
)
2
、工作流程分析
11
系
统工作流程较为简单,功能用于对图像进行边缘检测,工作流程并不
复杂。
双击
ch1_
文件,系统界面就出现了,点击文件, 然后选择打开,
打开
BMP
格式的图片文件,此时图片就 会显示在工作区域;主要模块的系统
过程如图
3.2
所示
Sobel
算子
Robert
算子
Priwitt
算
子
开
读取待测图
片
边
缘
检
测
laplacian
算子
Canny
算子
保存
退出
图
3.2
4
、一阶微分算法的实验结果与分析
(1)Sobel
算子公式的定义为:
p>
G
X
(
x
,
y
)
?
|
f
( p>
x
?
1
,
y
?
1
)
?
2
f
(
x
,
y
?
1
)
?
f
(
x
?
1
, p>
y
?
1
)
?
f
(
x
?
1
,
y p>
?
1
)
?
2
f
(
x
,
y
?
1
)
?
f
(
x
?
1
,
y
?
1
)
| p>
G
y
(
x
,
y
)
?
|
f
( p>
x
?
1
,
y
?
1
)
?
2
f
(
x
?
1
,
y
)
?
f
(
x
?
1
, p>
y
?
1
)
?
f
(
x
?
1
,
y p>
?
1
)
?
2
f
(
x
?
1
,
y
)
?
f
(
x
?
1
,
y
?
1
)
| p>
(2)
实验结果分析
以
cameraman
图片为例,用
Sobel
< p>算法,分别给检测结果。
理论上
Sobel
算子可以轻易在空间上实现,
Sobel
边缘检测器 不但可以产生
11
较好的边缘检测效果由
5.2
图可以看出
Sobel< /p>
算子虽然检测到的边缘信息很
丰富,也较为连续,但是边缘很模糊,严重的
影响了视觉效果。
(4)Robert
算子的公式定义为:
g
(
x
,
y
)
?
{[
f
(
x
,
y
)
?
f p>
(
x
?
1
,
y
?
1
)]
?
[
f
< p>(x
,
y
?
1
)
?
f
(
x
?
1< /p>
,
y
)]
}
2
(5)Prewitt
算子:
2
2
1
Prewitt
算子与
Soble p>
算子不同的地方在于没有把重点放在接近模板中心
的像素点。
Prewitt
算子首先进行邻域平均或加权平均
,
然后进行微分 。
(6)
实验结果分析
以
cameraman
图片为例,分 别用
Roberts
、
Prewitt
两种算法, 分别给检测
结果。
通过图
5.3
和图
5.4
知,
Robe rts
算子、
Prewitt
算子,都能够比较准确
的检测出图像的边缘。
基于一阶微分的 边缘检测算子具有实现简单、运算速度快等特点,检测结
果不可靠,不能准确判定边缘的
存在及边缘的准确位置,造成这种情况的原
因:
(1)
实 际边缘灰度与理想边缘灰度值间存在差异,这类算子可能检测出多
个边缘;
(2)
边缘存在的尺度范围各不相同,这类算子固定的大小不利于检测
出不同尺度上的所有边缘;
(3)
对噪声都比较敏感。
5
、二阶微分算法的实验结果与分析
< br>(
1
)
Laplacian
算子的公式为:
?
2
f
?
2
f
?
f
?
2
?
2
?
x
?
y
2
(
p>
2
)
Canny
算子的公式为:
S
[
i
,
j
]
?
G
[
i
,
j
;
< br>?
]
?
I
[
i p>
,
j
]
(
3
)实验结果分析
以
cameraman
图片为例,分 别用
Laplacian
、
Canny
两种算法, 分别给检测
结果。
由图< /p>
5.5
可以看出
Laplacian
算子:对图像中 的阶跃性边缘点定位准确。
Canny
:采用高斯 函数对图像进行平滑处理,该算子也将一些高频边缘平滑
11
掉,造成边缘丢失,采用了双阈值算法检测和连接边缘,边缘
的连续性较好。
Laplacian
算子是对二维 函数进行运算的二阶导数算子,与方向无关
,
对取
向不敏
感,
因而计算量要小。
根据边缘的特性,
Laplacian p>
算子可以作为边缘
提取算子,计算数字图像的
Laplaci an
值可以借助模板实现,它相当于高通
滤波,
常会出现 一些虚假边缘。
Canny
算子是一个具有滤波、
增强和检测的多
阶段的优化算子。
在进行 处理前,
Canny
算子增强边缘是将邻域
(或局部)
< p>强度值有显著变化
的点突出来,
一般通过计算梯度幅值来完成。 p>
Canny
分割算法采用一阶偏导的
有限差分来计算梯度的幅
值和方向。对一个边缘来说,其一阶导数在边界处
存在一个向上的阶跃,
或者其二阶导数过零点。
在处理过程中,
Canny
算法还
将经过一个非极大值抑制的过程。最后
Canny
算法将采用两 个阈值来连接边
缘。
但也有不足之处,
Canny
算法对整幅图像采用同一高斯函数进行滤波,
无
法顾及图像局部
特征信息,边缘检测的阈值需要预先设定。先确定一个阈值
系数,该系数定义为梯度小于
阈值的像素数所占边缘像素总数的比例,以此
来确定阈值。这种方法没有利用图像自身的
信息,不具有自适应能力。
11
四、调试过程中出现的问题及相应解决办法
Matlab
语言是一种解释执行的语言,
它灵活、 p>
方便,
其调试程序手段丰富,
调试速度快。
。
Matlab
语言与其它语言相比,把编辑、编译、连接和执行融为
一体。它能在同一画面上进行灵活操作快速排除输入程序中的书写错误、语
法
错误以至语意错误,从而加快了用户编写、修改和调试程序的速度,可以
说在编程和调试
过程中它是一种非常简单的语言。
但之前并没有熟悉
M atlab
的编译,出现直接把程序复制粘贴的错误,后来
才学习正确的
编译运行过程。
代码在运行过程中的错误:
[filename, pathname] = uigetfile( ...
{'*.bmp;*.jpg;*.png;*.jpeg', 'Image
Files (*.bmp, *.jpg, *.png,
*.jpeg)';
...
'*.*', 'All
Files (*.*)'}, ...
'Pick an
image');
axes(_src);
fpath=[pathname filename];
此
代码缺少了
imread
读入图片,因此不能够正确的运行。应在代码后面加入< /p>
如下代码:
img_src=imread(fpath);
11
五、程序运行截图及其说明
1
、图
5.1
:是原图,做为参考图片
图
5.
2
、
图
5.2
:
是
Sobel
算子运行出来后的图 片,
能检测到的边缘信息较为连续,
但边缘很模糊。
图
5.2
11
3
、图
5.3
:是
Roberts
算子运行出来后所得的图片, 但边缘较细。
图
5.3
4
、图
< p>5.4:是
Prewitt
算子运行后的图片,所得的图片精 度不高,边缘较粗。
图
5.4
11