Subsistema de Dibujo Kinestésico

Este es el subsistema  que demando mayor  trabajado. Partimos de la capacidad de poder detectar movimiento para lo cual usamos las librerías para JAVA de OpenCV ubicadas en OPENCV Processing and Java Library cuya dirección url es: http://ubaa.net/shared/processing/opencv/.

Para ello dividí el trabajo en:

  1. Poder detectar el movimiento en regiones puntuales, lo que sirvió para localizar los menús que funcionarán sin necesidad de presionar el mouse o alguna tecla.

 Menú de selección de color activado por detección de movimiento

Fig. Menú de selección de color activado por detección de movimiento

Se trabaja básicamente sobre una diferencia de pixeles de un imagen capturada frente a otra imagen capturada posteriormente; si la diferencia es marcada en la región entonces se ha detectado movimiento; lo que corresponde a la selección de un color para el pincel que debe pintar en nuestro caso.

También se prevé que se tenga que borrar el lienzo donde se pinta lo que se hace con el menú borrar.

 

Fig. Menú de borrado de lienzo – activado por detección de movimiento

El código que presentamos a continuación permite poner una imagen en escala de blanco y negro y hace uso de las librerías de openCV:

  // luego de encontrado el color aplicamos filtros para detectar movimiento

  opencv.absDiff();                           //  Crear una diferencia de imagen

  opencv.convert(OpenCV.GRAY);                //  Convertir a una escala de grises

  opencv.blur(OpenCV.BLUR, 3);                //  Remover- ruido

   opencv.threshold(20); // Thresholds to convert to black and white; se puede //seleccionar en función de la luz del ambiente.

  1. Poder pintar sobre el lienzo (pantalla), para ello en primer lugar se trató de detectar bloques de objetos con la función blobs()  de OpenCV pero no fue muy efectivo ya que se detectaban mucho bloques (regiones agrupadas) y el pincel corría de un lugar a otro imposibilitando dibujos uniformes; por lo se vio por conveniente cambiar a un reconocimiento de color, aprovechando lo aprendido en el subsistema de reconocimiento de color. La idea guía fue presentar una imagen de un solo color, sacar el promedio de color dentro de la imagen capturada por el video y en base a este promedio guiar al pincel; en inglés a esta técnica se le denomina “color Tracking”. El inconveniente de este método es la cantidad de otras imágenes que puedan tener un color similar al que estamos siguiendo; esto hace que el pincel salte de un lugar a otro en algunas ocasiones. O en algunos casos la pérdida del color de seguimiento debido a la variación de luz que hace que un objeto se vea de un color distinto al del seguimiento. Una solución al caso planteado es combinar el reconocimiento de bloques y el reconocimiento de color; para ellos se tendría que implementar una red neuronal o algún tipo de filtro como el de Kalman;  pero cuya programación es más costosa.

Fig. Pincel activo – seguimiento de color (color traking)

A continuación se presenta el código que permite implementar el color tracking en el subsistema:

////sacar el promedio de los puntos de un color

Point avg( ArrayList l ) {

int  posicionY = 0;

if (l.size() == 0) {

return new Point( 0, 0 );

}

int x = 0;

int y = 0;

boolean cont = true;

for( Iterator i = l.iterator(); i.hasNext(); ) {

Point p = (Point)i.next();

x += p.x;

y += p.y;

if (cont)

{

posicionY = p.y;

cont = false;

}

}

if (( posicionY – y / l.size())< 20)

{

return new Point( x  / l.size(), y / l.size() + 50);

} else

{

return new Point( x  / l.size(), y / l.size());

}

}

Video 1. Institución Educativa “Jesús Nazareno”

Juan Cadillo

Anuncios

Acerca de Juan Cadillo

Juan Cadillo León
Esta entrada fue publicada en La herramienta desarrollada y etiquetada , , , , , . Guarda el enlace permanente.

Una respuesta a Subsistema de Dibujo Kinestésico

  1. Hi there! Someone in my Myspace group shared this site with us so I came to give it a
    look. I’m definitely loving the information. I’m book-marking and will be
    tweeting this to my followers! Excellent blog and excellent design and style.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s