基于图像处理的象棋棋盘识别摘要:基于图像处理的象棋棋盘识别是象棋机器人软件的重要组成部分,其核心工作是棋盘图像二值化和棋子识别。针对棋盘全局二值化存在的问题,提出了基于相邻像素灰度差阈值的棋盘图像二值化方法;针对棋子文字方向任意的现象,运用象棋文字的识别作为颜色识别异常的补充。实验结果表明,该方法提高了棋盘识别的效率。Chess-boardrecognitionbasedonImageProcessingisanimportantpartofachessrobotsoftwartsystem.It’skeyproblemsarebinarizationofchess-boardimageandcharacterrecognition.Tosavetheproblemcausedbyfullchess-boardbinarizationway,thebinarizationmethodbasedonthedifferencethresholdofneighborpixels’gray-levelisgiven.Totreattherandomofacharacter’sdirection,Thecharacterrecognitionwastakenasthesupplementtoexcep-tionsofcolorrecognition.Theproposedmethodimprovestheefficiencyofthechessboardrecognition关键词:棋盘识别;颜色识别;文字识别;灰度差阈值;年轮统计Keywords:chessboardrecognition;colorrecognition;characterrecognition;thresholdofgrayscales’difference;annualringstatistic;1引言中国象棋变化多端,趣味无穷,是流传了一千多年的优秀游戏,是中华文化的精粹之一。随着机器人技术的发展,机器人的功能越来越丰富,娱乐机器人的研究已经成为一个重要的方向。象棋机器人是娱乐机器人的一种,在CCD摄像机的监视下,使人机下棋过程非常类似于人与人之间的对弈,更具有人性化和亲切感。本文介绍的系统是象棋机器人的视觉部分,能识别出当前棋盘的状态,提供给机器人下棋软件进行进一步推理。1.1棋盘的预处理棋盘识别软件的处理流程是棋盘图像的二值化、棋子检测和棋子文字识别。其中,二值化和棋子文字识别是关键。棋盘图像二值化的目的是将棋盘背景与棋子及网格线分离,以便进行棋子的检测和识别。目前图像二值化方法很多,可划分为全局阈值、局部阈值法、动态阈值法。全局阈值法实现简单,速度快,对于具有明显双峰直方图的图像效果明显,但对于光照不均匀的图像效果欠佳,抗噪能力差。局部阈值法能处理较为复杂的情况,但往往忽略了图像的边缘特征,容易出现伪影现象,且当窗口宽度较大时,算法的速度将会受到很大影响。动态阈值法充分考虑了像元的邻域特征,能够根据图像的不同背景情况自适应地改变阈值,可较精确地提取出二值图像,但它过渡地夸大了像元的邻域灰度的变化,会把不均匀灰度分布的背景分割到目标中去,带来许多不应出现的假目标。在象棋机器人系统中装有照明灯,为图像捕捉提供光源。即使这样,由于光照不均匀有时所捕捉的图像仍存在一定的阴影、反光现象,致使图像灰度层次较多。若采用全局阈值法的二值化图像,结果出现某些背景变黑而一些棋子模糊和网格线断线的现象,这直接影响了后续的棋子和异物检测。在象棋机器人系统中装有照明灯,为图像捕捉提供光源。即使这样,由于光照不均匀有时所捕捉的图像仍存在一定的阴影、反光现象,致使图像灰度层次较多。灰度图像如图3(a)所示。若采用全局阈值法的二值化图像,结果出现某些背景变黑而一些棋子模糊和网格线断线的现象,如图3(b)所示。这直接影响了后续的棋子和异物检测。2.棋盘定位流程图:棋盘棋子的定位:阈值的选取:im_all=imread('xqplg.jpg');imc=imcrop(im_all);imr=imc(:,:,1);img=imc(:,:,2);imb=imc(:,:,3);imrr=imr(:);imgg=img(:);imbb=imb(:);c=double([imrrimggimbb])/256;scatter3(imrr,imgg,imbb,15,c);棋子定位imqz=(imr180&img180&imb180);imc=imcrop(imqz,[csls3030]);qzN=sum(sum(imc));棋子识别——红色像素统计imqr=(imr150&img150&img70&imb200&imb110);imcr=imcrop(imqr,[csls3030]);qzR=sum(sum(imcr));下棋过程中棋子放置方向的任意性给文字识别带来了困难。基于统计决策论的统计特征可以丢失方向信息,很适合棋子识别。统计决策论的要点是提取待识别模式的一组统计特征,然后按照一定准则把所确定的决策函数进行分类判决。汉字的统计模式识别就是将字符点阵看作一个整体,从该整体上经过大量统计所得特征,用尽可能少的特征模式来描述尽可能多的信息。所采用的方法有特征统计的方法、整体变换分析法、几何矩特征、笔划密度特征、字符投影特征、外围特征、微结构特征和特征点特征等。本文针对象棋棋子文字,提出了3种基于统计特征的棋子文字识别方法,很好地解决了文字的方向问题。3文字识别在开局或者是进行残局的对弈时,需要识别各位置棋子的颜色及文字,以便建立起棋子的状态矩阵。文字的识别可以根据字符结构,抽取字符特征,然后根据这些特征构造编码器,进行编码识别的方式[4-6],但是一旦文字的方向发生变化,这种方式将很难处理。因此,使用基于年轮统计的方法[1],该方法的优点是与文字的方向无关,一旦确立了每个象棋文字的特征值,就可以快速地识别文字。为了加快文字识别的速度,在每个棋子上的圆形凹槽均填充为与棋子相同的颜色。针对捕获的图像,首先进行颜色的识别,以记录各棋子有效位置的颜色信息,然后,对于存在棋子的有效位置进行分割,分割出来的每一个矩形图片均进行文字识别。其步骤如下。1)滤波。这里采用中值滤波,每个像素点根据其周围的像素点的RGB值进行平均,以抑制随机噪声,并且能够很好地保存边缘信息,原图和滤波后的效果如下。2)颜色增强。对于红颜色或者绿颜色分量进行增强,其饱和度增强0.2左右,使得颜色信息在图像中进一步呈现,以提高根据颜色进行二值化的成功率。3)二值化。这里的二值化指的是红色或者绿色保留,其他颜色变为白色,以下说明均以红色为例。将图1(b)按照表1所列的区间进行按照红色的二值化所得到结果如图2(a)所示。由于颜色区间是按照宽范围来选择的,因此将有部分灰色和黄色被保留下来,事实上在RGB颜色空间中,黄色是由红色叠加绿色得来的,而灰颜色的三种颜色分量的值相差不大,因此设定阈值来去除掉黄颜色和灰颜色。条件为:如果RG60,则认为不可能是红色;如果G≥110,则认为不可能是红色。根据这个条件进行红颜色的二值化结果如图2(b)所示。4)提高对比度,并进一步剔除掉红色。在步骤3)中所得到的图片线条边缘还有部分浅红存在,不利于文字识别,通过提高图像的对比度,使得这一部分颜色变为红色,而红色变为黑色,以便于进一步分离,如图3(a)所示。此时将图片中的红色剔除掉,结果如图3(b)所示。5)圆形检测。圆形的检测方法主要有基于Hough变换(HoughTransformation,HT)的累积方法和基于弧线几何特征的检测方法[8],这些方法具有普适性,计算量却很大。本例中的圆形具有其特殊性,因此考虑计算量更小的方法。根据步骤4)所得到的图片中圆形可能不是完整的,但不影响确定圆心的位置。分割得到的图片本身就是一个正方形的结构,将图片数据的0行0列作为坐标原点,如图4所示,h和w分别为图片的高度和宽度,很显然h和w是相等的。以坐标原点为圆心,以图片宽度的1/2作为半径画出圆弧,只需要记录圆弧上第一个和最后一个发生颜色突变的点,就可以确定圆弧与圆的交点,有了交点就可以确定通过圆心和坐标原点的直线。依此方法再以(0,h)或(h,h)或(h,0)作为圆心画出圆弧同样也可以确定一条直线,两条直线的交点即为圆心的坐标。实际中,由于得到的圆形不一定是封闭的,所采集的两个突变点就可能不在圆上,这时确定的圆心可能就是错误的。因此根据不同的半径增加所画圆弧的个数,得到多组圆上的点,经过比较分析去掉错误点,得到圆心的位置。由圆心的坐标和前期工作中得到的圆上的点,就可以确定整个圆的位置。6)过轮数计算。年轮统计法是根据过轮数特征构造编码器对文字进行识别。该方法结合了一定的棋子文字结构且与方向无关。过轮数的详细算法步骤请参考文献[1]。根据过轮数的计算,可以得到当前棋子的文字。一旦确定了棋子的文字,和前期确定的颜色信息,就可以建立起初始的棋子状态矩阵。从而为后续的人机对弈提供快速的检测方式。4.总结和展望:本文所提出的基于邻像素差阈值的棋盘图像二值化方法,计算量小、二值化效果好、且能适应较宽的光线条件;基于统计特征的棋子文字识别方法具有方向无关性,很好地适应了棋子方向任意的实际情况。在下棋过程中,为进一步提高处理速度,可先做相邻棋盘图像的差分,在二值差分图上检测变化位置,只限定在当前二值图的变化部分进行检测和识别,可大大缩短处理时间。在具体应用中由于棋子文字字体的不同,文中基于文字连通数与孔数的识别方法和基于年轮统计的识别方法中的具体特征值可能不能直接使用,但方法的思想是可以借鉴的。在一些字体中,某种单一的特征可能不能将各文字有效区分,这时可以融合几种特征,如有些字体的士、卒、车的连通域数和孔数都是1和0,此时可通过增加1/4R过轮数的特征进行识别。本文所提出的基于颜色和文字识别协同工作的棋盘识别方法,相比于单一棋子的文字识别来说,大大降低了计算量,提高了棋盘识别的速度,并且具有很好的识别率。参考文献:[1]杜俊俐,张景飞,黄心汉.基于视觉的象棋棋盘识别[J].计算机工程与应用,2007,43(34):220-222.[2]陶霖密,徐光枯.机器视觉中的颜色问题及应用[J].科学通报,2001,46(3):178-190.[3]Colorconversionmathandformulas[EB/OL].[2009-07-04].[4]严国莉,黄山,李岱漳,等.印刷体数字快速识别算法在身份证编码数字识别中的应用[J].计算机工程,2003,29(1):178-179.[5]齐永锋,火元莲.一种基于肤色的人脸检测与定位方法[J].计算机应用,2009,29(3):785-788.[6]赵志诚,蔡安妮.图像颜色矢量量化算法[J].北京邮电大学学报,2007,30(5):77-81.[7]杨枝灵,王开.VisualC++数字图像获取、处理及实践应用[M].北京:人民邮电出版社,2003:553-572.[8]于中,徐文立,陈峰.边缘图像中圆形轮廓的两步法检测[J].计算机辅助设计与图形学学报,2005,17(2):243–246[9]OtsuN.Athresholdselectionmethodfromgray—levelhistograms[J].IEEETransactionsonSystems.ManandCybernetics,1979,9(1):62—66.[10]赵雪松,陈淑珍综合全局二值化与边缘检测的图像分割方法【J].计算机辅助设计与图形学学报,2001,13(2):118-121.