重新采样并规范化numpy数组以进行手势识别

时间:2012-01-18 10:06:11

标签: python numpy resize normalization gesture-recognition

我要写一个小应用来识别手势(现在用鼠标)。

现在,将鼠标坐标记录在Point对象(具有x和y属性的简单类)的numpy数组中。 为了训练我的系统(基于HMM)我需要(我认为......)相同长度的一些样本在相同范围之间归一化。

比方说,我需要一个8元素长度的数组用于我的训练和分类器。 我刚刚记录了a1(5-len元素)和a2(9-len元素)。如何实现len(a1)== len(a2)== 8?

编辑:我找到了一个解释我问题的网站: http://www.creativedistraction.com/demos/gesture-recognition-kinect-with-hidden-markov-models-hmms/ 他在8簇中使用k-means来减少元素..

解决方案:我有一些分散点(我不知道有多少),我想把它减少到8个意义点。我可以使用的一种技术是使用一些集群算法对它们进行聚类。 KMeans可能是一种可能性。在scipy中使用此代码: 来自scipy.cluster.vq import kmeans2

def clusterize(numpy_array, n_cluster):
    centroids, labels = kmeans2(numpy_array, n_cluster)
    #print centroids, labels
    return centroids

注意:如果numpy_array大小小于n_cluster,我注意到解决方案并不好,但在我的实际案例中经过一些试验后,我观察到我有更多(numpy_array size> = 60,n_cluster = 8)。这是非常合乎逻辑的:k-means不是一个确定性的alorightm,但它是一个涉及一些随机初始化的迭代过程,因为对于这种问题没有解决方案(如果我理解的话)。

肯定有一些我不想深入研究的数学见解。这样做了。

1 个答案:

答案 0 :(得分:0)

我不确定这是你需要的,但是这将从n均匀间隔点的输入线性插值。

input = np.array([0, 1, 2, 3, 4]) ** 2
n = 8
m = len(input)
out = np.interp(np.linspace(0, m-1, n), np.arange(m), input)