一种简单易行的灰度图像边缘检测方法_王小明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一种简单易行的灰度图像边缘检测方法
王**
(广东工业大学计算机学院,软件工程专硕,学号2111505***) 摘要:基于对图形图像处理的理解,提出一种简单易行的边缘检测方法。在此方法中我们通过比较相邻
像素点的灰度值来决定为某个像素设置相应的颜色,该方法中我们将检测出的边缘像素点设成黑色或白色。其思想是,尝试像艺术家速写那样勾勒线条。实验表明:该方法对灰度图像是一种简单,易行的边缘检测方法。
关键词:边缘检测;灰度值;阈值选取
引言
边缘是图像的最重要的特征之一,往往携带着一幅图像的大部分信息,它反映了图像中一个物体区别于其他物体最基本的特征[1]。所谓边缘是指其周围像素灰度值有明显变化(阶跃变化或屋顶变化)的那些像素的集合。边缘广泛存在于目标与背景之间、目标与目标之间、区域与区域、基元与基元之间。边缘检测是基于边界的图像分割方法,是采用某种算法来提取出图像中对象与背景间的交界线。边缘检测是实际中许多图像处理应用的基础,目前,数字图像边缘检测技术广泛应用于图像分割、运动检测、目标跟踪、人脸识别等领域[2],因此研究图像边缘检测与提取方法具有重要的理论意义和现实意义。
传统的图像边缘检测是利用图像一阶导数的极值或二阶导数的过零点信息来提供判断边缘点的依据。利用一阶微分的算子有Roberts、Sobel、Prewitt、Kirsch,利用二阶微分的算子有Laplace、LOG等[3]。近些年人们将模糊理论、统计分析、小波变换、数学形态学,神经网络、遗传算法、曲面拟合等与边缘检测联系起来,提出了许多新的边缘检测算法[4]。以上的这些算法各有优点,但是对于初学者来说不易理解,难于操作。
我们可以从人物的线条画中识别出人脸或其他特征,这真是视觉系统的一项重要的特性。现实的世界中,并没有明显的线条定义世界的特征。例如鼻子和眼睛周围没有明晰的线条,但任何一个小孩都能画出一张脸,一个勾代表鼻子,两个圈代表眼睛——而且我们都能认出那是一张脸。通常,在有亮度差别的地方,我们就能看到一条线[5]。在灰度图像中,灰度值间接的表明了某一像素的亮度。对此我们提出了一种简单的基于灰度值比较的灰度图像边缘检测方法。
1 基于灰度值比较的边缘检测算法的分析与设计
1.1 算法简单概述
遍历所有像素点,把每个像素点的灰度与它下面的和右边的像素进行比较。如果该像素点与下面和右边都有适当的灰度差,那么我们就把该像素点置成白色,否则,把它置为黑色。
1.2 获取像素点的灰度值
对于RGB转灰度,有一个很著名的公式:
Gray = R∗0.299 + G∗0.587 + B∗0.114
而实际应用时,我们希望尽量避免低速的浮点运算,所以需要整数算法。因此可以将它们缩放1000倍来实现整数运算:
Gray =(R∗299 + G∗587 + B∗114 + 500)/1000
上面的整数算法已经很快了,但是有一点仍制约速度,就是最后的除法。移位比除法更快,所以我们最后选用整数移位算法,如式(1)所示:
Gray =(R∗38 + G∗75 + B∗15)>> 7 (1)
1.3 判断像素点是否为边缘点
使用1.2的方法,我们可以获得当前像素点的灰度值now,下方像素点的灰度值down,右方像素点的灰度值right 如果当前像素点的灰度值与下方像素点,右方像素点的差值都大于一个阈值T,则该点为边缘点。综上所述边缘点的判断可以表示为式(2),式(3):
if (|now−down|>T)and (|now−rigℎt|>T)推出
⇒ is edge (2)
if (|now−down|≤T)and (|now−rigℎt|≤T)推出
⇒ isn′t edge (3)
其中T为阈值,实验发现,用10做阈值效果最佳。我们稍后会在1.5中展示不同阈值的实验结果。
1.4 设置像素点的颜色
通过1.3的计算,我们便可以很容易的判断一个像素是否为边缘点。如果该像素是边缘点,设置其颜色为白色,如果不是边缘点则设置其像素颜色为黑色。
1.5 阈值T的选择
通过实验对比,我们发现当T为10时,边缘检测效果最佳。图a,图b和图c分别是阈值为T=5, T=10, T=20时边缘检测的结果。
图a T = 5 图b T = 10
图c T = 202 实验及分析
以下结合灰度图像测试实例在Python 2.2.1上,对算法进行测试和分析。这里没有与其他的传统经典算法进行比较。该实验只说明了算法的可行性。图d1和 图e1分别是Lena 原图和Flower 原图,图d2,e2分别是当阈值T 为10时使用本文边缘检测算法提取到较好的边缘效果。
图d1 Lena
图d2 T = 10
图e1 Flower
图e2 T = 10 观察以上结果可以看到,图d2,图e2分别都可以看到清晰的轮廓边缘,根据实验结果分析可知,对于灰度图片,该算法具有一定的边缘检测能力。
3 结束语
本文根据相邻像素点的灰度的差值,提出了一种简单易行的基于判断灰度差值是否大于指定阈值,来确定该像素点是否为边缘点的边缘检测方法。
该方法遍历图像中的每个像素点,
当其灰度值与右边及下面的灰度值相差大于阈值的时候,可以判断该点为边缘点。通过改变该点的颜色为白色,绘制出该图像的边缘检测图。通过对实验结果进行观察与分析,我们发现实验结果图片呈现出很清晰的边缘轮廓,从而得知该方法具有一定的可行性。边缘检测和线条绘制还有更好的算法。这里我们只是将各个像素设成黑色或白色,没有真正考虑“线”的概念。我们可以使用图片模糊这样的技术来平滑图像,使各个点连起来更像一条线。我们也可以在修改像素时考虑它附近的像素,仅在附近像素也要置成黑色时才把它置黑;也就是绘制一条线而不只是画点,这也是其他传统经典算法所做的工作。
参考文献:
[1] 孙亮, 李敬文.一种简单的灰度图像边缘检测算法[J].兰州交通大学学报, 2013, 32(1):111-115.
[2] 曾俊. 图像边缘检测技术及其应用研究[D]. 武汉:华中科技大学, 2011.
[3] 甘金来. 图像边缘检测算法的比较与研究[D]. 成都:电子科技大学, 2005.
[4] 陈宇云. 灰度图像的边缘检测研究[D]. 成都:电子科技大学, 2009.
[5] Mark J. Python计算机与编程实践多媒体方法 [M]. 北京:机械工业出版社 , 2012, 93-94.