Boletín No 38
1 de Julio 2013
EXTRACCIÓN DE BORDES EN IMÁGENES DIGITALES USANDO VHDL EN UNA TARJETA FPGA SPARTAN-3A
Arturo Juárez Ríos
Roberto Antonio Orozco Velázquez
Emails:
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
,
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
Centro de Innovación y Desarrollo Tecnológico en Cómputo, IPN
Resumen
El reconocimiento de formas o patrones es un tema esencial en proyectos o sistemas donde se requiere de manera automática realizar una búsqueda, selección o discriminación de elementos. A si mismo se busca que el procesamiento de la información obtenida de las imágenes digitalizadas sea más rápido y eficiente. El obtener un contorno significa obtener la forma de un objeto, que puede ser utilizada por una variedad de aplicaciones o sistemas para su procesamiento, por ejemplo para ser comparada con alguna base de datos. El presente documento muestra de manera práctica un método sencillo para obtener el contorno de objetos en una imagen digital, mediante la obtención de las respectivas imágenes al desplazar la imagen original de manera horizontal y vertical, y realizando algunas operaciones lógicas. Todo esto programado en el lenguaje VHDL aplicado a una tarjeta de desarrollo FPGA y obteniendo la salida de manera visible mediante el uso de una matriz de leds con el apoyo de un registro de corrimiento.
El estudio de imágenes y el desarrollo de herramientas que permitan identificar contornos o bordes en imágenes es muy útil por ejemplo en la búsqueda automatizada de objetos o elementos importantes dentro de una amplia zona. En los equipos automatizados como en la robótica es usado para poder identificar, seleccionar y discriminar objetos. También para tomar puntos de referencia fijos y poder determinar la posición de un elemento movible.
Sobre los temas de procesamiento de imágenes existen varias herramientas utilizadas. Algunos procesos son relativamente sencillos y otros más complejos, dependiendo del tipo de imagen y lo que se pretende lograr como resultado al analizar dicha imagen.
En la figura 1(a) se muestra una foto a color, tomada mediante un dispositivo de telefonía móvil con sistema operativo Android 2.2.2. En la figura 1(b), la imagen es procesada por una técnica de detección de bordes por magnitud de sobel. En la figura 1(c) se muestra la imagen después de un proceso de umbralización.
(A) | (B) | (C) |
Figura 1. Extracción de bordes |
Al pasar la foto en color hacia un sistema monocromático y con sólo los bordes de los objetos o elementos encontrados, podemos reducir en gran medida el tamaño de la información que podría ser procesada por un sistema computacional, facilitando la identificación de formas predeterminadas, con lo cual aumenta la velocidad del proceso y la reducción en los requerimientos de los sistemas de procesamiento.
Para la realización de este proyecto, tomamos como base una imagen que puede ser almacenada en un espacio de 40 bits para poderla visualizar sin problema en una matriz de leds 8X8, utilizando sólo 5 renglones con sus 8 columnas. La información de entrada es almacenada en una variable llamada “original” de tipo SIGNAL de 40 bits:
original <= "0000000000111100001111000011110000000000"
A partir de esta variable se calculan los valores de otras dos variables del mismo tipo, una variable llamada “originalh” que obtendrá los valores para un desplazamiento horizontal de un bit sobre la información original, otra variable llamada “originalv” que contendrá el desplazamiento vertical de la imagen original al desplazarla 8 bits.
originalh <= “0000000000011110000111100001111000000000”
originalv <= “0000000000000000001111000011110000111100”
Al realizar la operación lógica original XOR originalv nos permite apreciar los bordes superior e inferior de la imagen. Con la operación lógica original XOR originalh apreciamos los bordes izquierdo y derecho correspondiente.
original XOR originalv <= “0000000000100010001000100010001000000000”
original XOR originalh <= “0000000000111100000000000000000000111100”
Finalmente, realizando la operación lógica OR sobre estos dos valores obtenemos el valor de la variable “resul”, que tiene como resultado una buena aproximación del contorno en la imagen.
resul <= (original XOR originalv) OR (original XOR originalh)
<= “0000000000111110001000100010001000111100”
Para revisar los resultados se programó con VHDL una tarjeta FPGA Spartan-3A con el software de desarrollo ISE Project Navigator 14.4 de la empresa Xilinx, Inc. En donde se creó el diagrama esquemático FPGA de la figura 2.
Se programaron 4 interruptores para seleccionar qué salida queremos visualizar en la matriz de leds conectada, ya sea la imagen original (O), la imagen calculada al desplazar la imagen original tanto vertical como horizontalmente, originalh (H), originalv (V) o el resultado (r) después de realizar las operaciones. Todas las operaciones son realizadas dentro del módulo “matrix” mostrado.
Figura 2. Diagrama del proyecto |
La salida de datos es enviada a un registro de corrimiento 74LS164 para enviar los datos a las ocho columnas, las 5 salidas de renglones se coordinan con la salida de datos para manejar los 40 leds para mostrar la imagen de salida. RELOJ alimenta al circuito síncrono de matrix, llevando el pulso de reloj de 50MHz proporcionado por la misma tarjeta Spartan 3A. relojC es proporcionado por un divisor de frecuencia dentro de matrix y alimenta el pulso de reloj para el funcionamiento del registro de corrimiento. El circuito del corrimiento de registro es alimentado con 5V proporcionados por un regulador LM7805 conectado a una pila de 9V. El circuito armado lo podemos ver en la figura 3.
Figura 3. Circuito construido |
Las salidas de la imagen original, desplazamiento horizontal, desplazamiento vertical y la imagen obtenida del contorno se muestran en la figura 4.
Figura 4. Salida visible de las etapas del proceso |
Conclusiones
Se logró el objetivo planteado de obtener el contorno de objetos en una imagen digital con el empleo de una tarjeta FPGA. Esta metodología para generar el contorno nos genera una excepción en una de las esquinas debido a la manera que se realizaron los desplazamientos. Definiendo el contorno interno en el que todos los puntos obtenidos son elementos de la imagen original y el contorno externo son puntos que no forman parte de la imagen original pero son inmediatamente contiguos a esta, apreciamos que el resultado obtenido es una combinación de ambos contornos. Se intuye que entre mayor cantidad de información o tamaño de la imagen tengamos, se apreciaría menos este error.
Con la programación de 4 interruptores de la tarjeta de desarrollo se pueden apreciar algunas de las etapas por las que atraviesa el proceso de generación del contorno resultante.
Referencias
* 74HC164; 74HCT164 8-bit serial-in, parallel-out shift register. Product data sheet. 2011.
* M. Morris Mano. (1986). Lógica Digital y Diseño de Computadores. Prentice Hall Hispanoamericana S.A.
* Peter J. Ashenden. (1996). The Designer’s Guide to VHDL. Morgan Kaufmann Publishers, Inc.
* Spartan-3A/3AN FPGA Starter kit Board User Guide . Xilinx Inc. 2008.
* XMUR38C8, 8x8 Dot Matrix Display. SunLED Product data sheet. 2011.