Está en la página 1de 9

4.

PROCESAMIENTO DE VÍDEO EN FPGA

En este apartado se extenderán los conceptos vistos en el Capítulo 3, correspondientes al


análisis y procesamiento de imágenes y vídeo, a los sistemas basados en FPGAs, haciendo
especial mención de las particularidades y diferencias que éstos tienen con respecto a los
sistemas basados en procesadores o DSP. Seguidamente, se estudiarán las estructuras lógicas
básicas, así como los bloques más comunes para la realización de filtros y procesamiento
espacial. Finalmente, se hará una evaluación de las ventajas que poseen los sistemas de lógica
programable con respecto a los demás en cuanto al procesamiento de vídeo en tiempo real.

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.

Encontrar una solución adecuada para la implementación de este tipo de aplicaciones


resulta difícil en general, ya que el coste económico para su desarrollo y fabricación suele ser
muy alto. Así mismo, las dimensiones del producto final también son una clara limitación que
dificulta la implementación de estos sistemas. De este modo, las potentes soluciones que basan
su funcionamiento en arquitecturas de procesadores en paralelo (como por ejemplo las redes de
computadores o los cluster de microprocesadores), están limitadas a grandes industrias, y a
aplicaciones muy específicas debido a su alto coste y a sus excesivas dimensiones.

En este contexto aparecen las alternativas basadas en dispositivos de lógica reconfigurable,


con el objetivo de hacer frente a las exigencias de las aplicaciones de procesamiento en tiempo
real, y ofreciendo grandes ventajas en cuanto a velocidad, portabilidad y costes de desarrollo.
Anteriormente se llegó a la conclusión de que los sistemas basados en FPGA ofrecían claras
ventajas con respecto a los circuitos integrados de aplicación específica (ASICs) y los
procesadores de propósito general. En resumen, se vio que las FPGAs son capaces de
implementar las capacidades de cómputo y paralelismo inherentes de los ASICs, mientras que
por otro lado, proporcionan otras ventajas aplicables a los procesadores, como pueden ser la
reconfigurabilidad, economía, rapidez y flexibilidad.

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:

x Arquitecturas específicas para cada tipo de algoritmo.


x Tratamiento y procesado en paralelo.
x Capacidad de trabajar con flujos de datos muy altos.
x Frecuencias de reloj más bajas que las usadas por DSP, con el correspondiente ahorro
energético.

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 73


Capítulo 4. Procesamiento de vídeo en FPGA

x No es necesario almacenar la información en memoria antes de procesarla;


(procesamiento "On The Fly").
x Gran flexibilidad para resoluciones y frame rates no estandarizados.
x Implementación de PCORES descritos en lenguaje de alto nivel.
x Gran capacidad de integración.
x Creación de sistemas reconfigurables.

También se trataron brevemente algunos de sus inconvenientes, entre ellos el hecho de


que algunos algoritmos de procesado podrían requerir varios pases sobre la imagen, haciendo
indispensable el uso de una memoria donde almacenar el fotograma completo. Las restricciones
de memoria en una FPGA suelen ser bastante altas, lo que lleva a hacer uso de diferentes
métodos para reducir el tamaño de la memoria necesaria, a costa de utilizar más recursos. En
segundo lugar, el flujo de vídeo en tiempo real (unido a las restricciones de almacenamiento),
hacen que la ventana de actuación de los diferentes filtros sea relativamente pequeña, no
teniendo una visión completa del fotograma. Este detalle marca una diferencia importante entre
los algoritmos de procesamiento en FPGA y los secuenciales basados en software, ya que en
éste último caso, una imagen podría estar almacenada en una matriz y se podría tener acceso a
cualquier píxel, en cualquier momento.

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.

4.1.1 Retos del procesamiento de imágenes en tiempo real

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.

Es por ello, que el diseño y la implementación de un sistema de visión en tiempo real


requiere de un profundo estudio y análisis previo a su implementación, teniendo en cuenta
parámetros como:

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.

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 74


4.1 Introducción

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.

Figura 4.1. Diferentes resoluciones de vídeo estandarizadas [60].

4.1.2 Los sistemas basados en FPGA como opción

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:

x Preparadas para trabajar con millones de MACs por segundo (operaciones de


Multiplicación/acumulación)
x Delay Locked Loops (DLL) que permiten la multiplicación o división de la frecuencia de
reloj, entre otras tareas.
x Interfaces DRAM / SRAM de alta velocidad y rendimiento.
x Manejo del ancho de banda en señales y buses ahorrando pines I/O.
x Elementos preparados para reducir el consumo total, así como las interferencias EMI y
el ruido en general.
x Registros de desplazamiento, útiles para buffers de línea o FIFOs.
x RAM distribuida para almacenar coeficientes o pequeñas FIFOs.
x Block RAM con capacidad "true dual-port" para almacenar datos de fotograma, líneas o
porciones de imagen, grandes tablas o FIFOs.
x MicroBlaze para tareas de compresión, manejo de protocolos de servicio, u otras
tareas.
x Integración "System on a Chip" ahorrando espacio, recursos, canales y líneas, así
como dinero.

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 75


Capítulo 4. Procesamiento de vídeo en FPGA

4.2 Estructura de un sistema de visió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.

Figura 4.2. Orden de llegada de los píxeles de vídeo en un fotograma.

4.2.1 Elementos disponibles

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.

Tabla 4.1. Bloques lógicos de la FPGA Xilinx® Spartan®-6 XC6SLX150T [63].

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 76


4.2 Estructura de un sistema de visión

4.2.2 Estructura general para procesado espacial

En el Capítulo anterior se hizo una breve descripción de las necesidades de un sistema de


procesado espacial, en el cual se requería por norma general tanto el píxel a procesar, como los
píxeles situados en el contexto de vecindad. Debido a la naturaleza del rastreo de la imagen en
aplicaciones de tiempo real, en la cual los datos de vídeo fluyen por un bus de datos sincronizado
con un reloj a la frecuencia de vídeo, se hace necesario disponer de buffers de línea que
almacenen los píxeles de la imagen correspondientes a una línea completa. Esto proporciona al
bloque de procesado una entrada del píxel actual junto a sus vecinos, a costa de un cierto retraso
que dependerá del número de píxeles vecinos que se van a procesar.

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].

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 77


Capítulo 4. Procesamiento de vídeo en FPGA

Figura 4.4. Diseño Hardware para la convolución en un filtro FIR 3x3 [62].

Nótese que la operación de convolución realizada es la siguiente:

Pout ( w11 ˜ k 0  w12 ˜ k1  w13 ˜ k 2  w21 ˜ k 3  w22 ˜ k 4 


 w23 ˜ k 5  w31 ˜ k 6  w32 ˜ k 7  w33 ˜ k 8) ˜ G

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].

4.2.3 Estructura general para procesado temporal

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

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 78


4.2 Estructura de un sistema de visión

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].

Figura 4.5. Estructura general para el procesado temporal [60].

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.

4.2.4 Cadena de procesado completa en un sistema de visión

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

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 79


Capítulo 4. Procesamiento de vídeo en FPGA

de ser modificados a través de Matlab / Simulink si el fabricante lo permite, o


simplemente ser configurados según los parámetros que posean.
x Bloques azules. Estos bloques son propiedad intelectual de Xilinx, y pueden ser
adquiridos en el centro de propiedad intelectual de Xilinx, a través de [64]. La mayoría
de estos bloques suelen ser de pago, aunque es posible la adquisición de licencias de
prueba en hardware.
x Bloques blancos. Estos bloques son específicos de cada sistema, y son construidos
por el ingeniero de hardware que esté diseñando el sistema. Suelen ser descritos y
simulados en la herramienta Xilinx ISE [26], para posteriormente ser incluidos en el
diseño completo a través de EDK.

Figura 4.6. Ejemplo de un sistema de visión completo [75].

Nótese que la mayoría de los bloques de procesado ocupan un espacio de memoria en el


bus de Microblaze, y son accedidos por éste para leer y escribir en sus registros; sin embargo, la
señal de vídeo fluye por un bus diferente (llamado XSVI, Xilinx Streaming Video Interface). Esto
implica que el procesador no tiene ningún tipo de tarea en el procesado del vídeo, y sus

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 80


4.2 Estructura de un sistema de visión

funciones se limitan a tareas de configuración de parámetros, visor de estadísticas y recopilación


de información de estado de los bloques.

Las tareas de captura de la imagen del sensor, la conversión a datos en streaming y el


almacenamiento de frames suelen hacerse en dispositivos externos específicos, mientras que la
generación de señales de sincronismo, la conversión de espacios de color y el procesamiento en
general suelen hacerse en bloques implementados con los recursos de la FPGA.

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.

PROYECTO FIN DE CARRERA. NICOLÁS AGUIRRE DOBERNACK 81

También podría gustarte