在一幅城市交通地图中,存在很多特殊符号(如医院“
”、电信“
”、政府“
”等),如果能够准确、快速地定位、识别出这些符号,将可以实现在矢量地图中对以上信息的自动添加;同时,由于这些符号(特别是医院和电信的符号)内部颜色和道路颜色相似甚至相同,在道路信息识别过程中引起误识别;而且,在有些地图上,这些特殊符号(特别是政府的标志)既位于道路上又位于区域上,如果能首先将这些特殊符号识别出来,并运用一定的处理方法将这些特殊符号进行分割处理,划归道路或区域,则使得后期处理更加方便、快捷、准确。
基于模板匹配的方法在地图中特殊符号自动识别方面的研究工作已经很多,但是模板匹配方法计算量大,严重影响识别的速度。通过提取医院符号的特征,并运用MATLAB[86-90]强大的图像数据处理能力实现了对栅格地图中医院符号的快速、准确识别。

图5-1 医院“十字”符号的灰度值表格
5.1 特征提取
为了研究“十字”符号的特征,只有从它的颜色特征着手。如图5-1 所示,为医院“十字”符号的灰度值表格,共17*17 个像素,每个空格表示一个像素,空格内的数字为本像素的灰度值。
从图5-1 中可以看到区域中心有很多像素的灰度值为251,这和表示道路的白色的灰度值255 很接近;同时有很多灰度值为95 的像素环绕这个“十字”,其实这就是我们看到的红色像素。而且在红色像素和白色像素之间还有很多其它噪声像素,这些其实是红白两色之间的过渡色。以上可以说是医院“十字”符号的基本特征。
根据以上的特征,建立“十字”符号的理想模型,如图5-2 所示:

图5-2 “十字”符号的理想模型
通过对理想模型的研究,抽取特征参数如下:
(1)h_white,表示“十字”符号中心白色像素灰度值的最小值,因为“十字”符号中心白色一般接近于道路颜色,即总是小于但接近于255,对本文所研究图源,此参数取值为250 即可,一般不需调整。
(2)h_red,表示“十字”符号外围红色像素的灰度值,对于本文所研究图源,取值为95,一般不需调整。
(3)h_diffred,表示与“十字”符号外围红色像素灰度值之间的差值,这个误差主要是由于在印制地图的过程中着色上的误差以及色彩的相互影响引起的,比如有的地图上h_red 为93 而非95。但是在正常情况下,这个误差不会很大,所以这个参数一般不需调整,在本文所研究的图源中取值为5。
(4)h_max,表示“十字”符号中心点与周围红色像素点距离的最大值,即中心点与一级匹配特征点之间距离的最大值,对于本文所研究的图源,一般取值为8 到10。
(5)h_min,表示“十字”符号中心点与周围红色像素点距离的最小值,即中心点与一级匹配特征点之间距离的最小值,对于本文所研究的图源,一般取值为4 或5。
(6)h_sim,表示被检测出来的“十字”符号中心位置的相似度,对于本文所研究的图源,一般取值为3 或4。
(7)h_tilt,表示“十字”符号中心点与二级匹配特征点的距离,对于本文所研究的图源,一般取值为3。
有了这七个参数之后,我们就可以运用特征匹配法实现地图中“十字”符号的快速识别。
5.2 算法设计
为了使得本程序更容易理解,采用伪码说明。
5.2.1 一级匹配
设置一个空矩阵,用来存储检索出来的可能的“十字”符号的中心位置坐标扫描待识别地图(边缘部分不处理)
如果 当前像素点的灰度值大于参数h_white
那么 以当前点为中心建立直角坐标系,顺序检查0°、90°、180°、270°方向上的像素如果 某个像素的灰度值与h_red 的差值小于h_diffred
那么 停止此方向上的搜索,并记录此位置
否则 继续搜索
如果 四个方向上所记录的位置都符合大于h_min 且小于h_max 的条件
那么 记录当前的坐标中心点(即当前考察的位置点)
否则 不做任何纪录否则 继续扫描地图其他像素点
说明:程序第四行的顺序检查各个方向上的像素,表示并非每个方向都作检查,只有在此方向上所搜索到的位置符合大于h_min 且小于h_max 的条件,才进行下一个方向的搜索,这样,可以减少运算量,省略了大量的冗余的不必要的工作,节省运算时间,加快检索速度。这个过程可以称为一级匹配。
5.2.2 二级匹配
经过一级匹配过程,可以把所有的“十字”符号所在的位置识别出来,但是会有一些误识别,即产生假点。因为我们的特征还没有用完,所以有很多不是“十字”符号所在位置的位置被识别出来。而且,因为“十字”符号的中心点并非单像素组成,所以,会有多个中心被检测出来,就需要将这些表示同一个“十字”符号的中心位置合并,并且取这些点的平均值并取整,就得到了真正的中心点的位置坐标。利用MATLAB强大的矩阵处理能力,很容易完成。下一步就是检测这些候选位置是否为假点,程序如下:
将位置矩阵中的每个坐标表示的位置,均再次进行检测,同样要以被检测点为坐标原点
检查离坐标原点距离为h_tilt 的45°、135°、225°、315°方向上的4 个像素点的灰度值,即检查4 个二级匹配特征点的灰度值如果 存在某个灰度值与整幅地图中表示道路的灰度值接近或相同
那么 此坐标原点为假点,删除此点
否则 此坐标原点是真的中心点,保留此点检测下一个位置点
这个过程可以称为二级匹配,因为经过一级匹配后,检测出来的可能位置点就只有很少了,所以二级匹配只需要检测少数位置即可。这个过程更是大大地减少了运算量,运算时间比通用的模板匹配法要少得多。
5.3 实验结果
下面以北京市地图的一部分为例,说明检测的准确性:
如图5-3 所示,为北京市地图的一部分,大小为500*500 像素,可以看出共有6 个医院的“十字”符号标志,而运用特征点匹配算法检测出来的六个位置坐标为(27,64)、(417,66)、(230,239)、(81,331)、(325,397)、(399,487)。如图4 所示,将检测出来的位置作“蓝色十字”标记,可以看出,图5-4 中被标记“蓝色十字”标记的位置就是医院“十字”符号的中心位置,当然由于,医院的“十字”标记中心白色为双像素组成,而标记中心位置的“蓝色十字”是单像素的,所以看来有些偏离。
图5-3 北京市地图的一部分(500*500)

图5-4 检测出来的“十字”符号中心位置用蓝色“十字”标记
利用本文所介绍的特征匹配算法,处理了中国公路交通图册(光盘版)(地质出版社地图编辑室所编制)中很多城市地图,没有出现误识别(包括过识别和欠识别)现象。
5.4 结论
根据特征匹配法和模板匹配算法本身的搜索方法来看,特征匹配算法要快速,从实际的运算时间来看也的确如此。而且,从实验结果可以知道,特征匹配算法和模板匹配算法一样都很准确,不会出现误识别现象。
这样,就为以后矢量地图信息的自动添加奠定了基础,同时,因为在某些时候这些特殊符号会既位于区域又位于道路,所以将这些特殊符号检测出来之后,如果能够找到一种方法(目前正努力进行这方面的研究),将这些特殊符号进行分割处理,就使得以后的道路提取提供了方便,解决了特殊符号在道路识别过程中引入误差的问题。


