前言
视觉系统中颜色识别的鲁棒性在视觉系统中经常遇到,怎样提高它的鲁棒性是一个有一定的理论意义和实用价值。本文就此提出一实用方案,就足球机器人视觉子系统中的颜色识别实例进行介绍。
在实现足球机器人视觉子系统时存在的一大难点就是图像颜色的鲁棒性,图像颜色的鲁棒性形成的主要原因是光照,还有图像采集时所形成的噪声,这些因素使所采集的图像上的颜色呈现不稳定性,而颜色训练算法就是为解决这个难点而设计的。颜色训练算法主要的目的就是制作一个颜色修正列表,当进行图像识别时,用列表进行判断每一个像素的颜色所代表的实际意义,这样就可以准确的识别出机器人上的色标,准确地识别出赛场上活动物体的坐标、方向等数据。
一、颜色模型的选取
在图像处理中最常用的两种颜色模型是YUV模型和RGB模型。这两种颜色模型是可以相互转换的。对应关系如下:
YUV中的Y表示亮度,U和V表示色调,可以表示所有的颜色。从理论上讲用这种颜色模型就可以由U和V来判断是某种颜色,但是由于图像采集卡产生的噪声, U和V的值也不是很准确。
RGB中的R表示红色,G表示绿色,B表示蓝色,每种颜色都是由三元色组成的可表示颜色高达256*256*256=16777216种颜色所以基本上可以表示所有的颜色。由于光照和图像采集卡产生的噪声,使图像中颜色的RGB值变化比较大。
如果图像采集卡输出的图像是RGB组成的颜色阵列,选用RGB颜色模型。本文提出的颜色训练算法是为解决使用RGB颜色模型所出现的颜色的鲁棒性这个问题而设计的。很明显,经过适当的转换,此法也可用于YUV颜色模型为基础的颜色识别。
二、方案的设计思想
足球机器人比赛中,足球机器人在场地内对抗比赛,必须时刻知道足球机器人在场地内的座标、方位角及球的位置,以便决策系统给出足球机器人动作控制。在R0B0TCUP-180足球机器人比赛中,每队五个队员,每队有一个直径40的色标,或是蓝色或是黄色的,球是直径38橙色高尔夫球。针对此种状况,要求足球机器人系统的视觉系统应具备:
1、能正确识别出敌我双方每个队员的座标、方位角,球的座标;
2、一定的实时性要求,例如一秒钟能十次处理摄像头送来的图像数据,并发出相应座标等数据;
3、在有限的PC资源下完成所需工作。一般每队配一台PC,它除了完成视觉系统的工作,还需完成决策系统及与上下位机的通信工作。
人识别物体是通过对物体的特征,如形状、图案、颜色或是特征的综合体进行比较而识别。人识别物体首先由视觉系统接收欲识别物体的信息,再与记忆中的物体相比较,继而作出决断。
模拟人对物体识别的方式,针对足球机器人的识别要求及条件,提出如下方案:
1、优化设计足球机器人头标的图案和颜色;
2、建立可在线训练和修改的颜色库,贮存各足球机器人的颜色和图案;
3、针对实物颜色库的快速查找算法。
三、优化设计足球机器人头标的图案和颜色
足球机器人每人都有一个头标,让安装在场地上部3米的摄像头摄入。这里有一些限制条件:场地较大,似乒乓球台;足球机器人每人占地(以投影面积计算)不得超过180平方厘米;摄像头的分辨力是有限的(一般采用1024 *1024)。对应这些条件,一个像素对应3 *3平方厘米,也即一个足球机器人对应的像素个数是很有限的,即在这有限的像素基础上进行识别。当然改善硬设备性能可以提供更宽松的识别处理。如果能在有限个像素的舞台上演出予定要求的戏剧来不是更好吗?
足球机器人的头标识别是个二维图像的识别,问题是怎样设计头标图案和颜色使之头标图像的特征简单明了、处理的硬软件资源及开销最少。
实验中设计了几种图案与颜色作了对比试验,模索出简单而容易计算处理的图案。同时,考虑到颜色的搭配,让图案各区的颜色反差大,也即RGB三基色之间的差值大,便于区别。图一是其中二例。
图一 头标图例
四、建立可在线训练和修改的颜色库
足球机器人头标的颜色在不同的光照下,其RGB值是不同的,它们之间的比值也是不同的;由于某队可以是蓝色的或是黄色的,因此要有二套图像的头标以适应之;比赛的对方在不同场次是不同的,因此它们的图案和颜色是不同的。从以上的叙述中看出,需识别的图案和颜色是变化的。
如果建立一个颜色库,在经过快速训练后,记忆它们的颜色特征,然后再在实际环境中去应用,这是一个顺理成章的做法。
颜色库中存储着颜色的RGB值和它所表示的色标,当识别图像时把图像中每个像素的RGB值与颜色库中的值进行比较,找到与它相等的或相近的,把颜色库中的这个颜色所代表的色标作为这个像素的色标,并把这个像素的RGB值添加到颜色库中。这样就准确的建立了颜色与色标之间的关系。过程见图二。
图二
五、实物颜色库的快速查找算法
颜色库中的颜色可能有很多很多种,如果在查找的时候跟所有的颜色进行比较这样就太浪费时间了,不可能这样应用,所以必须设计一种优化的颜色查找算法,使查找颜色的时间尽可能的短。
如果把颜色库建成类似哈西表的结构,见图三,这样就可以使查找算法的时间复杂度达到常量级,花很短的时间就可以找到要找的颜色在库里有没有。
保存色标状态
R红色分量
G
绿色分量
B蓝色分量
指向G分量存储的位置
指向B分量存储的位置
图三、颜色库的结构图
例如,查找某像素的颜色RGB(3,253,3)。
先通过查找R红色分量3号区域,发现有G绿色分量存在,就继续查找绿色分量的253号位置,发现有B蓝色分量存在,就继续查找蓝色分量的3号位置,这里存的就是颜色RGB(3,3,3)所指定的色标状态。这样只需很少的计算量就可以找到颜色库中所指的色标状态,如果有对应的颜色就返回颜色对应的色标状态,如果没有就调用模糊查找算法。
模糊查找算法的思路就是在库中分别以要查找的颜色的R、G、B分量向它们的两边进行搜索,在一定范围内找与这个颜色最接近的颜色,这个范围是根据需要确定的,把它称为模糊系数。如果在这个范围内存在一个最接近的颜色,就把这个要查找的颜色添加到库中,并使它所代表的色标等于最接近的颜色所代表的色标,见图四。
例如,要查找颜色RGB(4,255,2),模糊系数为3。
先从R红色分量的4号查找,发现库中没有指定G绿色分量,就向两边查找,范围为3个单元格,当查找到3时发现有G绿色分量,就顺着3号的G绿色分量入口查找255号单元格,发现没有指定B蓝色分量,就往一边查找,当查找到253号时发现有蓝色分量,就顺着253号的B蓝色分量查找2号单元格,发现没有指定色标状态,就向两边查找,找到3号指定了色标状态,返回这个色标状态。这样模糊查找就结束了。
255没
有
向
一
边
寻
找
保存色标状态
R红色分量
G
绿色分量
B蓝色分量
指向G分量存储的位置
指向B分量存储的位置
4号没有向两边寻找
2号没有向两边寻找
图四、模糊识别过程图解
六、结论
这个算法实际上就是为图像上不规则的颜色制作一个修正列表,采用优化的查询算法来识别颜色,并为适应场上颜色的变化具有一定的学习能力。识别颜色的准确度跟颜色库制作的好坏息息相关,如果经过一定实践人来控制颜色训练的尺度,将能训练出非常准确的颜色库。从部分实验结果看,命中率达到90%以上,基本满足需要,当然还需做一定的工作,提高命中率。
开发工具是Visual C++6.0, 用面向对象的方法把颜色库和对它的各种操作封装成一个叫颜色管理器的类,这样图像识别算法就可以很容易的对颜色库进行操作了。
此方法还可以推广延伸,应用到更多的场合。
参考文献
1何斌等,Visual C++图像处理,北京,人民邮电出版社,2001