基于单摄像头的任意颜色球形物体识别方法转让专利

申请号 : CN200910048180.X

文献号 : CN101504720B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈万米项宗杰孙佳项肇宏程硕远范海艇林骁元

申请人 : 上海大学

摘要 :

本发明涉及一种基于单摄像头的任意颜色球形物体识别方法。本方法为首先摄取带检测图像的边缘,针对边缘上的每一点,计算可能的球心轨迹,再通过计算这些轨迹的交点,得到球心的位置。本发明能快速有效地识别任意颜色球形物体是否在图像中,并能计算出球相对摄像头的位置,而且识别成功率很高。

权利要求 :

1.一种基于单摄像头的任意颜色球形物体识别方法,其特征在于首先摄取待检测图像的边缘,针对其边缘上的每一个点,计算可能的球心轨迹,再通过计算这些轨迹的交点,得到球心的位置;具体步骤如下:(1)边缘提取:提取出图像边缘的所有的点,这些点所包含的信息是它们图像上的坐标;

(2)利用距离函数,计算图像上每一个点在地面上的投影,即这些点映射到地面上的相对摄像头的空间坐标位置;

(3)计算所有投影点对应的球心轨迹的交点:

将投影区域划分为长宽为step的小方格用来记录被曲线通过的次数,每一个方格包含的信息为此方格对应投影的平面坐标(x,y)和一个计数器counter(x,y);

根据椭圆方程

式中a,b,c,d,e,f是6个参数;

b=2·(h-r)·h·x0

c=2·x0·y0

d=2·(h-r)·h·y0

r为球的半径;h为全景镜的光学中心或摄像头的高度h;(xo,yo.)为球边缘上某一点沿摄像头光路在地面上投影的坐标;

计算出y的取值范围,取y从最小值ymin到最大值ymax,所述最小值和最大值即是椭圆最上点和最下点的坐标,每次以step为一个步进,即每次循环结束y=y+step;

通过 解出相应的x值;

如果得到两个点(x1,y)和(x2,y):

找到包含(x1,y)的方格,此方格对应的计数器counter(x1,y)加1;

找到包含(x2,y)的方格,此方格对应的计数器counter(x2,y)加1;否则,如果得到一个点(x,y):找到包含(x,y)的方格,此方格对应的计数器counter(x,y)加1;

所述循环为当y取到大于最大值ymax时跳出循环;

(4)寻找所有方格计数器的最大值max{counter(xi,yj)},判别识别球的结果:如果这个最大值max{counter(xi,yj)}大于一定的阈值counter_threshold,则识别到球,球心为方格的中心counter_max(x,y);否则区域内不存在球;这里所述阈值counter_threshold不是某一个固定数值,要根据检测的系统、对象以及环境来设定,方法是用一张有球的图像来试验,在前述的方格计数器都计数完毕后,绘制出所有方格的计数数值/对应此数值的计数器个数的直方图,取最高计数值与次高计数值的中间值作为参考阈值。

说明书 :

基于单摄像头的任意颜色球形物体识别方法

技术领域

[0001] 本发明属于机器视觉/计算机图像处理;涉及一种基于单摄像头的任意颜色球形物体识别方法。

背景技术

[0002] 在机器人足球赛中要解决的首要问题之一是识别球。目前常用的方法是依靠球与其他物体颜色的差别来进行识别,这就意味着需要对颜色进行分类,找出球可能是哪些颜色是球的颜色,通常使用阈值颜色分类,或者通过颜色查找表确定颜色的分类。但是这样的做法非常依赖于光线和颜色,灵活性低。如果换一个新的足球,即使光照不变,颜色也需要重新分类,识别的适应性很低。目前常用的任意颜色球类识别的方法是使用积分图获得Haar特征,然后生成许多原始的分类器,利用adaboost组合这些弱分类器,获得一个强分类器。这种机器视觉方法适用于识别大多数物体,然而识别它的成功率不太高。

发明内容

[0003] 本发明的目的在于克服对颜色的依赖性和现有分类器识别方法成功率低的不足,提供一种基于单摄像头的任意颜色球形物体识别方法,即使在很多困难情况下,也达到了非常理想的效果。
[0004] 为达到上述目的,本发明采用下述技术方案:
[0005] 一种基于单摄像头的任意颜色球形物体识别方法,其特征在于:首先提取待检测图像的边缘,针对其边缘上的每一个点,计算可能的球心轨迹,再通过计算这些轨迹的交点,就得到球心位置,从而完成识别任务;具体操作步骤如下:
[0006] (1)边缘提取:提取出图像边缘的所有的点,这些点是所包含的信息是它们图像上的坐标;
[0007] (2)利用距离函数,计算图像上每一个点在地面上的投影,即这些点映射到地面上的相对摄像头的空间坐标位置;
[0008] (3)计算所有投影点对应的球心轨迹的交点:
[0009] 将投影区域划分为长宽为step的小方格用来记录被曲线通过的次数,每一个方格包含的信息为此方格对应投影的平面坐标(x,y)和一个计数器counter(x,y);
[0010] 根据椭圆方程 计算出y的取值范围,取y从最小值ymin到最大值ymax,所述最小值和最大值即是椭圆最上点和最下点的坐标,每次以step为一个步进,即每次循环结束y+step;
[0011] 所述循环为当y取到大于最大值ymax时跳出循环
[0012] 通过 解出相应的x值;
[0013] 如果得到两个点(x1,y)和(x2,y):
[0014] 找到包含(x1,y)的方格,此方格对应的计数器counter(x1,y)加1;
[0015] 找到包含(x2,y)的方格,此方格对应的计数器counter(x2,y)加1;否则,如果得到一个点(x,y):
[0016] 找到包含(x,y)的方格,此方格对应的计数器counter(x,y)加1;
[0017] (4)寻找所有方格计数器的最大值max{counter(xi,yj)},判别识别球的结果:
[0018] 如果这个最大值max{counter(xi,yj)}大于一定的阈值counter_threshold,则识别到球,球心为方格的中心counter_max(x,y);否则区域内不存在球;这里所述阈值counter_threshold不是某一个固定数值,要根据检测的系统、对象以及环境来设定,常用的方法是用一张有球的图像来试验,在前述的方格计数器都计数完毕后,绘制出所有方格的计数数值/对应此数值的计数器个数的直方图,取最高计数值与次高计数值的中间值作为参考阈值,在此基础上进行适当调试并根据调试结果做微量修改。
[0019] {
[0020] 识别到球;
[0021] 球心为方格的中心counter_max(x,y);
[0022] }
[0023] 否则
[0024] {
[0025] 区域内不存在球;
[0026] }。
[0027] 本发明与现有技术相比较,具有如下显而易见的突出实质性特点和显著优点:本发明的图像处理基于解析几何方法,巧妙地把机器世界问题转化为解析几何问题,即使在很多困难情况下,也达到非常理想的效果,能快速有效地识别任意颜色球形物体是否在图像中,并算出球体相对摄像头的位置,识别成功率很高。

附图说明

[0028] 图1是本方法的光路图,光线OP和球相切,P0’点是切点,P0点是切点P0’在地面上的射影。
[0029] 图2是本方法的公式推导示意图,斜置管道为与OP直线距离为r的所有点的集合,球心轨迹就在这集合中选取,选取方法为以高度为r的平面与之相交,求出相交的部分。公式推导的过程可见这一交集为一个椭圆。
[0030] 图3是把识别区域限制在12m*12m的平面上,原点代表机器人位置。
[0031] 图4“算法”部分中方格计数器的示意图。
[0032] 图5是本方法的程序程序流程图,具体含义参见具体实施方式中“算法”部分。

具体实施方式

[0033] 本发明的一个优选实施例结合附图详述如下:
[0034] 建模与公式推导:假设球始终在地面上,图1展示了摄象机捕获球的光路图。O点代表全景镜的中心(如果直接使用摄象机,O点代表摄象机的光学中心,本算法适用于不使用全景镜的一般视觉系统)。光线OP和球相切,P0’点是切点,P0点是切点P0’在地面上的射影。像其他形状识别的方法一样,我们先对图象进行边缘提取,球的边缘对应着和球相切的光线的切点(例如P0’),以及这些切点在地面上的投影。
[0035] 现在对这个几何问题建立数学模型,选择任意一光线与球切点在地面上的投影(对应着球的边缘),例如P0,计算相应的球心轨迹。设球的半径为r,O点坐标为(0,0,h)(全景镜高度为h)。可以确定球心轨迹必然在离地面高度为r的水平面上,因为我们假设球在地面上。由于直线OP0与球相切,球心离直线OP0的距离必然等于r,也就是说球心必然在以直线OP0为轴,r为半径的管道上可以证明这个轨迹是一个椭圆。
[0036] 下面开始推导球心轨迹的解析式,回顾一下模型中变量的数学表示:球的半径为r,O点坐标为(0,0,h)。首先求出距离直线O P0与距离为r的点的轨迹,即图2中斜置管道的解析式,然后把解析式中的z值换成r,就可以得到球心轨迹了,手工推导这个解析式是极端困难得事,因为公式很长,所以我们使用MatLab符号计算工具箱(Symbolic Toolbox)编程计算出球心轨迹。
[0037] 在Matlab符号计算工具箱这个强大的工具的辅助下,我们得到了球心轨迹:
[0038]
[0039] a,b,c,d,f是6个参数,他们取决于球的半径r,全景镜的光学中心的高度h.P0点的坐标(x0,y0.)
[0040]
[0041] b=2·(h-r)·h·x0
[0042] c=2·x0·y0
[0043] d=2·(h-r)·h·y0
[0044]
[0045]
[0046] 显然球心轨迹是一个二次方程,由于它又是一个封闭的曲线,我们可以确定它是一个椭圆(二次方程可以是抛物线,双曲线,椭圆。其中只有椭圆是封闭曲线,圆是特殊的椭圆),也可以根据二次方程的判别式,给出严格的数学证明:
[0047]
[0048] 上式仍然通过使用Matlab符号计算工具箱获得,它表明delta始终小于0(h≠0),这意味球心轨迹必然是一个椭圆。现在我们对第一个关键的问题有了一个非常满意的结果。根据一个切点在地面上的投影的坐标这一不全面的信息,我们可以计算出可能的球心坐标的轨迹。
[0049] 算法:虽然我们有了建立非常漂亮的数学模型和解决问题的总体思路,我们知道先求出一系列球心轨迹,然后再计算这些轨迹的交点,交点就是球心,但是这样遇到的一个麻烦就是没有办法去解两个二元二次方程。无论是使用手工推导还是使用Matlab都无法求解(Matlab给出的提示是”object too large”,任务过于复杂),我们只能避开计算交点。
[0050] 我们知道球心所在的平面虽然无限延伸的,但是我们把它人为的限制在一个12m*12m的有限区域,如图3所示。原点就是机器人的位置。因为如果球离机器人的距离超过6米,球形状和颜色的扭曲将达到不可修复的程度,识别的可信度不高,所以并不需要识别超过6米的球,所以限定识别范围是合理的。
[0051] 如图4所示,现在把球心所在水平面分成很多小方格,在每个方格定义一个计数器,对于任一个小方格,如果某条圆心轨迹经过这个方格,方格相应的计数器加一。如果方格选取的合适,球心坐标(所有轨迹的交点的坐标)所在的方格对应的计数器必然有最大的计数值。我们选择计数值最大的方格,如果这个计数值大于一定的阈值,就判定球找到。
[0052] 具体算法如下:
[0053] 第一步:边缘提取,提取出图像边缘的所有的点,这些点是所包含的信息是它们图像上的坐标;
[0054] 第二步:利用距离函数,计算图像上每一个点在地面上的投影,即这些点映射到地面上的相对摄像头的空间坐标位置,见图1,P0点是这些点中的一个;(注意,距离函数不是本发明的内容,而且用摄像头测量距离是机器视觉的一个必要环节,这里不再赘述)[0055] 第三步:计算所有投影点对应的球心轨迹的交点(这一步为本算法的核心之一)[0056] 将投影区域划分为长宽为step的小方格用来记录被曲线通过的次数,每一个方格包含的信息为此方格对应投影的平面坐标(x,y)和一个计数器counter(x,y);
[0057] 根据椭圆方程 计算出y的取值范围,取y从最小值ymin到最大值ymax(注意这里所指的最小值和最大值即是椭圆最上点和最下点的坐标),每次以step为一个步进,即每次循环结束y+step;
[0058] 循环:(当y取到大于最大值ymax时跳出循环)
[0059] {
[0060] 通过 解出相应的x值;
[0061] 如果得到两个点(x1,y)和(x2,y):
[0062] 找到包含(x1,y)的方格,此方格对应的计数器counter(x1,y)加1;
[0063] 找到包含(x2,y)的方格,此方格对应的计数器counter(x2,y)加1;
[0064] 否则,如果得到一个点(x,y):
[0065] 找到包含(x,y)的方格,此方格对应的计数器counter(x,y)加1;
[0066] }
[0067] 第四步:寻找所有方格计数器的最大值max{counter(xi,yj)},判别识别球的结果;(这一步为本算法的核心之二)
[0068] 寻找所有方格的计数器中的最大值max{counter(xi,yj)};
[0069] 如果这个最大值max{counter(xi,yj)}大于一定的阈值counter_thresbold;
[0070] {
[0071] 识别到球;
[0072] 球心为方格的中心counter_max(x,y);
[0073] }
[0074] 否则
[0075] {
[0076] 区域内不存在球;
[0077] }
[0078] 另见图5程序流程图。
[0079] 我们设计了三个实验来测试这个算法。第一个实验是测试在嘈杂环境中的识别效果。第二个实验测试球被障碍部分遮住时的识别效果。第三个实验识别球在空中的识别效果。
[0080] 在第一个实验中,球的周围有3张纸。纸在球的周围产生了额外的边界,但是算法并没有被干扰。在3分钟的实验中(25帧每秒),没有出现任何错误。在第二个实验中,球被椅子部分遮挡,当遮挡部分小于原球的1/3时,程序毫不费力的识别到了球,当球被遮挡部分大约1/2时,有时识别不到球。在第二个实验中,球被椅子部分遮挡,当遮挡部分小于原球的1/3时,程序毫不费力的识别到了球,当球被遮挡部分大约1/2时,有时识别不到球。
[0081] 与adaboost算法的比较:
[0082] 再把adaboost方法应用到视觉系统中,和解析几何方法进行比较,解析几何算法再嘈杂情况下效果特别好,我们没有发现任何没有识别到或者识别错误的情况,adaboost在嘈杂情况下表现较差,错误识别率大约在20%左右(即使在非嘈杂情况下adaboost的错误率仍然有5%左右)。再遮挡情况下,解析几何算法可以识别的极限大约是1/3,adaboost的识别极限大约再1/5,事实上,adaboost算法针对整个球,而解析几何算法针对的是弧。然而adaboost可以识别空中的球,对高度没有任何要求(但是球心计算仍然不准确,这是单目视觉所决定的),解析几何算法只能识别垫高5cm以内的球。计算机因为adaboost所占用的CPU资源低于%1,这比使用解析几何算法的2%要好。两种方法都是实时的。