基于一次手势训练的kinect 3D 动态手势识别(提纲)

正在做kinect手势识别的项目,boss检查进度需要,特发一篇文章来记录所学顺便整理思路~~

基于一次手势训练是指一个手势的训练样本只有一个,无法使用SVM这种需要大量训练样本的模型


整体步骤有3个

一、手势分割

     测试的视频中可能中不止一个手势,想将它们识别首先要做的是分割手势。可以用 Dynamic Time WarpingDTW),简单说原理就是时间上整合,消除手势挥动速度的影响。下面这个网址讲的很详细,就不复制了

   http://blog.csdn.net/zouxy09/article/details/9140207点击打开链接

     音频DTW和视频DTW原理相同,只是视频的纵坐标是向量,求距离的时候要求向量距离(差的平方和)而已。

二、视频图像特征提取

    包括 关键点提取 和 关键点特征描述

   基础知识:

  (a)高斯金字塔、DOG金字塔的建立

  (b)  sift原理和代码

        http://blog.csdn.net/xiaowei_cqu/article/details/8069548

http://blog.csdn.net/zddblog/article/details/7521424

   sift算法要做两步:一是通过求局部极值提取兴趣点,二是计算兴趣点的梯度信息,运动信息(通过建立光流金字塔)

   sift提取的兴趣点信息是xy轴的信息(每个特征点的维度=128维梯度信息+128运动信息),对于3D信息来说还要提取yz,,xz轴的信息(原理同xy轴一样),则每个特征点的维度=(128+128)X3=768维

其实sift的原理不用理解得很深入可以直接做2d识别项目,opencv简单地调用一两个函数就可以搞定,3D代码还需要自己修改一些东西。

三、手势分类

基于一次手势训练是指一个手势的训练样本只有一个,无法使用SVM这种需要大量训练样本的模型,这里可以采用K最近邻的方法来获取最终手势分分类。

      具体步骤是:

1、对由训练样本获得的特征点向量信息通过聚类(kmean)训得到字典(codebook),计算出训练样本每一个特征点向量到哪个字典类心向量最近(欧式距离),最后得出代表这个训练样本特征的统计直方图(相当于稀疏编码)

2、然后提取出测试样本的特征点向量信息,算出每一个特征点向量到那个字典类心向量最近(欧式距离),最后得出代表这个训练样本特征的统计直方图(相当于稀疏编码)

3、对比所有训练样本统计直方图和测试样本统计直方图,用matlab的Knn分类的到最后手势识别的结果。。


全部流程推荐第一、第三大步骤用matlab编写,第二大步骤用opencv编写方便点


(转载请注明作者和出处:http://blog.csdn.net/a1363901216未经允许请勿用于商业用途)


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