某些游戏,当用户在触摸屏上输入一个形状(圆、矩形、三角形等)后,应用根据接收到的不同形状来执行不同的操作,但如何判断用户输入的形状类型是此应用的主要问题。8 H$ \ Z2 ?( |# ?; g
( l. @1 V; }' o" r) g, y为了解决此问题,下面介绍一种基于标记法的形状识别算法。 1 Y- N h2 a' r. ~' y1 T' r0 S" v% U, w/ K. O: n( t
对于输入图像,我们需寻找一种表示方法,来区分出所有形状(为了说明这里我们只识别圆、矩形、三角形三种不同的形状,其他形状可对算法进行扩展),无论是何种表示方法,必须对图像的平移、旋转、收缩不敏感。3 k' ]1 u, y( N* M
7 l/ C4 K4 z+ @3 a下面介绍基于标记的形状检测算法:" T6 H0 p* K4 X; @+ J8 k' |
3 F* v# i" [2 X* X
1、获得形状的轮廓坐标; , ~# W* M6 Z6 D1 } * {$ y$ E9 \4 k3 t! l; \2、将轮廓坐标转换为相应的极坐标(theta-rho),这里我们主要关心rho,rho为轮廓上的点到该形状重心的距离;* }, b* g! r n- ]
4 k) A( C0 T S0 I- d3 J2 P
3、根据rho的特征区分各个形状。5 X6 P0 P0 G( x$ b( Z6 h) }4 f' g
4 f. t+ G/ N% ^, ]" Y9 Z根据第2步得到的theta-rho关系图(如下图所示)可以得知,圆形的最小rho相对较大;矩形有四个明显的峰值;三角形有三个明显的峰值。故可以利用此特性来区分形状。( |; O% b3 s0 H1 h4 Z
& q$ A+ M2 W+ ]8 G, @ |7 L
4 X; ^! H. s9 e$ B: z A
6 ]4 z U- l. A+ A7 _: H! b4 W2 H& x( p1 u3 x$ s+ ?$ t; e