某些游戏,当用户在触摸屏上输入一个形状(圆、矩形、三角形等)后,应用根据接收到的不同形状来执行不同的操作,但如何判断用户输入的形状类型是此应用的主要问题。) Q' ?( D" k4 E1 _% T6 F
* o' Z" E3 U- }$ Y2 ?6 x
为了解决此问题,下面介绍一种基于标记法的形状识别算法。% g3 n% N |* T. `* W
/ e! I$ \) U9 _. Q1 n% o对于输入图像,我们需寻找一种表示方法,来区分出所有形状(为了说明这里我们只识别圆、矩形、三角形三种不同的形状,其他形状可对算法进行扩展),无论是何种表示方法,必须对图像的平移、旋转、收缩不敏感。 / ~' C# m$ B! y5 v) e! m2 q; y z- {1 Y. A |7 F
下面介绍基于标记的形状检测算法:( s7 Y8 |) K! B+ y
8 X; V1 |; O4 i( `$ [' f
1、获得形状的轮廓坐标; }8 q6 T, G! y5 a" A( I! s& u3 l1 v" m+ O! Z, q0 _: Z( [8 O
2、将轮廓坐标转换为相应的极坐标(theta-rho),这里我们主要关心rho,rho为轮廓上的点到该形状重心的距离; ( j4 N5 E ? o/ F1 O* ~$ m! q" J+ t! w, U, `
3、根据rho的特征区分各个形状。 3 Z* U: W( O# ? + k$ z1 l$ f2 s6 o' k0 a) u根据第2步得到的theta-rho关系图(如下图所示)可以得知,圆形的最小rho相对较大;矩形有四个明显的峰值;三角形有三个明显的峰值。故可以利用此特性来区分形状。 - k2 |) [- a( m$ m! p. o! ?! y" d, D1 x. h6 K5 ~4 H1 [. R5 Q6 P