Como se puede ver hay 2 sensores que tiene que ver con la profundidad, uno es el infrarrojo que emite puntos infrarrojos (izquierda de la imagen) y el otro ("o cámara infrarroja") a la derecha es el que captura estos puntos infrarrojos que emite el otro sensor de la izquierda.
Ahora como trabajamos con estos puntos:
Cuando inicializamos el envió de datos de profundidad
miKinect.DepthStream.Enable();
, este nos enviara una gran cantidad de distancias (En imagen, el primer recuadro representa estas distancias enviadas) , pero estas distancias no son del mismo tamaño como los pixeles de color , estos requieren ser almacenados en un array de tipo short[](" porque con este tipo de datos podemos almacenar datos de 16 bits"). Viendo la imagen nos podemos dar cuenta que hay 3 cuadros de color amarillo (3 bits), estos corresponden a los datos de los esqueletos que para esta oportunidad no trabajaremos con ellos y que para el caso practico cuando almacenemos estas distancias:
int valorDistancia = datosDistancia[i] >> 3; // la parte que queda en rojo, quita los 3 últimos bits del arreglo que no ocuparemos.
//datosDistancia[i], sera nuestro arreglo de tipo short!
Desde esta forma podemos ir controlando estos datos, como por ejemplo desde nuestro código con un eventhandler para capturar este flujo de información
{
int valorDistancia = datosDistancia[i] >> 3;
} //Aquí almacenamos cada distancia del arreglo short!.
y luego con estos podemos usar el método DepthStream.UnknownDepth para comparar si nuestra kinect esta detectando una distancia desconocida e emitir un color en un aplicación por ventana.
if (valorDistancia == miKinect.DepthStream.UnknownDepth)
{
colorImagenDistancia[posColorImagenDistancia++] = 0; //Azul
colorImagenDistancia[posColorImagenDistancia++] = 0; //Verde
colorImagenDistancia[posColorImagenDistancia++] = 0; //Verde
..
En la semana subiré un código completo documentado para ejecutar un ejemplo con lo que explicado en este post.