第6节 城市交通地图边缘检测算法
推荐给好友
打印
加入收藏
更新于2008-06-15 22:25:40

在图像处理过程中,图像的边缘检测是进行图像分析与识别的重要步骤。目前,学术界有很多种边缘检测的方法,最常见的有微分算子法、样板匹配法、边界及曲线增强技术、小波边缘检测、边缘聚焦、纹理边缘检测、神经网络边缘检测等[91-94]。它们针对自然界的不同图像有着各自不同的优缺点。近年来,不断有学者针对不同的处理对象及处理目标提出新的各式各样的边缘检测算法[95],其中Canny 算法是一种非常有效的边缘检测方法,该方法相对于其它方法来说,可以体现更多的边缘细节[71, 73]。

地图不同于一般的自然图像,他是人为制造的用于指示使用者辨明方位和发现特殊标志(如特殊建筑、道路及特殊场所等)的非自然的特殊图像,这就使得当前很多数字图像处理方法并不适用于地图的处理。

在对城市交通地图的道路、区域、特殊符号及文字等的识别过程中,往往需要对地图进行边缘检测,然后进行如边缘连接、特征检测、背景估计等处理。现有的边缘检测方法,应用于地图模式识别,往往信息损失过大,有用信息被过早滤除。根据以上情况,提出一种新的基于灰度图像的边缘检测算法,该方法主要针对城市交通地图的边缘检测,并通过实验与现有边缘检测方法对地图边缘检测的结果进行比较。

6.1 算法的基本思想

现有的城市交通地图一般为24 位彩色位图,为了便于计算,故将24 位彩色位图转化为8 位灰度图。设地图的灰度矩阵为:

 

其中,,m 和n 分别表示图像的高和宽,i 和j 表示像素在图像矩阵中的坐标。

地图的边缘线可以看成是由一些线段组成,假设这些线段所在直线的斜率为p,则当 ≤1 时,称此线段为横向边缘;当  ≥1 时,称此线段为纵向边缘。

首先,对地图中各个像素进行横向扫描,得到其纵向边缘,然后再进行纵向扫描,得到其横向边缘,两次扫描结果的叠加就得到了地图的完整边缘。

分析地图灰度矩阵的每一行或每一列,当某个像素与其相邻像素均不相同时,可以认为此像素点为准边缘像素;当出现连续两个及以上相同像素时,可以认为此类像素为非准边缘像素(并不表示最终结果中一定为非边缘像素)。非准边缘像素都是连续出现的,在任何两类连续非准边缘像素(并不表示这两类连续非准边缘像素为不同灰度值,可以为同值像素也可为异值像素)之间总是存在一些准边缘像素。然后就在这些准边缘像素和连续非准边缘像素的最边缘一个像素中寻找边缘像素。

如图6-1 所示,以行像素为例,说明地图中各种不同的像素临界情况,内有一个自然数的方格代表一个像素,内中的自然数表示不同的灰度值。


图6-1 各种边缘示意图

图6-1(a)中灰度值为1 的像素连续出现3 个,灰度值为2 的像素连续出现5 个,所以它们属于两类不同灰度值的连续非准边缘像素,而且这两类连续非准边缘像素之间是没有准边缘像素出现的的,这种突变情况,就在相邻的两个不同灰度值像素中任选一个作为边界像素。

图6-2(b)中灰度值为1 的像素连续出现2 个,灰度值为3 的像素连续出现5 个,所以它们属于两类不同灰度值的连续非准边缘像素,灰度值为2 的像素与左右相邻像素均不相同,所以它属于准边缘像素,这种在连续非准边缘像素之间仅有一个准边缘像素的情况,显然应该是将灰度值为2 的唯一的一个准边缘像素作为边缘像素。

图6-1(c)与图6-1(b)相似,但是在灰度值为1 和灰度值为6 的两类连续非准边缘像素间存在灰度值分别为2、3、4、5 的4 个准边缘像素,对于这种在两类连续非准边缘像素之间存在大于1 个准边缘像素的情况,选择边缘像素所遵循的原则如下:

设两类连续非准边缘像素的灰度值为cia  和 cib ,在它们之间的准边缘像素的灰度值为ciu  ,a<u<b。分别计算准边缘像素灰度值与非准边缘像素灰度值之间的差值: ,然后再求差值的差值: ,当某个u 使得D 最小时,坐标为(i, u)的像素点则为边缘像素点。

图6-1(d)与图6-1(c)相似,只是两类连续非准边缘像素的灰度值相同罢了,这样如果与图6-1(c)的处理方法相同,则因为cia = cib,所以对于任意u,都存在 Du  = 0,此方法失效。在这种情况下,令 ,当某个u 使得Du  最大时,坐标为(i, u)的像素点则为边缘像素点。

图6-1(e)中灰度值为1 的准边缘像素处于整幅地图的左边界,这种情况下它就被认为是边缘像素。

图6-1(f)中灰度值为4 的准边缘像素处于整幅地图的右边界,在它的左边还有灰度值为2 和3 的准边缘像素,这种情况下,在这几个准边缘像素中搜索使得 最大的准边缘像素,即为所求的边缘像素。

6.2 算法描述

本文算法通过MATLAB[86-90]语言实现,以横向搜索为例如下:

定义一个记录边缘像素的与所处理地图等大小的二维矩阵,为了节省内存,将此矩阵数据类型设定为BOOL 型,1 表示边缘像素,0 表示非边缘像素

设定一个变量用来记录连续非准边缘像素中与准边缘像素左相邻的非准边缘像素位置,称为起始像素位置,a=0,设定为0 即表示记录为空

设定一个变量用来记录连续非准边缘像素中与准边缘像素右相邻的非准边缘像素位置,称为中止像素位置,b=0,设定为0 即表示记录为空

对于边缘像素的搜索就是在当a 和b 均为非空时在从a 到b 之间的像素中搜索

从上到下,逐行扫描

在每一行中,从左至右逐点扫描
        如果  当前像素与其右边像素不同 
                 如果 当前还没有检测到起始位置,即a=0 
                            则当前位置标记为起始位置
        否则 
                 如果 已经检测到起始位置,即a~=0
                          将当前像素的后一个像素标记为中止位置
                          如果 起始位置是整幅地图的左边界像素,即图1(e)所示的情况
                                   在起始位置和中止位置之间进行搜索
                                            寻找其中使得u D 最大的像素的位置
                                                     记录找到的位置
                                   将最终找到的边缘像素的位置在边缘像素矩阵中记录下来 
                                   将起始位置归零(清除起始位置) 
                                   将中止位置归零(清除中止位置)
                           如果 起始位置并不是整幅地图的左边界像素
                                     如果 起始位置像素和中止像素的灰度值相同 
                                               在起始位置和中止位置之间搜索
                                                        寻找其中使得Du  最大的像素的位置 
                                                                 记录找到的位置
                                     否则
                                             在起始位置和中止位置之间搜索
                                                     寻找其中使得u D 最小的像素位置
                                                             记录找到的位置
                                     将最终找到的边缘像素的位置在边缘像素矩阵中记录下来 
                                     将起始位置归零(清除起始位置) 
                                     将中止位置归零(清除中止位置) 
            如果 当前像素的下一个像素是整幅地图的右边界像素
                    如果 已经检测到起始位置
                            在起始位置和整幅地图的右边界像素之间搜索
                                    寻找其中使得u D 最大的像素位置
                                            记录找到的位置 
                             将最终找到的像素在边缘像素矩阵中记录下来 
                             将起始位置归零(清除起始位置)
                             将中止位置归零(清除中止位置)

然后,再进行从左到右逐列的从上到下纵向扫描。

6.3 实验结果及分析

为了检查本算法的优缺点,此处选择两幅地图分别用不同的边缘检测算法(包括本文算法、Canny 算法、Laplacian 算法和Sobel 算法)进行边缘检测,并对结果进行比较。

如图6-2 所示,主要为了检验地图中的红色五角星的边缘检测情况,图6-2(c)为用本文算法检测边缘结果,与其他方法检测边缘结果相比较,可见对于五角星的边缘,本文方法的检测结果与人眼直接观测原图中五角星的边缘非常相近,五角星基本没有变形现象,边缘线虽然也出现非连续现象,但较之于Canny 算法的结果,要好得多,而且Canny 算法的结果中五角星边缘(特别是那个小五角星的边缘)发生了变形,同时大五角星的边缘线的非连续现象比较严重。对于红色的“省政府”三个汉字的边缘检测,可以看出本文算法的结果体现了文字的更多细节部分。

从图6-2(a)中可以看出,在市政府的左边有一条特殊道路,它不是用白色表示的,而是用一种黄绿色。在本文边缘检测算法的结果中仍然可以看到这条特殊道路的边缘,而在Canny 算法的边缘检测结果中却看不到这条特殊的道路了;在原地图中同样用这种黄绿色表示的“西一”路,本文算法很好地体现了其边缘线,而Canny 算法检测结果中则没有这条道路。

对于Laplacian 算法和Sobel 算法,无论对于特殊符号(标志)、道路还是文字的边缘检测,结果都不好,此两种检测算法不是很适于地图图像的边缘检测。


图6-2 针对地图中特殊标志及特殊道路边缘提取效果图

如图6-3 所示,是专门针对文字噪声的,包括道路上的文字噪声和区域上的文字噪声。如图6-3(c)所示,“动物园”,“中山公园”等文字噪声被很好地保留下来,细节部分也比较突出,虽然Canny 算法对于他们的边缘识别效果也很不错,但是细节部分信息不够丰富,被过早虑除。对于Laplacian 算法的边缘检测结果不如本文算法和Canny 算法,Sobel 算法更是把这些文字整个过滤掉了。

对于位于道路上的文字的边缘检测,由于道路上文字印刷质量不是太好,本文检测算法的结果看起来比较混乱,不如Canny 算法的检测结果简洁而且连续性较好。但是Canny 算法所检测出来的位于道路上的文字噪声的边缘虽然具有一定的连续性,但是很多文字单从其边缘线来看已经是无法辨认的了,当然本文算法更是无法辨认。但是这也正是地图边缘检测所需要的,Canny 算法过分强调了道路上文字噪声的边缘,却忽略了道路本身的边缘,甚至文字的边缘线的存在完全掩盖了道路的边缘线,这是在进行地图中道路边缘检测时不愿意看到的结果;本文算法的结果虽然整体看来信息过多,甚至人眼看来有一种混乱的感觉,在有文字噪声存在的地方,检测结果甚至出现云雾状现象,但是在云雾中包含(隐藏)了非连续的道路边缘点这些非连续的道路边缘点的存在,非常有利于后续的对道路的边缘的连接、跟踪、识别等处理。从图6-3(e)和(f)中可以看出利用Laplacian算法和Sobel 算法检测地图边缘时,信息损失量过大,不利于后续处理。

需要说明的是,如果对于一幅印刷质量非常差的城市交通地图,假设图6-3(a)的印刷质量很差,那么就会出现在“中山公园”等区域内的用色不均匀性,误差色彩和正确色彩交替出现,由于本文所提出的边缘检测算法对地图中的色彩变化非常敏感(因为要保证有用信息被充分检测出来, 保持如五角星等特殊标志的边缘的连续性和不变形性),则导致区域内部出现云雾状的边缘点的存在,这种情况不利于后续处理,但是很少发生。也就是说本文算法不适用于那些印刷质量太差,存在大面积用色误差的地图。


图6-3 针对地图中文字噪声及道路边缘检测效果图

6.4 结论

从实验结果及与其它边缘检测算法结果的比较中,可以看出,针对地图图像的边缘检测问题,本文给出的方法不仅能够有效地检测边缘信息,而且信息量丰富,对道路、区域、特殊符号的边缘非常敏感,有利于如边缘连接,特征检测及背景估计等后续处理。

 

<<上一节    下一节>>




 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.