kinectformatlab
  MODO DE FUNCIONAMIENTO NORMAL
 


MODO DE FUNCIONAMIENTO NORMAL

En primer lugar, es conveniente conocer los tipos de datos que devuelve la Kinect a Matlab, ya que son las referencias que se van a utilizar para su posterior procesamiento. Para ello se realizarán una serie de pruebas como la que se muestra a continuación, en la que se muestra un brazo y una mano a un metro de distancia sobre la cámara.

context = mxNiCreateContext('Config/SamplesConfig.xml');
mxNiUpdateContext(context);
[Foto, depth] = mxNiImage(context);
mxNiDeleteContext(context);

Con este programa se pretende obtener una imagen en color y otra de profundidad para analizarlas en Matlab. El modo de funcionamiento escogido mediante el fichero .xml es el normal, es decir, imagen en color de 480x640 e imagen de profundidad del mismo tamaño.

Una vez ejecutado el código en el espacio de trabajo de Matlab aparecen las siguientes variables.

 

La variable Foto del espacio de trabajo de Matlab es donde se guarda la imagen RGB que como se puede ver es de 480x640x3 uint8. Esto significa que tiene una resolución de 480x640, y que la fotografía la componen 3 matrices de ese tamaño con números comprendidos entre 0 y 256, ya que los datos son de tipo uint8 (unsigned integer de 8 bits).

Las matrices son imágenes en escala de grises que capturan las intensidades de rojo, verde y azul respectivamente, y la combinación de dichas imágenes da como resultado la fotografía en color original.



Continuando con el análisis del espacio de trabajo se puede observar otra variable llamada depth que contiene los datos de la imagen de profundidad. Esta variable es de tipo 480x640 uint16, lo que da lugar a una resolución de imagen de 480x680 con datos comprendidos entre 0 y 65535, debido a que son uint16 (unsigned integer de 16 bits) .La imagen de profundidad obtenida con la cámara Kinect y un mapa de colores tipo jet se ve como en la siguiente figura, donde los tonos rojizos expresan la distancia más lejana y los azules la más cercana, pasando por los amarillos y verdes en el intermedio.

El mapa de colores utilizado no deja de ser una escala de grises, pero con la ventaja de que los colores facilitan la comprensión de la imagen frente a los grises que con son más difíciles de distinguir.




Para comprender los datos de profundidad es preciso acceder a dicha matriz y analizarla o bien utilizar herramientas de Matlab como imtool para dicho propósito. Haciendo uso de esta última opción:

>> imtool(depth)

A continuación se pueden observar datos sobre las regiones de interés mediante Tools/PixelRegion. Colocando la región de interés sobre la mano, que se sabe de ante mano que estaba situada a un metro de la cámara se obtendrá la información sobre los pixeles de la imagen.


Se observa como la información de cada pixel representa la distancia del objeto en milímetros, pero para contrastar la información sería conveniente observar otras regiones de la imagen.
 
 
 

En esta otra imagen se ve como la pared del fondo se encuentra a cuatro metros, y si se mide la distancia se ve como la información es correcta. De aquí se deduce que se pueden hacer lecturas de hasta cuatro metros de distancia por lo menos.

Por otro lado, en la imagen original mostrada anteriormente se ve como tras la mano y el cuerpo y en algunos lugares de la fotografía aparecen sombras de color azul oscuro. Si se miden las distancias de estas zonas se ve como se encuentran a cero milímetros, lo cual es imposible, lo que indica que es un error de lectura de la Kinect.

Este error es debido a que cuando colocamos obstáculos delante de la cámara, el patrón de puntos se proyecta sobre ellos y no dejan ver lo que hay detrás. Como el sensor de captura no está situado en la misma posición que el sensor que proyecta el patrón, tras el objeto queda una zona en la que no se proyectan puntos. El siguiente diagrama muestra el fenómeno de la aparición de sombras.




Una vez obtenida una información muy completa sobre las imágenes de profundidad se analizará la última variable que aparece en el espacio de trabajo denominada context, que es una estructura que contiene los datos referentes al modo de funcionamiento de la Kinect.


 

Se pueden observar diferentes variables que son las que forman el modo de funcionamiento que se ha utilizado partiendo del fichero SamplesConfig.xml que incluye la librería Mex_1.3, por lo que no va a ser objeto de análisis ya que no tiene el menor interés para este proyecto.

De este sencillo ejemplo se han obtenido ideas básicas para una imagen en color y una de profundidad, pero antes empezar a programar es necesario conocer en profundidad todas las posibilidades que tiene el sensor Kinect. Esta vez se repetirá el ejemplo anterior con un pequeño cambio, que será la opción de alineación de pixeles de las imágenes RGB y profundidad.

context = mxNiCreateContext('Config/SamplesConfig.xml');
option.adjust_view_point = true;
mxNiUpdateContext(context,option);
[Foto, depth] = mxNiImage(context);
mxNiDeleteContext(context);

Si se observan las imágenes obtenidas, se verá como la imagen en color no tiene ningún cambio pero en la imagen de profundidad, en cambio, aparece un marco exterior con un margen de 30 píxeles a la izquierda y en la parte superior; 5 píxeles de margen en la parte inferior y otros 15 píxeles en el margen derecho de la imagen. Mediante este marco se consigue que las imágenes de color y profundidad se encuentren alineadas.




En próximos capítulos analizaremos, por un lado, el modo de alta resolución que ofrece la Kinect y, por otro lado, el modo de imagenes infrarrojas. 
 
 
 
  4057 visitantes (8807 clics a subpáginas)  
 
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis