Se puede obtener una solución a la comparación entre
articulaciones de distintos esqueletos, de la forma en que
realizamos el guardado de las mismas en el punto anterior.
Teniendo guardado los puntos de las articulaciones de dos
esqueletos, se podría realizar una comparación de los ángulos que forman entre
sí. La utilización de esta técnica de comparación viene motivada por el hecho
de que, por ejemplo, existen personas con diferente altura, es decir, diferente
tamaño de esqueleto. Por tanto, otra técnica como, por ejemplo, la de diferenciar los
puntos de las articulaciones, nos daría muchos problemas en la comparación. Dicho lo
cual, se decide utilizar la técnica de cálculo de la amplitud o ángulo de las
articulaciones del esqueleto. Esas amplitudes son
comparadas para buscar las similitudes con las amplitudes de otros esqueletos.
Observando el esqueleto de la siguiente ilustración podemos observar los ángulos que serán calculados
para realizar la comparación entre posturas, concretamente, para la parte del miembro superior.
Esquema con los ángulos a calcular |
Fijándonos
en un ángulo concreto su cálculo se realizará llamando al método
devAnguloEntrePuntos, que devuelve el ángulo calculado y recibe como parámetros
las coordenadas (x, y, z) de los tres Joints o puntos de unión. En la siguiente imagen se muestra el ángulo formado por las tres articulaciones (Joints).
Esquema del ángulo calculado a partir de tres articulaciones |
El método en código C# es el siguiente:
Código C# para el cálculo del ángulo |
El método devAnguloEntrePuntos hace uso de otro método para calcular el vector normal producido por las coordenadas de los tres Joints. El método para calcularlo es el siguiente:
Código C# para el cálculo del vector normal |
Finalizando con este post, una vez que se ha realizado el
cálculo de los ángulos de las articulaciones de dos posturas distintas (en
nuestro sistema se habla de dos posturas una para el paciente, y otra, para el fisioterapeuta)
se realiza la diferencia entre ambos ángulos. En la siguiente figura se puede ver el código necesario para realizar la diferencia entre el ángulo de
la muñeca derecha del esqueleto del fisioterapeuta y del paciente.
Diferencia entre el ángulo del fisioterapeuta y del paciente |
En el siguiente post, hablaré del reconocimiento de comandos de voz con Microsoft Kinect.
Un saludo!
Álvaro Alcolea
Buenas tardes Alvaro.
ResponderEliminarEstoy trabajando con la plataforma de Kinect y tengo un problema al momento de calcular el angulo de la rodilla y estoy utilizando tu formula pero me varían los resultado en momento cuando tengo bien estirada la rodilla me marca un angulo de 77 0 78 y otras veces me 59 a 68.
¿Quisiera saber el porque esos datos?
Espero y me puedas ayudar, Saludos...
Hola muy buenas.
Eliminar¿qué versión utilizas de Kinect? Si es la versión V1 (xbox360), la precisión es inferior con respecto a la nueva Kinect V2 de xbox one, lo cual por mi experiencia podría dar errores en el cálculo del ángulo.
Por otra parte, el ángulo de la rodilla podría verse afectado por la profundidad en el valor 'z'. Una buena idea podría ser calcular otros ángulos y ver si también difieren en 10° como el ángulo que calculas de la rodilla.
Yo por mi experiencia con Kinect te adelanto que, en el caso de que quieras hacer comparaciones entre esqueletos, establezcas un umbral de error, ya que el cálculo de este ángulo depende de tres variables (x, y, z).
Un saludo!