张 生,李龙澍
(安徽大学计算机科学与技术学院,安徽 合肥 230601)
NAO是一款高性能双足机器人,2007年被Robo-Cup的组委会选定为标准平台。在标准平台组比赛中,NAO机器人感知外界最主要的方式是对图像的处理,机器人的白色外壳和摄像头各个方向的旋转以及身体的晃动,都增加了图像识别的难度,需要确定拍摄图像时机器人的位姿[1]。在比赛中,NAO要识别的目标有:球、球门、绿色地毯、机器人的腰带、场地白线、点球的位置和机器人,其中前4个目标都是有特定颜色的,识别相对简单,而场地线和移动的机器人都是白色的,使场地线的识别复杂很多。
根据球场上的实际情况,按球场目标的特定颜色,将球场图像按颜色分割[2],然后沿白色边缘遍历并将边缘分割再分类,分割点是那些不可导点或导数为零的点,再分析每个类是直线还是球场中间的圆弧,最后对得到的分类结果进行综合分析。此方法沿着白色边缘遍历,避免了图像扫描时的盲目性,加快了直线识别算法的速度。该识别方法的流程如图1所示,主要是中间的3步,本文将依次进行分析。
图1 直线识别流程图
通过图像的颜色分割,球场外的点一般会成为未知点,这样能很容易找到球场边界[3]。NAO机器人提供的原始图像格式是YUV422,但是一般都直接使用原始图像来避免格式转换[4]的开销。
颜色表是一个三维的数组,每维分别代表Y、U和V,数组值存放颜色种类,如用0代表未知颜色,1代表红色等,将维数[3]分别设置为64、64和64已经足够满足要求。颜色表需要手动采集像素来建立,这是在机器人比赛开始前的调试时离线建立的,比赛中用到的是建立好的颜色表。
按颜色表分割得到的图像一般会有一些和实际不一样的颜色点出现,例如机器人身上有绿色点,有时本应为绿色地面可能出现白色或未知颜色等,这种现象很难去除,但可以使用一些去噪方法[5]过滤掉一些椒盐噪点。
白色点的遍历是一种边缘生长过程[6],其识别过程如下:
(1)按顺序扫描图像,找到第一个白色边缘点,记录该点的所有相邻点,若图像扫描完毕,转入(5);
(2)取其中一个相邻点作为起点,由该点出发,沿边缘遍历,并记录这些边缘点,转入(3)去遍历,若相邻点遍历完,返回(1)进行下次扫描;
(3)每隔几个点计算当前点与前一个记录的点相关斜率信息,判断是否为分割点,若不是分割点,继续遍历,否则转入(4);
(4)出现分割点,计算(2)中所记录点的斜率信息,判断是长直线、短直线还是圆弧,并记下结果,返回(2);
(5)综合分析(4)中记录的结果信息,输出结果。
先扫描图像,寻找白色边缘点,在这里按网格扫描[7]。从而保证扫描的有效性,同时加快算法的速度。在一列中从上到下扫描图像,扫描时若4个点中同行或同列出现白色点和非白色点交替,那么出现了边缘点,再逐行或逐列扫描定位到边缘点。
这里存在遍历时路径是否唯一的问题,除了外层扫描第一次可能出现多种路径外,还有2种情况也会有多种路径选择,如图5和图6所示,其他点正常情况下只有一种遍历方式。
图2 凸型边缘
图3 宽度为2的边缘
图2中数字1到8均为白色边缘,遍历到4的时候出现了5和6两种不同方向的路径,这种凸型情况有2种方法解决:(1)用栈这种数据结构保存这样的不同路径,然后用深度优先遍历[8]的方式去遍历;(2)在图像预处理时考虑这种情况,将引起这种凸型的边缘的点4和5直接过滤掉。另外一种出现不同路径的情况如图3所示,经研究发现当遍历的优先级一样时,遍历的路径不会在边缘间穿插。这样就解决了沿白色边缘遍历时出现的歧义路径问题。
如图4所示,平面上有若干条直线和曲线,那么结合NAO球场的情况如何将这些线分类呢?本文采取的是用分割点将它们分段,直观上看,直线的交点应为分割点,基于这种思想,本文分割点是不可导点和导数为0的点。
图4 线的分类
图4中有折线ABC,其函数为f(x),当由A点沿折线ABC向C点访问时,计算路径上每一点P的左右极限,若P的左右极限存在且相等,即式(1)成立,那么继续访问下个点。当访问点B时,发现B点的左极限等于直线AB的斜率,而其右极限等于直线BC的斜率,即式(1)不成立,那么ABC肯定不在一条直线上,点B就是分割点,将A到B的路径记录下来,再由B点出发用同样的方法继续向C点访问,这样把折线ABC分成了AB和BC两段。直线和横坐标垂直时,直线上的点可导但斜率不存在,夹角为90度,值得一提的是为了降低边缘不平滑[9]带来的临近边缘点斜率变化大的影响,可以沿边缘每隔N点计算一次向量的夹角,这可能会带来遍历宽度小的边缘的“回头”现象,这样用夹角代替斜率时要注意遍历点的方向变化。
曲线EOF正是ABC的变形,这些都可以做同样的处理。图4中的曲线GH是一段曲率很大的圆弧,在遍历GH时,其上虽然存在导数为零的点,但是在计算斜率时发现斜率变化很小,肯定在阈值范围内,那么此时就没有分割点出现。
遍历时当出现分割点或到达图像边界时,需要将刚遍历的一系列点归类,这些点可归类为长直线、短直线和圆弧。首先,可以用点的个数来判断当前这些点是否为短直线,其它的就是长直线或圆弧,可用一些简单的计算就能判别是长直线还是圆弧。很明显,长直线的始点斜率和终点斜率变化应该不大,而圆弧则应变化较大。本实验用的方法是把要归类的一系列点的前面N点的斜率和后面N点的斜率进行比较来判断,即用式(2)的slope1和式(3)slope2的差值来衡量,再判断式(4)是否成立,这种方法计算简单又不失有效性。
归类后可得到输入图像(如图5所示)的白色边界点分类结果。如图6所示,黑色粗线表示长直线,带端点的细黑线表示圆弧,不带端点的细直线表示短直线,这样分类就结束了。
图5 输入图像
图6 分类结果
由分类结果可以看出,原本是球场上圆弧被分类成直线,需要结合球场的实际情况,将圆弧和直线综合考虑。其实很多识别算法直接将圆弧化成短直线,综合考虑后再接上[10]。这可以用霍夫线变换原理来实现,只是霍夫线变换[11]考虑的元素是点,而这里考虑的是直线,还要注意线的平行特征,将短直线、长直线、圆弧拼接起来。
实验使用的是3.3版本的NAO机器人,主要硬件参数:CPU:AMD GEODE x86 500MHz;同步动态随机存储器(SDRAM):256MB,闪存:2G;摄像头:2只COMS摄像头,最高提供30帧/s、分辨率为640×480的图像;操作系统中自带 OpenCV函数库[12]。实验判断的标准是将其中的主要直线和圆弧识别出来,结果如表1所示。
表1 实验数据
表1中实验的颜色表是在光线1下配置的,距离太远的白线基本不能识别(距离很远时可以用识别到的球场边界来给出估计值),当距离逐渐变小时才能识别出边界,在2m左右有很好的识别率。当距离太近时,图像虽然很清晰但机器人的视野很小,没有干扰时能很好识别,当拿NAO去干扰时,机器人基本上挡住了白线,所以给出形式上的识别率50%。用在光线1下配置的颜色表去对光线2下的球场做颜色分割后的实验结果比光线1下差很多,不过近距离基本不受影响。其实,识别的结果大部分被上层用在机器人定位算法中,大多数使用的定位方法是蒙特卡罗滤波[13]或者广义的卡尔曼滤波[14],这样程序只需识别出图像中的主要直线和圆弧。这个方法用于颜色分割后三维图像同价的二维数组运算,还采用网格扫描,主要是识别方法计算简单,使得白线识别程序运行一般在9ms至12ms,很好地满足了机器人比赛对直线识别的要求。较之于单纯的直线识别,本文的方法更注重机器人图像处理的整体效率,其中的图像预处理使得后续的识别算法事半功倍。
本文提出一种基于颜色分割和边缘分类的边缘识别方法,与霍夫线变换这种传统理论不同的是将边缘线分段来处理,标准平台组的NAO机器人球队BHuman是将白色区域归类[3],再分析识别。本文将这种归类思想用在边缘线上,实验证明这种方法是可行的。虽然图像的预处理对光线有要求,但是在比赛时光线是基本稳定的,而且YUV颜色空间对光线并不敏感,B-Human用的图像处理方法就是在这样的颜色分割基础上进行的,BHuman球队的成功证明颜色分割方法的确是有效的。另外,可以在本文方法的识别结果上,运用一些统计特征来识别出机器人区域,从而为上层程序提供更多的信息。实验表明,本文方法具有较好的实时性和可以接受的准确性,比单纯的直线识别方法有更好的综合效益,方法是可行的。
[1]李龙澍,王唯翔,王凡.基于三维线性倒立摆的双足机器人步态规划[J].计算机技术与发展,2011,21(6):66-69.
[2]Alexander Fabisch,Tim Laue,Thomas Röfer.Robot recognition and modeling in the RoboCup standard platform league[C]//Proceedings of the Fifth Workshop on Humanoid Soccer Robots.2010.
[3]Thomas Röfer,Tim Laue,Judith Müller,et al.B-Human Team Report and Code Release 2011[EB/OL].http://www.b-human.de/downloads/bhuman11_coderelease.pdf,2011-11-03.
[4]黄晶,赵臣,周明明.基于快速彩色空间变换的足球机器人目标搜索[J].哈尔滨工业大学学报,2003,35(9):1036-1039.
[5]关新平,赵立兴,唐英干.图像去噪混合滤波方法[J].中国图象图形学报:A 辑,2005,10(3):332-337.
[6]林通,石青云.一种基于边缘生长的灰度和彩色图像分割方法[J].中国图象图形学报:A辑,2000,5(11):911-955.
[7]欧宗瑛,袁野,张艳珍.基于颜色信息足球机器人视觉跟踪算法[J].大连理工大学学报,2000,40(6):729-732.
[8]陈冠楠,杨坤涛,谢志明,等.基于深度优先遍历的图像边缘检测方法[J].应用光学,2008,29(1):14-17.
[9]邹福辉,李忠科.图像边缘检测算法的对比分析[J].计算机应用,2008,28(B06):215-216,219.
[10]任博,陈小平.一种实时鲁棒的直线提取技术[J].计算机仿真,2008,25(4):159-163.
[11]腾今朝,邱杰.利用Hough变换实现直线的快速精确检测[J].中国图象图形学报,2008,13(2):234-237.
[12]陈胜勇,刘盛,等.基于OpenCv的计算机视觉技术实现[M].北京:科学出版社,2008.
[13]Thomas Röfer,Tim Laue,Dirk Thomas.Particle-filterbased Self-localization usingLandmarks and Directed Lines[C]//RoboCup 2005:Robot Soccer World Cup IX.2005,4020:608-615.
[14]徐海伟,殷波,徐涛.基于模糊自适应卡尔曼滤波的移动机器人定位方法[J].计算机应用研究,2009,26(8):2974-2976.