一种教育玩具套件及利用颜色和轮廓识别编程模块的方法与流程

文档序号:12368327阅读:来源:国知局

技术特征:

1.一种教育玩具套件,其特征在于,包括:支架、头盔探测器和编程模块,并且所述头盔探测器安装于支架上,所述编程模块放置于平面上;所述支架底部具有凸起,顶部具有第一凹槽和第二凹槽,所述第一凹槽用于放置平板电脑,平板电脑采集编程模块信息;所述头盔探测器安装于第二凹槽内;

所述头盔探测器,还包括本体、第三凹槽、2个扇形块和凸面镜,并且所述第三凹槽位于本体内,用于夹持不同型号的平板电脑,在所述第三凹槽夹持平板电脑屏幕的端点处设置有凸面镜,所述凸面镜的另一端安装于头盔探测器边缘上,所述凸面镜与水平面夹角成锐角,所述第三凹槽夹持平板电脑屏幕的端点高于平板电脑的摄像头位置,2个所述扇形块位于凸面镜的2个边缘上,用于固定所述凸面镜和夹持平板电脑。

2.根据权利要求1所述的一种教育玩具套件,其特征在于,所述编程模块的类型为8种,每种类型的所述编程模块颜色不同。

3.根据权利要求2所述的一种教育玩具套件,其特征在于,所述编程模块包括:怪兽模块、跳跃模块、条件1模块、条件2模块、小q模块、向前模块、左转模块和右转模块。

4.一种教育玩具套件中利用颜色和轮廓信息进行编程模块识别的方法,其特征在于,包括如下步骤:

步骤一,在平板电脑中安装游戏程序,编程模块放置于平面上,平板电脑的底端安装于第一凹槽内,通过第二凹槽将头盔探测器安装于平板电脑的顶端;

步骤二,固定安装好后,通过平板电脑的前置摄像头实时采集彩色图像;

步骤三,从所述步骤二的彩色图像中检测编程模块的类型。

5.根据权利要求4所述的一种教育玩具套件中利用颜色和轮廓信息进行编程模块识别的方法,其特征在于,所述步骤二中前置摄像头采集的彩色图像为Ixy,Ixy=f(x,y)=(Rxy,Gxy,Bxy),其中,(x,y)表示彩色图像像素点的位置坐标,f(x,y)表示图像在像素点坐标位置处的像素值,Rxy表示图像像素点在红色通道的色彩值,Gxy表示图像像素点在绿色通道的色彩值,Bxy表示图像像素点在蓝色通道的色彩值。

6.根据权利要求5所述的一种教育玩具套件中利用颜色和轮廓信息进行编程模块识别的方法,其特征在于,所述步骤三中检测编程模块类型的具体步骤为:

1)采用透视变换原理,将彩色图像Ixy转换成由上而下俯视的正视角图像;

2)根据先验知识,在正视角图像中提取出感兴趣区域图像,即上层软件给出的编程模块指定放置区域;

3)因为怪兽和跳跃模块在颜色上均属于红色系,与其他模块的色系区分度较大,因此,先用颜色将这两个模块与其他模块区分开;也即编程模块的颜色在RGB颜色空间内不利于分割开来,对光照变化也比较敏感,所以,将提取出来的感兴趣区域图像由RGB颜色空间转换到侧重于色彩表示的HSV颜色空间,具体转换公式为:

V=max{C(R′)、C(G′)、C(B′)};

<mrow> <mi>S</mi> <mo>=</mo> <mfenced open = "{" close = ""> <mtable> <mtr> <mtd> <mrow> <mn>0</mn> <mo>,</mo> </mrow> </mtd> <mtd> <mrow> <mi>V</mi> <mo>=</mo> <mn>0</mn> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <mfrac> <mrow> <mi>V</mi> <mo>-</mo> <mi>m</mi> <mi>i</mi> <mi>n</mi> <mo>{</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>R</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>,</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>G</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>,</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>B</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>}</mo> </mrow> <mi>V</mi> </mfrac> <mo>,</mo> </mrow> </mtd> <mtd> <mrow> <mi>V</mi> <mo>&NotEqual;</mo> <mn>0</mn> </mrow> </mtd> </mtr> </mtable> </mfenced> <mo>;</mo> </mrow>

<mrow> <mi>H</mi> <mo>=</mo> <mfenced open = "{" close = ""> <mtable> <mtr> <mtd> <mrow> <mfrac> <mrow> <mn>60</mn> <mo>&lsqb;</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>G</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>-</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>B</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>&rsqb;</mo> </mrow> <mrow> <mi>V</mi> <mo>-</mo> <mi>min</mi> <mo>{</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>R</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>,</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>G</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>,</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>B</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>}</mo> </mrow> </mfrac> <mo>,</mo> </mrow> </mtd> <mtd> <mrow> <mi>V</mi> <mo>=</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>R</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <mfrac> <mrow> <mn>120</mn> <mo>+</mo> <mn>60</mn> <mo>&lsqb;</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>G</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>-</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>B</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>&rsqb;</mo> </mrow> <mrow> <mi>V</mi> <mo>-</mo> <mi>min</mi> <mo>{</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>R</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>,</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>G</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>,</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>B</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>}</mo> </mrow> </mfrac> <mo>,</mo> </mrow> </mtd> <mtd> <mrow> <mi>V</mi> <mo>=</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>G</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <mfrac> <mrow> <mn>240</mn> <mo>+</mo> <mn>60</mn> <mo>&lsqb;</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>G</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>-</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>B</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>&rsqb;</mo> </mrow> <mrow> <mi>V</mi> <mo>-</mo> <mi>min</mi> <mo>{</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>R</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>,</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>G</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>,</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>B</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>}</mo> </mrow> </mfrac> <mo>,</mo> </mrow> </mtd> <mtd> <mrow> <mi>V</mi> <mo>=</mo> <mi>C</mi> <mrow> <mo>(</mo> <msup> <mi>B</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> </mrow> </mtd> </mtr> </mtable> </mfenced> <mo>;</mo> </mrow>

其中,H表示色调值,S表示饱和度值,V表示亮度值,max{C(R′)、C(G′)、C(B′)}表示在原始图像中一个像素点在红、绿、蓝三个通道的像素最大值,min{C(R′)、C(G′)、C(B′)}表示在原始图像中一个像素点在红、绿、蓝三个通道的像素最小值,并且H的取值范围位于0-360之间;

4)在HSV颜色空间内,根据红色系的怪兽编程模块与跳跃编程模块在HSV空间内的先验阈值,将彩色图像进行二值化处理,具体公式如下:

通过公式B(x,y)=B_H(x,y)&B_S(x,y)&B_V(x,y)获得对应的二进制图像;

其中,B(x,y)表示图像像素点(x,y)的二进制像素值,H(x,y)、S(x,y)、V(x,y)分别表示图像像素点(x,y)在HSV颜色空间内的色调值、饱和度值、亮度值;B_H(x,y)、B_S(x,y)、B_V(x,y)分别表示图像像素点(x,y)是否分别在指定的H、S、V区域内,如果是,则取值为1,否则,取值为0;Hmin、Hmax分别表示红色系怪兽编程模块和跳跃编程模块在HSV颜色空间内的色调的先验最小和最大值;Smin、Smax分别表示红色系怪兽编程模块和跳跃编程模块在HSV颜色空间内的饱和度的先验最小和最大值;Vmin、Vmax分别表示红色系怪兽编程模块和跳跃编程模块在HSV颜色空间内的亮度的先验最小和最大值;

5)采用先腐蚀后膨胀的方法去除所述步骤4)中二值化图像的噪音干扰,并且平滑物体边界;

6)扫描二值化图像,找出所有边缘轮廓;

二值化图像可以看作是只有两个值的灰度图像,图像的边缘是指灰度图像中灰度变化比较剧烈的部分,灰度值的变化程度采用相邻像素间的梯度变化来定量表示,梯度是一阶二维导数的二维等效式,具体计算过程为:

首先,计算相邻像素的差分,具体公式为:

Gx=f[i,j+1]-f[i,j]

Gy=f[i,j]-f[i+1,j]

其中,Gx表示相邻像素在x方向上的差分,Gy表示相邻像素在y方向上的差分,f[i,j+1]表示图像在第i行第j+1列的像素值,f[i,j]表示图像在第i行第j列的像素值;f[i+1,j]表示图像在第i+1行第j列的像素值;

进一步地,计算相邻像素间的梯度,具体公式为:

<mrow> <mi>G</mi> <mrow> <mo>(</mo> <mi>x</mi> <mo>,</mo> <mi>y</mi> <mo>)</mo> </mrow> <mo>=</mo> <mfenced open = "[" close = "]"> <mtable> <mtr> <mtd> <msub> <mi>G</mi> <mi>x</mi> </msub> </mtd> </mtr> <mtr> <mtd> <msub> <mi>G</mi> <mi>y</mi> </msub> </mtd> </mtr> </mtable> </mfenced> <mo>=</mo> <mfenced open = "[" close = "]"> <mtable> <mtr> <mtd> <mfrac> <mrow> <mo>&part;</mo> <mi>f</mi> </mrow> <mrow> <mo>&part;</mo> <mi>x</mi> </mrow> </mfrac> </mtd> </mtr> <mtr> <mtd> <mfrac> <mrow> <mo>&part;</mo> <mi>f</mi> </mrow> <mrow> <mo>&part;</mo> <mi>y</mi> </mrow> </mfrac> </mtd> </mtr> </mtable> </mfenced> <mo>;</mo> </mrow>

其中,G(x,y)表示表示图像的在(x,y)点上梯度值,表示像素值在x方向上求导,表示像素值在y方向上求导;

进一步地,计算边缘点的梯度幅值,所有边缘点的梯度幅值集合即为提取的边缘轮廓;

进一步地,根据怪兽模快、跳跃模块边缘轮廓的大小和离心率的先验知识,滤掉不合理的边缘轮廓,再对剩余的轮廓进行判定,进而得出该编程模块是否为怪兽模快或者跳跃模块,如果是则完成编程模块判定,如果不是则继续执行步骤7);

其中,怪兽模快的判定原则为:利用边缘轮廓的形状、大小、离心率和怪兽模块独有的3个小三角形的位置及大小关系的先验知识,来判定编程模块是否为怪兽模块;跳跃模块的判定原则为:将边缘轮廓的最小外包矩形分割成四等份,利用左上、右上、左下和右下的轮廓间的形状、4个轮廓的大小比例关系、4个轮廓占整个边缘轮廓的比例的先验知识以及整个边缘轮廓的大小和离心率的先验知识,来判定编程模块是否为跳跃模块;

所述7)将步骤2)中的感兴趣区域图像转换为灰度图像:

Gray(x,y)=0.2989×Rxy+0.5870×Gxy+0.1140×Bxy

其中,Gray(x,y)表示灰度图像;

8)采用边缘检测算法检测图像中的强边缘;

图像的边缘是指灰度图像中灰度变化比较剧烈的部分,灰度值的变化程度采用相邻像素间的梯度变化来定量表示,梯度是一阶二维导数的二维等效式,具体计算过程为:

首先,计算相邻像素的差分,具体公式为:

Gx=f[i,j+1]-f[i,j]

Gy=f[i,j]-f[i+1,j]

其中,Gx表示相邻像素在x方向上的差分,Gy表示相邻像素在y方向上的差分,f[i,j+1]表示图像在第i行第j+1列的像素值,f[i,j]表示图像在第i行第j列的像素值;f[i+1,j]表示图像在第i+1行第j列的像素值;

进一步地,计算相邻像素间的梯度,具体公式为:

<mrow> <mi>G</mi> <mrow> <mo>(</mo> <mi>x</mi> <mo>,</mo> <mi>y</mi> <mo>)</mo> </mrow> <mo>=</mo> <mfenced open = "[" close = "]"> <mtable> <mtr> <mtd> <msub> <mi>G</mi> <mi>x</mi> </msub> </mtd> </mtr> <mtr> <mtd> <msub> <mi>G</mi> <mi>y</mi> </msub> </mtd> </mtr> </mtable> </mfenced> <mo>=</mo> <mfenced open = "[" close = "]"> <mtable> <mtr> <mtd> <mfrac> <mrow> <mo>&part;</mo> <mi>f</mi> </mrow> <mrow> <mo>&part;</mo> <mi>x</mi> </mrow> </mfrac> </mtd> </mtr> <mtr> <mtd> <mfrac> <mrow> <mo>&part;</mo> <mi>f</mi> </mrow> <mrow> <mo>&part;</mo> <mi>y</mi> </mrow> </mfrac> </mtd> </mtr> </mtable> </mfenced> <mo>;</mo> </mrow>

其中,G(x,y)表示图像在(x,y)点上梯度值,表示像素值在x方向上求导,表示像素值在y方向上求导;

进一步地,计算边缘点的梯度幅值,所有边缘点的梯度幅值集合即为提取的边缘轮廓;

由于待检测的编程模块目标,在转换为灰度图后,编程模块上的标识与编程模块上的白色区域存在较大的反差,因此,可以利用边缘检测的方法提取出编程模块上标识的边缘轮廓;边缘提取算法包括Sobel算子、Roberts算子、Prewitt算子和Canny算子等,具体公式为:

<mrow> <mo>|</mo> <mi>G</mi> <mrow> <mo>(</mo> <mi>x</mi> <mo>,</mo> <mi>y</mi> <mo>)</mo> </mrow> <mo>|</mo> <mo>=</mo> <msqrt> <mrow> <msubsup> <mi>G</mi> <mi>x</mi> <mn>2</mn> </msubsup> <mo>+</mo> <msubsup> <mi>G</mi> <mi>y</mi> <mn>2</mn> </msubsup> </mrow> </msqrt> </mrow>

其中,|G(x,y)|表示边缘点的梯度幅值;

9)对所述步骤8)中得出的编程模块边缘轮廓进行膨胀处理;

10)扫描所述步骤9)中的二值化图像,由于当前编程模块属于非红色系的,因此,判断编程模块属于除了怪兽模块、跳跃模块之外的哪种类型;

首先,对所述步骤9)中得到的二值化图像进行扫描,得到相应的边缘轮廓,通过边缘轮廓的大小和离心率的先验知识,滤掉不合理的轮廓;

进一步地,将过滤后剩余的边缘轮廓的最小外接矩形分割成4等份,利用左上、右上、左下和右下的轮廓间的形状、4个轮廓的大小比例关系、4个轮廓占整个边缘轮廓的比例的先验知识以及整个边缘轮廓的大小和离心率的先验知识,来判定编程模块的类型。

7.根据权利要求6所述的一种教育玩具条件中利用颜色和轮廓信息进行编程模块识别的方法,其特征在于,所述步骤2)中编程模块放置的有效识别区域只对应一个识别模块。

8.根据权利要求6所述的一种教育玩具条件中利用颜色和轮廓信息进行编程模块识别的方法,其特征在于,所述步骤10)中,如果判断出编程模块为条件模块,则取该编程模块边缘轮廓的质心,判断质心的颜色,再与先验知识进行比对,得出编程模块为条件1模块或者条件2模块。

9.根据权利要求6所述的一种教育玩具条件中利用颜色和轮廓信息进行编程模块识别的方法,其特征在于,所述步骤10)中,如果判断出编程模块为转弯模块,则取该编程模块边缘轮廓的转弯点与其对角点连线的中点,再与先验知识进行比对,得出编程模块为左转模块或者右转模块。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1