6

我目前正在开发一个手势识别应用程序,使用隐马尔可夫模型作为 matlab 上的分类阶段(使用网络摄像头)。我已经完成了包括特征向量提取在内的预处理部分。我已将主成分分析 (PCA) 应用于这些向量。

现在让我使用 Kevin Murphy 的 HMM 工具箱,我需要我的观察序列采用从 1 到 M 的数字(整数)形式(M = 观察符号的数量)。如果我是正确的,那么我必须使用码本的概念并使用矢量量化来获得我的观察序列。

我的问题:

  1. 如何构建密码本?
  2. 以及如何使用此码本获取输入视频的观察符号?

注意:我使用椭圆傅里叶描述符进行形状特征提取,对于每个手势,PCA 值都存储在尺寸为 [11x220] 的矩阵中(视频中的帧数 = 11)

接下来我该怎么做?有没有其他方法可以获得特征向量而不是椭圆傅里叶描述符?

4

1 回答 1

2

HMM 是一系列用于序列数据的概率模型,其中您假设数据是从潜在(“隐藏”)状态空间上的离散状态马尔可夫链生成的。通常,所谓的“排放”来自每个州的同一分布族,但具有不同的参数。

我对 matlab 实现不是特别熟悉,但听起来您指的是使用多项发射分布的实现,其中观察到的数据是来自预先指定的字母表的符号序列。该模型中的未知参数是隐藏状态之间的转移概率和每个状态中每个输出符号的多项权重。如果您的功能是二元且互斥的,这是合适的分布——比如“手势向左”与“手势向右”或其他什么。

但是,如果您的特征是连续的,则使用连续排放分布可能更合适。例如,高斯 HMM 很常见。在这里,您观察到的数据是一系列连续(可能是多元)数据,并且假设在每个隐藏状态中,输出都是来自高斯的独立同分布,具有您希望学习的均值和(协)方差。

如果您不反对 python,那么在 scikits-learn 页面上有一些关于多项式和高斯 HMM 的相当不错的文档:http: //scikit-learn.org/stable/modules/hmm.html

从实际的角度来看,如果您想在数据上使用多项式 HMM,我建议您首先运行 k-means 聚类构建码本,然后使用状态标签作为 HMM 的输入。但是使用高斯 HMM 可能会更好。

于 2013-10-27T09:22:38.570 回答