Bosquejo en Matlab del algoritmo de visión para la identificación de la pelota

Bueno, ya cuentas con una cámara pero no sabes cómo empezar a rastrear la pelota o algún objeto en particular. No te preocupes, un buen inicio se puede realizar en Matlab. Una vez que hayas obtenido los resultados deseados puedes pasar el algoritmo a cualquier lenguaje deseado. Como esta página se enfoca más en el desarrollo de aplicaciones y mecanismos para la categoría de humanoides en la competencia mundial Robocup, es por eso que el objeto a buscarse será una pelota de tennis anaranjada. Si tienen cualquier duda sobre las reglas actuales de esta categoría las pueden bajar de esta liga: Reglas Robocup Humanoides 2008.pdf.



Espacios de color RGB y HSV

Como ya se ha mencionado la pelota es de color anaranjado, lo que significa que se debe de realizar algún tipo de filtro por formas, para detectar el círculo que representa el balón y por colores, para encontrar el anaranjado que pertenece al color de la pelota. En esta sección se explica a grandes rasgos los beneficios de cambiar de espacio de color entre RGB a HSV para lograr una mejor separación y detección de los colores. Si desean una descripción más detallada pueden visitar esta liga: HSV Colorspace.

Para poder entender lo que representa el espacio de color RGB imaginense una pantalla incolora y que puede ser iluminada por tres focos a la vez, uno rojo (R), uno verde (G) y uno azul (B). Si se enciende el primer foco la pantalla se ve roja, si se enciende únicamente el segundo la pantalla luce verde y con el tercero enciende azul. Si se encienden los tres focos al mismo tiempo la pantalla luce blanca y si se apagan luce negra. Ahora imagínense que le hablan al electricista y le piden que les ponga unos dimmers para poder controlar la intensidad de cada uno de los focos. Estos dimmers que consiguieron pueden variar de intensidad de 0 a 255, donde 0 es que el foco esta apagado y 255 significa encendido a su máxima potencia. Gracias a estos dimmers ustedes pueden representar cualquier color en su pantalla, ayudándose de la combinación de los tres focos (componentes R, G y B) y de la intensidad de cada uno de ellos. Al lado izquierdo se muestra una imagen que representa el espacio de colores en RGB a través de un cubo. Este espacio de color presenta sus ventajas y desventajas, pero lamentablemente una gran desventaja es el no poder encerrar un color en un espacio de numeros que representan a sus tres componentes R, G, B. Es decir para representar el color anaranjado se pueden dar los valores de 242, 145 y 47 a sus componentes, pero también si se selecciona 217, 103 y 0 da una tonalidad anaranjada y como pueden observar las tres componentes han variado sin un patrón (aparente). Entonces si se quiere establecer un algoritmo que sea capaz de detectar objetos de color amarillo, anaranjado, azul y verde se vuelve un problema realmente complejo, para esto existe el espacio de colores HSV. Este espacio intenta representar los colores de la forma en que un ser humano los identifica. Sus componentes son Hue, Saturation y Value, donde Hue representa los colores elementales. Saturation simboliza la intensidad del color y Value la obscuridad o luminosidad del color. Teniendo así un rojo establecido por un valor en hue y la intensidad del rojo siendo roco tenue o muy vivo lo da la saturación y la obscuridad del color lo da value podiendo obtener desde un negro hasta un rojo vivo. Para un mejor entendimiento vean la figura de la derecha, este cono representa el espacio de colores en HSV. Los valores de Hue típicamente son grados y los de Saturation y Value se dan en percentiles. Para una mejor visualización sobre el formato de HSV y RGB pueden visitar una página de conversión, esta página en particular maneja la entrada de RGB en hexadecimal.



Explicación del algoritmo


A continuación vamos a ver el desarrollo del algoritmo para detectar el balón, para ello es necesario que tengan una noción del manejo del paquete de Matlab así como la creación de los archivos de extensión M. Al final de esta sección voy a pegar los archivos para las funciones aclara y enc_pelota, para que ustedes lo puedan correr en su PC. Cabe mencionar que este tipo de algoritmos se deben de ajustar a las características de la cámara, si lo quieren probar les recomiendo grabar la imagen sin filtrar que he puesto en este blog (bajar imágenes). Si ustedes se ponen a jugar con los valores en hsv pueden lograr aclarar una imagen, en este caso fue necesario porque la iluminación con la que se cuenta en el laboratorio de robótica no es la óptima. Como pueden observar la funcion aclara recibe como parámetro una matriz que contiene la imagen (Ver renglón 1). Después realiza una conversión del espacio de color de RGB a HSV para poder manipular la iluminación de la imagen (Renglón 2). Después de esto obtiene las dimensiones de la imagen para poder aplicarlas en el ciclo for una vez dentro del ciclo recorre todos los pixeles y dentro de cada uno aumenta en


un 20% el valor y disminuye en un 10% la saturación. Esto se realiza para poder tener colores más claros y que los blancos realmente luzcan como un color que pueda ser identificado como blanco y no como un amarillo claro o algun verde deslavado, etc. Una vez que termina el ciclo, convierte la matriz al espacio RGB y la regresa, obteniendo así una imagen similar a la que se encuentra en la parte superior derecha. En este momento se tiene la parte que puede aclarar la imagen para una mejor detección de los colores, ahora lo que se requiere es de una función que pueda "aplanar" los colores. Es decir que si un objeto en la imagen es para el ojo humano un verde, sin tomar encuenta a los daltónicos, el programa lo etiquete con un mismo color para que de esta forma sea de fácil identificación en el formato RGB. La sección que comprende el aplanado de los colores será omitida en la explicación por ser un algoritmo semejante al de la función aclara. La segunda etapa de la función enc_pelota consta de un binarizado. El binarizado se realiza para que la computadora se enfoque en buscar los objetos que cumplan con el color de interés de una forma eficiente enfocándose solamente en el color blanco. Una vez que se tiene una imagen binaria se corre un algoritmo de connected components para determinar cuántas áreas se han encontrado, ya que cabe la posibilidad de que hubiesen objetos del mismo color que la pelota o que se encontrase uno con algún ruido en la imagen que resultase de color anaranjado. Al encontrar las áreas se requiere descartar aquellas áreas que no sean circulares y para ello se selecciona un filtro por áreas, para que las áreas pequeñas no sean consideradas como posibles balones, y finalmente se filtran las áreas por su similitud a un círculo que en este caso se realiza con un cuadrado, considerando que las figuras que entran dentro de un cuadrado son un círculo "perfecto" y un cuadrado. Por esta razón se debe modificar esta parte para que sea comparado únicamente con un círculo, pero bueno ya tienen ustedes la idea de lo que se debe de realizar. Finalmente cuando se identifica el área semejante a un círculo se obtienen las coordenadas de su centroide y se entregan como resultado. A la derecha se muestra parte del algoritmo de enc_pelota, en estos días voy a subir los archivos M, por el momento espero y esto les ayude.
Saludos y suerte!



1 comments:

Virginia said...

Hola Moisés, soy Virginia.

He estado mirando este post sobre la conversión RGB-HSV y me parece muy interesante. Estoy buscando esos archivos de conversión en Matlab que he leído que estaban para descargar pero no los encuentro, podrías pasarlos para probarlos?

Muchas gracias.
Un saludo, Virginia