Documentos de Académico
Documentos de Profesional
Documentos de Cultura
4.1 Introducción
Las aplicaciones que cuentan con sistemas de procesamiento de imagen son cada día más
complejas, y requieren de algoritmos de cálculo cada vez más rápidos y eficientes, para hacer
frente a las demandas actuales, cuyos principales objetivos son el manejo de grandes cantidades
de datos y la alta velocidad de procesamiento. Esto cobra especial importancia en aquellas
aplicaciones en las que las imágenes tienen que ser procesadas en tiempo real o en las que su
entrada es una señal de video generada por un CCD o por una videocámara.
Estas características, unidas a las ventajas en cuanto a costes de producción, hacen que
las FPGAs sean un excelente candidato a la hora de abordar la implementación de aplicaciones
de procesamiento de imagen y video en tiempo real.
En el Capítulo 1 se hizo una primera reflexión acerca de los sistemas de visión basados en
FPGA, y se especificaron las siguientes ventajas con respecto a los sistemas tradicionales:
En los sistemas de visión basados en FPGA, las imágenes se toman como un flujo
constante y se hace necesario otro tipo de planteamiento. En los sucesivos apartados se
planteará la forma de abordar los problemas de tratamiento de imágenes en tiempo real, en
sistemas de lógica reconfigurable.
Hoy en día son muchos los retos que todo ingeniero en hardware debe enfrentar a la hora
de realizar un sistema de visión artificial. A medida que las prestaciones de los sensores y
cámaras van mejorando, tanto en resolución de imagen como en tasa de fotogramas, la
complejidad computacional para procesar los datos en tiempo real va creciendo rápidamente.
Cada vez son más las aplicaciones que precisan de la captura y el análisis en tiempo real de
imágenes de muy altas resoluciones, y las especificaciones que imponen los nuevos sistemas en
campos como la medicina, o las aplicaciones aeroespaciales son cada vez más restrictivas.
x Portabilidad y escalabilidad.
x Capacidad de adaptación a diferentes resoluciones y frame rates.
x Diferentes tipos de escaneo de la imagen, y distintos espacios de blanking.
x Diferentes tipos de codificación de vídeo.
x Diferentes tipos de espacios de color, modos de representación y relación de aspecto.
x Capacidad de ofrecer aplicaciones de alto rendimiento.
x Capacidad de ofrecer protección de la propiedad intelectual.
x Capacidad de ofrecer alta seguridad frente a ataques externos o manipulación no
autorizada.
Un sistema óptimo debe hacer frente a estos retos, resultando en un dispositivo final
totalmente flexible y adaptable a los diferentes modos de vídeo, resoluciones, profundidad de
color, y al mismo tiempo debe estar protegido frente a ataques y robos de la propiedad
intelectual.
En el contexto descrito en el apartado anterior, las FPGA son la tecnología clave para el
procesamiento de vídeo digital, disponiendo de una gran flexibilidad para hacer frente a los retos
mencionados anteriormente, permitiendo así mismo el diseño y experimentación con prototipos
previos a la fase de producción, así como un alto grado de integración a nivel de sistemas,
soportando distintas interfaces de vídeo, tecnología LAN/WAN, adición de DSP, memorias de
control y máquinas de estado, protocolos en background, y una lista interminable de aplicaciones
y servicios [61].
En particular, las FPGA poseen elementos que se pueden usar para trabajar de forma
eficiente con vídeo de alta resolución:
En este apartado se verán las estructuras básicas de los sistemas de visión basados en
FPGA, detallando los recursos que son necesarios para su implementación.
Para comprender en su totalidad la forma de tratar los datos de vídeo, se muestra la Figura
4.2, en la cual se aprecia cómo los píxeles de vídeo son captados por la cámara y enviados por
un bus de datos en streaming, de izquierda a derecha y de arriba a abajo. Existe un reloj, llamado
reloj de vídeo, que indica cuando los datos que hay en el bus pertenecen a un nuevo píxel.
Como se vio en el apartado anterior, una FPGA dispone de ciertos recursos para su
utilización, como son las LUT, Flip-Flops, registros de desplazamiento, multiplexores, memoria
RAM distribuida y Block Rams, divisores de frecuencia, multiplicadores, administradores de reloj,
DSP Slices, entre otros. Las estructuras y bloques que representan un sistema de visión se
realizan con estos recursos, como se verá a continuación.
Debido a que este Proyecto Fin de Carrera está basado en el sistema de visión Xilinx®
Spartan®-6 FPGA Industrial Video Processing Kit, los recursos disponibles en la FPGA vienen
dados por los de la familia Spartan-6, en particular, los del modelo XC6SLX150T. En la Tabla 4.1
se pueden ver los recursos lógicos con los que cuenta este modelo [63]. Éstas características se
verán con más detalle en el capítulo siguiente.
En la Figura 4.3 se observa el diagrama de bloques de un filtro 3x3 aplicado a una imagen
que llega por un bus de datos. Los píxeles van llegando uno a uno de izquierda a derecha y de
arriba a abajo, y no se almacenan fuera de los buffers de línea. Estos buffers de línea se
implementan como registros de desplazamiento, FIFOs o memorias BlockRAM de doble puerto, y
son los encargados de proporcionar los píxeles vecinos dentro de la máscara 3x3. En general se
necesitarán (N-1) buffers de línea para aplicar un filtro con máscara NxN.
Figura 4.3. Ejemplo de filtro de suavizado aplicado a un flujo de vídeo en tiempo real sobre FPGA.
Una vez generada la ventana con los píxeles vecinos, se procede a la convolución con los
coeficientes del filtro 2D en caso de un filtro FIR lineal, o a la lógica necesaria para el caso de
filtros no lineales y operaciones morfológicas. En la Figura 4.4 se puede apreciar un ejemplo de
la convolución de un filtro FIR con una ventana 3x3 sobre una imagen [62].
Figura 4.4. Diseño Hardware para la convolución en un filtro FIR 3x3 [62].
Donde G es una constante opcional que se aplica a modo de ganancia del sistema. Para
realizar un filtro de tamaño general MxN son necesarias las siguientes operaciones por cada píxel
procesado:
x 3*((M*N)-1) sumas.
x 3*((M*N)+1) multiplicaciones.
Si por ejemplo se desea un filtro 5x5, esto daría como resultado un sistema que abarcaría 4
buffers de línea y 78 DSP Slices [60].
Como se vio anteriormente, los algoritmos de procesado temporal reciben como entrada N
píxeles, con la particularidad de que éstos pertenecen a diferentes fotogramas. Debido a la
naturaleza del rastreo de la imagen en aplicaciones de tiempo real, se hace necesario almacenar
cada uno de los fotogramas que se necesitan para el procesamiento. Por ello, se usan
estructuras que disponen de uno o varios frame buffers, que en sistemas basados en FPGA se
implementan como FIFOs, o memorias RAM de doble puerto. Para vídeo de alta resolución,
implementar un frame buffer se hace muy costoso en recursos. Ya se vio en el Capítulo 1 que un
fotograma perteneciente a un vídeo de resolución 1920x1080 píxeles, con una profundidad de
color de 24 bits a 30 f.p.s. llegaba a los 6.22 MBytes, y por tanto se suele evitar usar los recursos
internos de la FPGA (BlockRAM y memoria interna) para crear frame buffers. De hecho, en la
FPGA Spartan-6 no es posible almacenar ni siquiera un sólo fotograma de este tamaño en los
recursos internos.
Para hacer frente a los métodos de procesado temporal, los sistemas de visión basados
en FPGA disponen de memorias DDR SDRAM externas, que disponen de gran capacidad para
almacenar fotogramas de alta resolución, y pueden ser accedidas de forma dinámica, y a gran
velocidad gracias a los bloques DMA (Direct Memory Access). Estas memorias son accedidas por
el sistema, y normalmente se controlan con un procesador soft-core, como Microblaze [12] a
través del Bus Local [21].
Generalmente, tras capturarse el vídeo, el sistema va escribiendo los datos en una memoria
externa de manera circular, pudiendo almacenar tantos fotogramas consecutivos como se
necesiten siempre que no se excedan los límites de almacenamiento de la memoria. Para esta
escritura en forma circular, se necesita un puerto de escritura solamente. Sin embargo, para
acceder a los fotogramas almacenados, se necesitarán al menos dos puertos de lectura, que lean
dos píxeles almacenados en fotogramas distintos, para que el bloque de procesamiento temporal
realice las tareas necesarias.
Una vez vistas las estructuras comunes y las herramientas disponibles en los sistemas de
visión basados en FPGA, se muestra un ejemplo de una cadena completa de procesado, que se
ilustra en la Figura 4.6. Esta figura muestra un sistema basado en las herramientas y productos
de Xilinx®, aunque el concepto se puede extrapolar a otros sistemas de visión. En la figura se
pueden observar los siguientes elementos:
x Bloques amarillos. Estos bloques son creados a través de la herramienta EDK [34],
donde se especifica el procesador soft-core a utilizar, y los periféricos que se desean
incluir (Bloques de propósito general GPIO, controladores de puerto serie UART,
controladores de USB, de memoria externa DDR, etc..). En EDK también se
especifican los buses y conexiones de los diferentes periféricos con el procesador.
x Bloques rojos. Creados con la herramienta System Generator [39]. Son bloques de
procesamiento de señal que realizan diferentes tareas. Estos bloques tienen la opción
En el siguiente capítulo analizaremos más en detalle los modelos del sistema de visión
Xilinx® Spartan®-6 FPGA Industrial Video Processing Kit, del fabricante Avnet Electronics.