发明内容
本发明的目的是提出一种九球的精确检测识别方法,该方法适用于九球环境,可以精确实时地进行九球的定位识别。
本发明技术方案的步骤包括
A、背景建模
A1.为了平均噪声,本发明采集九球球台的背景图像,对背景图像进行颜色的高斯建模。
A2.根据每一个像素的RGB值计算相应地HIS颜色模型空间的色调H的值。公式如下:
公式1
A3.计算每一点像素在图像中的R、G、B、H期望和方差值,
对于像素点(i,j)颜色分量R的期望值μR(i,j)是R(i,j)是当前像素点的R颜色分量,方差值σR(i,j)是将每一个像素点的期望和方差值输出到“期望方差.dat”文件中。
B、高斯公式简化
为了节省时间,化简高斯公式。根据高斯公式本方法将公式进行简化:
公式2
实验证明简化的公式不影响检测结果,但是将指数计算简化成除法计算,缩短了计算时间。
设
公式3
其中μ是指期望,σ指方差。g(x)在[0,5]区间内以间隔是0.01进行取值,将计算结果expVal存储在文件“gaussian.dat”中。
C、初始目标检测
C1.采集一张目标图像I,读取图像信息,分别得到图像中每一点的R,G,B,H值,根据公式3计算g(x)的函数值,x分别指当前像素点的R,G,B,H值。
C2.用查表法,在C1步得到的函数值在gussian.dat文件中进行查找。
f(x)=expVal[g(x)*100] 公式4
每一个像素点会有4个f(x)值,分别记为fR(i,j)、fG(i,j)、fB(i,j)、fH(i,j)。
将四个值的乘积归一化到[0-255]区间并且向下取整,作为当前像素点的灰度值,即R=G=B,其中
。
目标区域被粗略的检测出来。此时显示出来的灰度图像就是目标检测结果后的图像。
D、灰度图像预处理
便于后续的图像处理,首先对灰度图像进行预处理。
D1.将C步骤中得到的灰度图像采取平滑技术中已有的均值滤波的方法进行平滑处理。
D2.将上一步骤中得到的结果进行二值化处理,本方法采用图像I的亮度的平均值的2倍作为二值化的阈值。
D3.图像进行膨胀的形态学处理,本方法中为了获得更好的结果采取两次膨胀处理。
E、粗检聚类
E1.进行聚类操作,得到每一个聚类区域的坐标范围;
聚类是将数据对象按照对象间的相似性进行分组或分类的过程,本方法中的聚类方法对上一步处理后图像中的白色的点求连通域,再进行聚类操作,统计白色点的区域面积、坐标范围,区域中心。
E2.筛选,将聚类结果进行简单的条件筛选。聚类结果有很多误差,需要根据九球的实际情况进行筛选。
F、生成独立目标图像
从目标图像I中,将聚类结果的坐标范围“挖取”出来,生成小图像,每个小图像就是一个筛选目标,后续算法只在独立的目标小图像中进行处理,节省算法时间。
G、多阈值多层次检测——第一层
G1.在小的目标区域中进行已经存在的经典边缘检测算子---Robert算子进行边缘检测。Robert算子的输入是独立的目标图像的每个像素的RGB值,输出是值作为相应像素的灰度值,保存检测结果。
G2.对独立的目标区域进行’HRobert’算子边缘检测,保存检测结果。
‘HRober’算子是本方法提出的针对九球环境的目标检测算法,即将像素RGB转换成色调H值。将H值映射到[0,255]的范围后输入到Robert算子中,进行H值的边缘检测。
G3.对独立的目标区域进行’UnHRobert’算子计算,并保存计算结果。
‘UnHRobert’算子的实际操作是,先对独立的目标图像像素的RGB值进行取反操作,取反后的像素信息求相应地色调H值,将H值得范围映射的[0,255]区域后进行Robert边缘检测。
G4.Hough变换
对进行‘UnHRobert’算子计算后的小区域内进行Hough变换圆检测。
Hough变换圆检测是普遍应用的用于检测圆的算法,
G5.多阈值多层次检测——第一阈值
G51.将Hough变换之后的累加点数大于阈值th1的点,进行聚类,得到聚类中心。其中th1是经验值,本方法中取的是90。
G52.此聚类中心就是圆心,将以此聚类中心为中心,以目标球的半径为半径的区域进行检测标记,以免重复检测。
G6.多阈值多层次检测——第二阈值
对G5聚类后没有被标记的点中,Hough变换之后的累加点数大于阈值th2的点,进行聚类,得到聚类中心。其中th2是经验值,本方法中取的是60。
将以此聚类中心为中心,以目标球的半径为半径的区域进行检测标记。
H、多阈值多层次检测——第二层
H1.对F中生成的独立目标区域进行Prewitt算子边缘检测,保存检测结果。
H2.对F中生成的独立目标区域进行‘MaxOf3’算子边缘检测
MaxOf算子即是取Prewitt算子检测后的结果,Robert算子后的结果,HRobert算子后的结果,三者的最大值作为当前像素的灰度值。
H3.Hough变换
对边缘检测结果进行Hough变换圆检测。
H4.多阈值多层次检测——第三阈值
对步骤G后没有被标记的点中,Hough变换之后的累加点数大于阈值th3的点,进行聚类,得到聚类中心。其中th3是经验值,本方法中取的是80。
将以此聚类中心为中心,以目标球的半径为半径的区域进行检测标记。
H5.多阈值多层次检测——第四阈值
对H4步骤后没有被标记的点中,Hough变换之后的累加点数大于阈值th4的点,进行聚类,得到聚类中心。其中th4是经验值,本方法中取的是55。
将以此聚类中心为中心,以目标球的半径为半径的区域进行检测标记。
I、多阈值多层次检测——第三层
I1.对Prewitt算子边缘检测结果进行Hough变换圆检测。
I2.多阈值多层次检测---第五阈值
对H步骤后没有被标记的点中,Hough变换之后的累加点数大于阈值th5的点,进行聚类,得到聚类中心。其中th5是经验值,本方法中取的是30。
将以此聚类中心为中心,以目标球的半径为半径的区域进行检测标记。
I3.多阈值多层次检测——第六阈值
对I2步骤后没有被标记的点中,Hough变换之后的累加点数大于阈值th6的点,进行聚类,得到聚类中心。其中th6是经验值,本方法中取的是20。
将以此聚类中心为中心,以目标球的半径为半径的区域进行检测标记。
J、颜色判断
J1.得到初始各球的颜色中心
J11.获取多张目标图像,球分别在亮区和暗区。
台面为1392个像素长,816个像素宽,摄像头在台面正上方,所以在台面中心位置以及台面四周会有一些亮度上的误差。我们设置中心位置为亮区,靠近案边的位置为暗区。球在这两个区域的亮度不相同。为了算法更加可靠,本方法对每个球色取亮暗两个颜色中心。
J12.手工得到每个球的坐标范围。
J13.手工得到坐标范围内的相应球号颜色的像素RGB值,分别求在亮区暗区的球的颜色均值,作为亮区和暗区的颜色中心。
例如红球,在暗区的红球上所有红色的点(舍弃红球上的白色部分和黑色部分)相加求平均,亮区的红球上所有的红色的点相加求平均,分别作为红球在暗区和亮区的颜色中心。
J2.根据颜色判断球号
在比赛过程中,九球的状态各不相同,有时候球号会朝下,这种情况下就不能通过识别球上的标号达到识别的目的。由于每个球的颜色各不相同,本方法通过识别颜色进行球号的确定。
J21.在G、H、I步骤中已经得到了目标的坐标。读取图像I中,目标坐标范围内的每个像素的RGB值。
J22.每一点像素的RGB值与J1中的颜色中心计算欧式距离。
J23.距离最小的为当前像素的颜色。
J24.一个球中像素颜色最多的一组就是当前球的颜色。
J3.根据颜色确定球号
1号球是黄色,2号球是蓝色,3号球是红色,4号球粉色,5号球橙色,6号球是绿色,7号球是棕色,8号球是黑色,9号球是黄色,母球是白色。
根据J2步骤中的颜色可以确定球号,但是九球中的1号球和9号球都是黄色。需要进一步判断。
J4.确定1号球与9号球
1号球与9号球花色不一样,9号球是半球,白色区域较多,1号球黄色区域较多。根据这一特点,判断标记为黄色的两个球,属于黄色的点较多的为1号球,否则为9号球。
本方法可以每秒钟处理50帧图像正确率在99%以上,完全达到了实时性和精确性的要求,更好的辅助与“中国鹰眼”***,保证了九球比赛的公平公正。
实施例
本方法具体程序执行是:
A、背景建模
A1.为了平均噪声,本发明采集20帧九球球台的背景图像,对背景图像进行颜色的高斯建模:读取每一帧背景图像的颜色数据,红色R、绿色G、蓝色B。
A2.根据每一个像素的RGB值计算相应地HIS颜色模型空间的色调H的
值。公式如下:
公式1
根据公式1得到像素点(i,j)的H分量。
A3.计算每一点像素在20帧图像中的R、G、B、H期望和方差值,
例如,对于像素点(i,j)颜色分量R的期望值μR(i,j)是R(i,j)是当前像素点的R颜色分量,方差值σR(i,j)是将每一个像素点的期望和方差值输出到“期望方差.dat”文件中。
B、高斯公式简化
为了节省时间,化简高斯公式。根据高斯公式,本方法将公式进行简化:
公式2
实验证明简化的公式不影响检测结果,但是将指数计算简化成除法计算,缩短了计算时间。
设
公式3
其中μ是指期望,σ指方差。g(x)在[0,5]区间内以间隔是0.01进行取值,即, 将计算结果expVal存储在文件“gaussian.dat”中。
C、初始目标检测
C1.采集一张目标图像I,读取图像信息,分别得到图像中每一点的R,G,B,H值,根据公式3计算g(x)的函数值,x分别指当前像素点的R,G,B,H值。
C2.用查表法,在C1步得到的函数值在gussian.dat文件中进行查找。
f(x)=expVal[g(x)*100] 公式4
例如如果gR(i,j)的值为0.03,那么相应的f(x)的值就是expVal[3]的值。每一个像素点会有4个f(x)值,分别记为fR(i,j)、fG(i,j)、fB(i,j)、fH(i,j)。
将四个值的乘积归一化到[0-255]区间并且向下取整,作为当前像素点的灰度值,即R=G=B,其中
。
目标区域被粗略的检测出来。此时显示出来的灰度图像就是目标检测结果后的图像。
D、灰度图像预处理
便于后续的图像处理,首先对灰度图像进行预处理。
D1.将C步骤中得到的灰度图像采取平滑技术中已有的均值滤波的方法进行平滑处理。
D2.将上一步骤中得到的结果进行二值化处理,本方法采用图像I的亮度的平均值的2倍作为二值化的阈值。
D3.图像进行膨胀的形态学处理,本方法中为了获得更好的结果采取两次膨胀处理。
E、粗检聚类
E1.进行聚类操作,得到每一个聚类区域的坐标范围;
聚类是将数据对象按照对象间的相似性进行分组或分类的过程,本方法中的聚类方法对上一步处理后图像中的白色的点,即RGB值为(255,255,255)求连通域,再进行聚类操作,统计白色点的区域面积、坐标范围,区域中心。
E2.筛选,将聚类结果进行简单的条件筛选。聚类结果有很多误差,需要根据九球的实际情况进行筛选,由于目标球不可能是一个点或者一条线,所以排除聚类区域是一个点、一条线的情况。
F、生成独立目标图像
从目标图像I中,将聚类结果的坐标范围“挖取”出来,生成小图像,每个小图像就是一个筛选目标,后续算法只在独立的目标小图像中进行处理,节省算法时间。
G、多阈值多层次检测——第一层
G1.在小的目标区域中进行已经存在的经典边缘检测算子---Robert算子进行边缘检测。Robert算子的输入是独立的目标图像的每个像素的RGB值,输出是值作为相应像素的灰度值,保存检测结果。
G2.对独立的目标区域进行’HRobert’算子边缘检测,保存检测结果。
‘HRober’算子是本方法提出的针对九球环境的目标检测算法,即将像素RGB转换成色调H值。由于H值得取值范围是[0,360],而RGB的范围是[0,255],将H值映射到[0,255]的范围后输入到Robert算子中,进行H值的边缘检测。
G3.对独立的目标区域进行’UnHRobert’算子计算,并保存计算结果。
‘UnHRobert’算子的实际操作是,先对独立的目标图像像素的RGB值进行取反操作:即(255-R)、(255-G)、(255-B)。取反后的像素信息求相应地色调H值,将H值得范围映射的[0,255]区域后进行Robert边缘检测。
G4.Hough变换
对进行‘UnHRobert’算子计算后的小区域内进行Hough变换圆检测。
Hough变换圆检测是普遍应用的用于检测圆的算法,
G41.用画图工具打开图像I,手工确定球的半径。由于***的摄像头位置不变,所以每一个环境中的球的大小不变。本方法中九球的半径为13像素。
G42.将灰度值不为黑色的点,即RGB值不是(0,0,0)的点,为圆心,以13为半径进行画圆,所有的圆混合相交,在每个像素点上累计计算经过这一点的圆的数量。
G5.多阈值多层次检测——第一阈值
G51.将Hough变换之后的累加点数大于阈值th1的点,进行聚类,得到聚类中心。其中th1是经验值,本方法中取的是90。
G52.此聚类中心就是圆心,将以此聚类中心为中心,以13为半径的区域进行检测标记,以免重复检测。
G6.多阈值多层次检测——第二阈值
对G5聚类后没有被标记的点中,Hough变换之后的累加点数大于阈值th2的点,进行聚类,得到聚类中心。其中th2是经验值,本方法中取的是60。
将以此聚类中心为中心,以13为半径的区域进行检测标记。
H、多阈值多层次检测——第二层
H1.对F中生成的独立目标区域进行Prewitt算子边缘检测,保存检测结果。
Prewitt算子是一种一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用。其原理是在图像空间利用两个方向模板与图像进行邻域卷积来完成的,这两个方向模板一个检测水平边缘,一个检测垂直边缘。
H2.对F中生成的独立目标区域进行‘MaxOf3’算子边缘检测
MaxOf算子即是取Prewitt算子检测后的结果,Robert算子后的结果,HRobert算子后的结果,三者的最大值作为当前像素的灰度值。
H3.Hough变换
对边缘检测结果进行Hough变换圆检测。
H4.多阈值多层次检测——第三阈值
对步骤G后没有被标记的点中,Hough变换之后的累加点数大于阈值th3的点,进行聚类,得到聚类中心。其中th3是经验值,本方法中取的是80。
将以此聚类中心为中心,以13为半径的区域进行检测标记。
H5.多阈值多层次检测——第四阈值
对H4步骤后没有被标记的点中,Hough变换之后的累加点数大于阈值th4的点,进行聚类,得到聚类中心。其中th4是经验值,本方法中取的是55。
将以此聚类中心为中心,以13为半径的区域进行检测标记。
I、多阈值多层次检测——第三层
I1.对Prewitt算子边缘检测进行Hough变换圆检测。
I2.多阈值多层次边缘检测---第五阈值
对H步骤后没有被标记的点中,Hough变换之后的累加点数大于阈值th5的点,进行聚类,得到聚类中心。其中th5是经验值,本方法中取的是30。
将以此聚类中心为中心,以13为半径的区域进行检测标记。
I3.多阈值多层次检测——第六阈值
对I2步骤后没有被标记的点中,Hough变换之后的累加点数大于阈值th6的点,进行聚类,得到聚类中心。其中th6是经验值,本方法中取的是20。
将以此聚类中心为中心,以13为半径的区域进行检测标记。
J、颜色判断
J1.得到初始各球的颜色中心
J11.获取多张目标图像,球分别在亮区和暗区。
台面为1392个像素长,816个像素宽,摄像头在台面正上方,所以在台面中心位置以及台面四周会有一些亮度上的误差。我们设置中心位置为亮区,靠近案边的位置为暗区。球在这两个区域的亮度不相同。为了算法更加可靠,本方法对每个球色取亮暗两个颜色中心。
为了均值更准确,取球全在亮区的图像20帧,球全在暗区的图像20帧。
J12.手工得到每个球的坐标范围。
J13.手工得到坐标范围内的相应球号颜色的像素RGB值,分别求在亮区暗区的球的颜色均值,作为亮区和暗区的颜色中心。
例如红球,在暗区的红球上所有红色的点(舍弃红球上的白色部分和黑色部分)相加求平均,亮区的红球上所有的红色的点相加求平均,分别作为红球在暗区和亮区的颜色中心。
依次类推,共得到20组颜色中心。
J2.根据颜色判断球号
在比赛过程中,九球的状态各不相同,有时候球号会朝下,这种情况下就不能通过识别球上的标号达到识别的目的。由于每个球的颜色各不相同,本方法通过识别颜色进行球号的确定。
J21.在G、H、I步骤中已经得到了目标的坐标。读取图像I中,目标坐标范围内的每个像素的RGB值。
J22.每一点像素的RGB值与J1中的20组颜色中心计算欧式距离。
其中,(R0,G0,B0)表示颜色中心。
J23.距离最小的为当前像素的颜色。对于像素(i,j)在J22步骤中得到20个距离,距离最小的为像素(i,j)的颜色。
J24.一个球中像素颜色最多的一组就是当前球的颜色。例如,对于某个球而言,如果在球的区域范围内,红的像素是最多的,那么这个球就被识别为红球。
J3.根据颜色确定球号
1号球是黄色,2号球是蓝色,3号球是红色,4号球粉色,5号球橙色,6号球是绿色,7号球是棕色,8号球是黑色,9号球是黄色,母球是白色。
根据J2步骤中的颜色可以确定球号,但是九球中的1号球和9号球都是黄色。需要进一步判断。
J4.确定1号球与9号球
1号球与9号球花色不一样,9号球是半球,白色区域较多,1号球黄色区域较多。根据这一特点,判断标记为黄色的两个球,属于黄色的点较多的为1号球,否则为9号球。