图形手势识别

图形手势识别
http://www.imooc.com/learn/131
http://fattyboy.cn/gt

一、手势识别的常见算法:
1、网格识别(马赛克识别)
    把用户绘制的图形和图形库里的图形放到同一张网格里面 ,然后逐个格子的去比较他们的相似度。核心思想类似于马赛克识别,例如比较两张照片是否相像的时候,先把两张照片马赛克化,然后去比较方块是否相像。
2、方向识别
     比较用户绘制时,笔画的运行方向跟手势库中图形的方向是否一致。 比如在做矩形识别的时候,如果图形库中的矩形是先向右绘制,再向下绘制,再向左,再向上;用户绘制的图形也是先向右,再向下,再向左,再向上,那么我们可以认为用户所绘制的图形是一个矩形。
3、dollar1算法(欧几里得相似度)
     两个点A、B是否相似?判断依据为两个点之间的欧几里的得距离。“离的进,相似;离的远,不再相似”。规定一个距离S,两个点之间的欧几里得距离小于S,即为相似,否则,不相似。
4、量角器算法(余弦相似度)
     两个点A、B是否相似?判断依据为两个点之间的夹角。“夹角小,相似;夹角大,不相似”。规定一个角度θ,两个点A、B与坐标原点O连线,变成两个矢量,判断它们的夹角,小于θ,即为相似,否则不相似。
5、余弦相似度与欧几里得相似度
     余弦相似度在性能、容差能力上更可靠。而欧几里得相似度要求比较苛刻过于严格。
     余弦相似度更科学、合理、稳定,优于欧几里得相似度。
    证明:



二、如何衡量一个算法
1、准确度
2、容差能力(位置、大小、比例、形状、角度)
3、性能
4、内存占用

三、手势识别步骤
1、准备手势库(预先录制好若干手势)
2、运行时记录用户绘制的图形
3、将用户绘制图形与手势库进行比对
4、匹配[满足精确度要求]且[相似度最大]的手势

四、将用户绘制图形与手势库进行比对
1、调整(大小、位置、形状)
a. 重新采样(re sample)
用户绘制手势时,计算机采用的是定时记点法(每隔一段时间,记录一下当前鼠标指针的位置,然后把点记录下来),用户绘制的手势的大小、速度不同,点也不同,密度也不一样,手势库里存的图形也是由点构成的只是手势库里图形的点更平均分布一些。
重新采样就是:对用户画的图形上的点,进行一个重新的相对均匀的一个分布。
重新分布的原理:
·确定好手势识别系统的采样点的个数。比如定为N,那么用户所绘制的任何一个图形最后都要变为由N个点(N-1段折线)构成的图形。操作方法:首先,求出绘制的图形的周长;然后把点按照周长平均的分布。
b. 选择中心点(centroid)
确定中心点就是把N个点的坐标取一个平均值。
作用:让绘制的图形与图形库中的图形的位置进行统一的一个参考。
c. 平移(translate)
    将中心点平移到原点(矩形手势识别坐标系)。平移后,在位置上能让绘制图形与图形库中的图形一样。
d. 缩放(scale)
    非等比缩放,让大小较为一致。
e. 旋转(rotate)
中心点与所画图形的第一个点有一条连线(以下将这条线称为蓝线)。旋转的目的就是将蓝线旋转到一个指定的位置。
位置:45度原则,即45度就近的来分配。将整个坐标系按45度划分为8个象限;蓝线旋转时,距离哪一条分界线进,就旋转到哪一条边界线的位置。
目的:让所画的图形有一定的方向性,而方向性又不让它太严格。对角度的容差是在45度(正负)左右。
2、比较(test)

五、手势识别的注意事项
1、绘制的方向性(顺时针、逆时针)
2、图形的宽高比(钝角、锐角、直角)
3、关键点的数量(合适的关键点数量)
      和屏幕的大小、绘制的速率、绘制的密度、图形的复杂度等属性综合相关。
		  性能与关键点的数量有关。
4、复杂性(图形的复杂性)
		  是不是图形越复杂越难识别?是不是图形越简单越容易识别?
		  太简单的图形,由于特征不是很明显,所以经常会弄错,如圆和六边形或八边形,甚至三角形和圆形。
		  所以图形的识别率和图形的复杂性没有太大关系。主要的是特征,就是图形中的线条特征是否足够明显。
六、相关参考
~   yangl.org
~   depts.washington.edu/aimgroup/proj/dollar
~   github.com/finscn/ReDollar

你可能感兴趣的:(opencv图像处理)