ресамплировать и нормализовать массив для распознавания жестов - PullRequest
2 голосов
/ 18 января 2012

Я собираюсь написать небольшое приложение для распознавания жеста (на данный момент с помощью мыши).

Теперь запишите координаты мыши в массиве массива объекта Point (простой класс с атрибутами x и y).).для тренировки моей системы (на основе HMM) мне нужен (я думаю ...) некоторый образец нормализованной длины одной и той же длины в одном и том же диапазоне.

Скажем, например, что мне нужен массив длиной 8 элементовдля моего обучения и для моего классификатора.И я только что записал a1 (элемент 5-len) и a2 (элемент 9-len).Как достичь len (a1) == len (a2) == 8?

EDIT : я нашел сайт, который объясняет мою проблему: http://www.creativedistraction.com/demos/gesture-recognition-kinect-with-hidden-markov-models-hmms/ он использует k-средство для уменьшения элемента в кластере 8 ..

РЕШЕНИЕ : у меня есть несколько разбросанных точек (я не знаю, сколько), и я хочу уменьшить его до 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> = 60, n_cluster = 8).это вполне логично: k-means не является детерминистическим алгоритмом, но это итеративный процесс, который включает некоторую случайную инициализацию, потому что не существует аналитически хорошего решения для такого рода проблемы (если я правильно понял).

наверняка есть математическое понимание, в которое я не хочу углубляться.это делает работу.

1 Ответ

0 голосов
/ 19 января 2012

Я не уверен, что это то, что вам нужно, но это будет линейно интерполироваться от ввода вдоль 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...