Vous êtes sur la page 1sur 118

6.

RECONOCIMIENTO DE SEALES DE TRFICO

En este captulo se implementar paso a paso un sistema de visin artificial, cuya funcin
es la deteccin y reconocimiento automtico de seales de trfico sobre una fuente de vdeo en
tiempo real, que bien puede ser un sensor de imagen, o una cmara digital. Este sistema se
realizar sobre el Kit de desarrollo Xilinx Spartan-6 FPGA Industrial Video Processing Kit,
utilizando los conocimiento tericos introducidos en captulos anteriores.

El sistema completo viene "empaquetado" en un bloque de nivel superior, que funciona


como un PCORE (Perifrico de Microblaze), que podr ser incluido en cualquier sistema de visin
basado en la familia Spartan-6 que utilice un bus de vdeo XSVI. As mismo, es posible adaptar el
diseo a otro tipo de sistemas y buses, como el bus AXI (Advanced eXtensible Interface protocol
for Spartan-6 y Virtex-6), que actualmente ha sustituido al bus XSVI [94].

En los siguientes apartados, se har una introduccin a la actualidad de la deteccin de


seales de trfico y su impacto, as como los problemas que enfrenta toda realizacin de este tipo
de sistemas. Seguidamente se estudiar la metodologa de trabajo utilizada en este Proyecto Fin
de Carrera, se plantearn los objetivos principales del diseo y se enumerarn las caractersticas
del sistema creado.

Posteriormente, se har una descripcin detallada del proceso de diseo, y se estudiarn


todos los bloques que componen el sistema, indicando en todo momento los problemas a
abordar, las ventajas e inconvenientes de las soluciones planteadas, la eleccin de la solucin
que ms se adecue a los requerimientos del sistema y los problemas encontrados durante la
realizacin.

Finalmente, las conclusiones y lneas de trabajo futuras se describirn en el Captulo 7.

6.1 Introduccin

Los sistemas de deteccin y reconocimiento de seales de trfico han sido objeto de gran
inters en los ltimos aos. La gran preocupacin por la seguridad vial, junto a la integracin de
sistemas inteligentes en los turismos ha hecho que los principales fabricantes de vehculos estn
incorporando en sus modelos nuevas tecnologas de reconocimiento de seales de trfico, que
asistan al conductor y que puedan servir como ayuda a la conduccin.

Aquellos sistemas dotados de inteligencia e integrados en un vehculo que facilitan


cualquier tarea se denominan asistentes para la conduccin (DSS, Driver Support Systems o
tambin llamados ADAS, Advanced Driver Assistance Systems), y pueden abarcar una amplia
gama de tareas, como la ayuda en el aparcamiento, sistemas de soporte al conductor, deteccin
y reconocimiento de sealizacin (TSR, traffic signal recognition), vehculos autnomos
inteligentes, conduccin automtica, deteccin de obstculos, informacin en tiempo real del
estado de las carreteras e informacin meteorolgica, entre otros.

Los primeros fabricantes en incorporar asistentes para la conduccin con reconocimiento de


seales de trfico fueron BMW y Mercedes en el ao 2009. Posteriormente se unieron otros
fabricantes como Opel y Audi [95]. Actualmente se siguen estudiando mtodos que permitan un
mayor grado de deteccin en las diferentes condiciones a las que se enfrenta un sistema de este
tipo. Como puede apreciarse, el reconocimiento de seales de trfico en tiempo real es un rea
de investigacin actual, que cuenta con escasos aos de vida y que por ello no est exento de
problemas, debido sobre todo a la gran cantidad de factores externos que afectan a la deteccin
de la seal vial.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 104


6.1 Introduccin

Figura 6.1. Las seales de trfico estn expuestas a un gran nmero de variables que dificultan su deteccin [170].

Las principales dificultades a la hora de implementar un sistema de deteccin y


reconocimiento de seales de trfico son las siguientes:

x Existe una gran cantidad de seales de trfico. Muchas de ellas presentan


caractersticas prcticamente iguales unas a otras, dificultando la identificacin. La
forma, el color y el smbolo pictogrfico de una seal pueden ser fcilmente
confundidas con otra de las mismas caractersticas.
x Las condiciones de luz son cambiantes y totalmente incontrolables. Los colores
cambian con la hora del da, la estacin del ao, las condiciones meteorolgicas
como lluvia, nubes, sol o niebla [96].
x La informacin de color es muy sensible a la variacin de luminosidad que producen
las sombras. El peor caso se da cuando la seal est parcialmente en sombras, por
ejemplo en el caso de una seal situada bajo un rbol.
x La geometra de la seal es otro obstculo. La seal puede aparecer rotada,
sesgada, girada o desplazada de su posicin original, dificultando en gran manera la
deteccin. Debido a este tipo de problemas, una seal se considera como la
proyeccin de un objeto en 2D en un plano 3D.
x La presencia de otros objetos en la imagen con caractersticas similares en color y
forma son bastante comunes. Las luces de los vehculos o los carteles publicitarios
son algunos ejemplos. El caso ms fcil de deteccin se da en carretera o autova,
mientras que la situacin ms difcil es cuando el sistema se enfrenta a un recorrido
en ciudad [97].
x Las seales permanecen en un ambiente exterior, estando expuestas a todo tipo de
degradacin y deterioro. Por ello, pueden aparecer distorsionadas, parcialmente
ocultas, daadas o descoloridas. Esto dificulta en gran manera la labor de los
sistemas de reconocimiento.
x Las seales pueden estar puntualmente ocultas por un objeto en movimiento, como
otro vehculo, obteniendo as una forma que vara con el tiempo y dificultando su
deteccin.
x La eficiencia en la deteccin de la seal vial depende del vehculo donde se implante
el sistema. Una imagen captada en un vehculo en movimiento puede presentar
desenfoque de movimiento. As mismo, las vibraciones que sufre la cmara juegan
un papel importante en el resultado final.
x La gran cantidad de seales de trfico existentes dificulta la implementacin de
sistemas de reconocimiento por comparacin de patrones, ya que estos sistemas
deberan ser capaces de almacenar grandes cantidades de imgenes a modo de
plantillas, y ser lo suficientemente rpidos como para realizar la identificacin en
tiempo real. Esto hace prcticamente imposible la implementacin a un costo
reducido.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 105


Captulo 6. Reconocimiento de seales de trfico

x No es posible general modelos off-line con todas las posibilidades de aparicin de


una seal, debido a los innumerables grados de libertad que se presentan, como
pueden ser la distancia del objeto a la cmara, las condiciones ambientales, la
rotacin con respecto al eje horizontal, la proyeccin de la seal sobre el plano del
vehculo, entre otros.
x La dificultad para implementar un sistema multi-regin es otro problema presente en
la actualidad. Las seales de trfico varan de una regin a otra, y un diseo
optimizado para un pas podra no funcionar correctamente en otro.
x En carretera existen tambin otras formas de representar seales viales, como
pueden ser los paneles de LEDs o de fibra ptica. Para ser identificados
correctamente, se requiere un tratamiento diferente, que debera ser tenido en
cuenta. En particular, si la frecuencia de refresco de los paneles no est coordinada
con la frecuencia de captura de la cmara, sta captar la seal vial incompleta, con
zonas negras, resultando un gran problema en la posterior identificacin.

Figura 6.2. Algunas seales y entornos problemticos para el reconocimiento.

Por todo ello, la extraccin de caractersticas de una seal de trfico es una tarea difcil, que
requiere multitud de pasos de anlisis, y que en muchos casos resulta ineficiente por las
condiciones adversas del ambiente o de la propia seal. Un estudio realizado en 2011 por el
RACC (Real Automvil Club de Catalua) en colaboracin con ADAC (Allgemeine Deutsche
Automobil Club) revelaba que los sistemas actuales no son 100% fiables. Incluso en ambientes
favorables, donde la calidad de visualizacin del conductor es buena, algunos sistemas bajo
estudio lograron porcentajes de reconocimiento mediocres [95].

Existen adems, otros inconvenientes propios del sistema, como son la capacidad del
mismo para realizar una identificacin en tiempo real, los recursos que necesita para ello y la
repercusin final en la calidad/precio del producto final. Como se coment anteriormente, la
cantidad de memoria disponible y la velocidad de procesamiento son factores a tener en cuenta.
Como ejemplo se podra mencionar [98], donde se ha implementado un sistema de
reconocimiento de seales de trfico que funciona a 10 fotogramas por segundo con una
resolucin de entrada de 384x288 pxeles, corriendo en un procesador Intel Xeon a 2.8 Ghz, o
tambin [99], donde se alcanza una velocidad media de deteccin de 1.806 segundos para una
resolucin de 720x576 pxeles, en un procesador Intel Core i5 a 3.1GHz. Un ltimo ejemplo lo
podemos encontrar en [100], donde se han usado dos procesadores de 6 ncleos para crear un
sistema basado en reconocimiento de patrones, consiguiendo 4 fotogramas por segundo, con
una resolucin de entrada de 640x480 pxeles y trabajando con dos procesadores Intel Xeon
5660 6-core a 2.80 GHz y dos unidades de procesamiento grfico NVIDIA GeForce GTX580.
Como se puede apreciar en los ejemplos anteriores, la implementacin de un sistema eficiente de

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 106


6.2 Estado del arte en el reconocimiento de seales de trfico

reconocimiento de seales de trfico requiere de una gran velocidad de procesamiento, y una


cantidad de recursos que aumentan considerablemente el coste del producto. El gran nmero de
etapas necesarias para la deteccin, clasificacin e identificacin de la seal vial hacen que los
sistemas actuales tengan una baja tasa de deteccin por segundo, si bien es cierto que es
suficiente para la gran mayora de aplicaciones.

Sin embargo, el uso de microprocesadores para la realizacin de este tipo de sistemas no


es la nica opcin que existe actualmente. Recientemente se han comenzado a estudiar diseos
basados en lgica reconfigurable, o circuitos ASIC para incrementar la eficiencia, reducir el
tiempo de respuesta y proporcionar mtodos ms precisos de deteccin de seales de trfico en
tiempo real. Es precisamente en este campo de los dispositivos de lgica reconfigurable donde
se trabajar en este Proyecto Fin de Carrera, creando un sistema de reconocimiento de seales
de trfico, siguiendo las mismas etapas de diseo que cualquier sistema real, aprovechando
adems las ventajas de las FPGAs.

6.2 Estado del arte en el reconocimiento de seales de trfico

La gran complejidad a la hora de tratar con la deteccin y el reconocimiento de seales de


trfico hace que actualmente haya pocos trabajos donde se aborde el problema completo y se
llegue a una solucin total. Sin embargo, debido a que sta es una de las caractersticas ms
importantes en los vehculos inteligentes y sistemas DSS, existen numerosos grupos de
investigacin por todo el mundo, que toman alguna etapa del proceso total con el fin de estudiarla
a fondo y mejorarla.

A pesar de que los primeros sistemas se comenzaron a instalar en los vehculos


recientemente a finales de 2008 [95], el reconocimiento de seales de trfico cuenta con largos
aos de estudio. El primer intento de crear un mtodo de reconocimiento de seales viales
apareci en el ao 1987, con el trabajo de Akatsuka and Imai [102], y desde entonces han
aparecido numerosas tcnicas nuevas que mejoran varios aspectos de los algoritmos existentes,
o proponen otros completamente nuevos.

En una primera aproximacin, un sistema de reconocimiento de seales de trfico consta


de tres etapas. La mayora de grupos de investigacin basan sus esfuerzos en alguna de estas
etapas, y proponen diferentes mtodos para optimizar los resultados del sistema final. Estas
etapas son [101]:

x Segmentacin de la imagen.
x Deteccin de la seal vial.
x Identificacin de la seal vial.

Segmentacin de la imagen. En esta primera etapa, la imagen es analizada y


segmentada, con el objetivo deshacerse de las partes que no aportan informacin til en la
imagen. Para esta etapa se usan mtodos basados en el color, o bien basados en la estructura.
Alguno de estos mtodos son la umbralizacin por color, deteccin de regiones, deteccin de
bordes, o anlisis de formas. Los trabajos actuales en esta primera etapa pueden clasificarse en
aquellos que usan los espacios de color estndar, y aquellos que realizan un estudio ms
exhaustivo del color. El espacio de color RGB es utilizado en [103] [104] [105] [106] por su
facilidad a la hora de trabajar con el color, aunque presenta grandes problemas bajo condiciones
de luz que cambian con el tiempo. Por ello, se comenzaron a usar otros espacios de color ms
robustos a las condiciones de luz, como el espacio de color HSI o LUV [107] [108] [109] [110]
[111].

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 107


Captulo 6. Reconocimiento de seales de trfico

A pesar de las ventajas que presentan los espacios de color alternativos al RGB, existen
otros problemas que dificultan la segmentacin, y vienen relacionados con la variacin de las
componentes de tono y saturacin con la distancia, y las condiciones meteorolgicas adversas.
Por ello, la etapa de segmentacin no es absolutamente fiable ni an trabajando con el espacio
de color adecuado. Es por ello que se han propuesto otras alternativas que clasifican el color de
formas ms complejas, como son los mtodos adaptativos utilizando bases de datos de color
[112] [113], el uso de patrones de texturas [114] [115], el uso de mtodos basados en la lgica
difusa [116], o el uso de redes neuronales y mquinas de vectores de soporte [117] [118] [119].

Aunque estos ltimos mtodos de clasificacin hacen la segmentacin ms robusta, no


tienen en cuenta el problema de la oclusin. La presencia de cualquier objeto que tape
parcialmente la seal, resultar en una mala segmentacin, problema que se ir acarreando en
posteriores etapas del sistema.

La mayora de estudios tampoco tienen en cuenta las seales de trfico monocromas


(Blancas y negras), debido a su dificultad para ser detectadas en el exterior. Estas seales son
particularmente complicadas en la etapa de segmentacin, en la cual la umbralizacin por color
se muestra totalmente ineficiente. Por ello se han propuesto diversas alternativas, como [120]
[121] [122] [123], donde se aplican otras tcnicas como el uso de operadores diferenciales para
detectar los bordes, o filtros de Gabor, para un posterior anlisis con clasificadores de Naive
Bayes o mquinas de vectores de soporte.

Deteccin de la seal vial. Comprende la segunda etapa del proceso de identificacin, en


donde se analiza la imagen segmentada y se evalan los objetos encontrados para definir las
posibles regiones de inters (ROI). La ROI es una regin de la imagen que contiene
potencialmente una seal de trfico. Para separar los distintos objetos de la imagen y definir una
ROI que los encuadre, es necesario aplicar algn mtodo de etiquetado de componentes
conectados y deteccin de objetos. Tambin es usual aprovechar las caractersticas de color y
forma para descartar objetos que no se correspondan con una seal vial, y as obtener ROIs con
ms probabilidades de contener una seal real. Algunas de estas tcnicas utilizan detectores de
bordes [124] o mtodos para detectar esquinas y ngulos predefinidos [125], filtros Laplaciano-
Gaussianos [126], o la transformada generalizada de Hough [127]. Para el etiquetado de
componentes conectados se utilizan diferentes tipos de mtodos, aunque todos ellos llegan al
mismo resultado: el establecimiento de distintas ROI en la imagen.

Una parte importante en la etapa de deteccin es la extraccin de la forma de la seal vial.


Para ello existen diferentes mtodos propuestos a lo largo de los aos. Por ejemplo, [128] explica
un mtodo de votacin de pxeles para indicar si la figura es un crculo, en [129] se utilizan
ecuaciones paramtricas de la elipse para detectar formas circulares. El motivo de usar elipses
es debido a la deformacin de las seales circulares por la perspectiva del plano de la imagen.
En [130] se explora la imagen con diferentes patrones circulares y triangulares predefinidos, y se
detectan de esta forma las coincidencias en la imagen original. La transformada de Hough, sin
embargo, es una de las ms utilizadas y eficientes, aunque su consumo computacional suele ser
alto. Por ello, se utilizan modificaciones que se adapten mejor al problema de las seales de
trfico, como limitar el clculo de ngulos a los de un tringulo (en torno a los 60) o de un
rectngulo (en torno a los 90), ahorrando clculos innecesarios [127][131].

Identificacin de la seal vial. Una vez halladas las diferentes ROI en la imagen, se debe
proceder a un anlisis de cada una de ellas, para extraer las caractersticas de inters, y as
identificar la seal de trfico que contiene. Debido a la gran cantidad de seales de trfico
existentes y a problemas como la oclusin o la distorsin, esta etapa debe ser sobre todo
eficiente. Esta es la ltima etapa del sistema, y se han propuesto numerosas tcnicas muy
diferentes para llevarla a cabo. Los algoritmos de identificacin de seales de trfico pueden
dividirse en cuatro grandes clases:

x Reconocimiento basado en patrones.


x Reconocimiento basado en histograma.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 108


6.2 Estado del arte en el reconocimiento de seales de trfico

x Reconocimiento basado en extraccin de caractersticas numricas.


x Reconocimiento basado en redes neuronales y SVM (Support Vector Machine).

Algunos ejemplos de mtodos basados en patrones se encuentran en [132] [133], donde se


han utilizado distintos sistemas, como pueden ser el algoritmo de Chamfer optimizado para ir
comparando una imagen con varios niveles jerrquicos de patrones hasta encontrar la
coincidencia ptima, o patrones de tamao fijo que son superpuestos calculando previamente el
centroide de la imagen candidata. En [127] se usa un sistema de correlacin cruzada del patrn
con la ROI, que previamente ha sido rotada y escalada para coincidir con los ejes del patrn. Una
vez calculado el coeficiente de correlacin para todas las plantillas, se elige aquella cuyo valor
sea mayor.

En [104] se usan dos redes neuronales para el proceso de identificacin. Una de ellas se
centra en las seales circulares y la otra en las triangulares, admitiendo imgenes de 30x30
pxeles y reconociendo hasta un total de 9 seales diferentes. [134] realiza la identificacin de la
seal vial usando pictogramas de los contornos de la imagen, y estableciendo que stos son
nicos para cada imagen en su clase.

En [135] se utiliza un sistema de proyecciones de los ejes verticales y horizontales de la


imagen para reconocer la seal, y usa los valores picos de dichas proyecciones como
caractersticas para la identificacin. Sin embargo, el mtodo establece que pueden existir dos
seales diferentes con los mismos valores, y por tanto se requiere un segundo anlisis que el
estudio no abarca.

Otro mtodo se encuentra en [136], donde se clasifican las seales viales usando un
modelado generativo Bayesiano, con densidades de probabilidad Gaussianas unimodales. Antes
de dicho modelado, se utiliza una tcnica llamada LDA (Linear Discriminant Analysis). Este
trabajo contiene una base de datos de 23 seales, con probabilidad de acierto del 94%.

Hasta hace relativamente poco, la mayora de sistemas propuestos eran basados en


software. Sin embargo, las numerosas ventajas de procesamiento en paralelo de los diseos
basados en FPGA o ASIC, hicieron que estos sistemas se tomaran seriamente en cuenta y
fueran objeto de numerosos estudios. Por ejemplo, en [137] se implementa un sistema TSR
completo basado en un procesador soft-core sobre una FPGA Cyclone 2. Tras la etapa de
deteccin, la ROI se reduce a un tamao de 80x80 pxeles, donde es comparada con una serie
de patrones almacenados en una base de datos. Tras la comparacin, el candidato con mayor
parecido es seleccionado. A pesar de que este trabajo est clasificado como un estudio de
deteccin en tiempo real, el tiempo necesario para efectuar todas las operaciones es de
aproximadamente quince segundos.

El trabajo de [138] implementa un sistema TSR sobre una FPGA Virtex-4. Este diseo es
capaz de reconocer diferentes limitaciones de velocidad y algunas seales de prohibicin. La
identificacin se lleva a cabo usando comparacin con patrones y mquinas de vectores de
soporte SVM. El tiempo total de computacin es de aproximadamente 0.5 segundos.

En [139] se implementa un sistema complejo para reconocer la seal de STOP. Para ello se
utilizan mtodos basados en histograma del gradiente (HoG), que requiere el clculo de
diferentes ngulos para los valores del gradiente, mltiples divisiones y funciones trigonomtricas
inversas, que no son implementables en hardware. Para realizar estas funciones, se crean
diferentes tablas de valores para las funciones que se van a utilizar. Finalmente la seal de STOP
es identificada si el resultado es positivo durante 6 de cada 10 fotogramas consecutivos. El
estudio proporciona un porcentaje de aciertos del 81.25%.

Otros estudios intentan optimizar alguna de las tres etapas mencionadas anteriormente,
como puede ser [140], que utiliza una segmentacin por color multi-etapa, basada en
clasificadores de mnima distancia, o el trabajo realizado en [141] donde se estudia a fondo la
deteccin de seales de trfico en condiciones atmosfricas adversas.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 109


Captulo 6. Reconocimiento de seales de trfico

6.3 Metodologa de trabajo

La metodologa seguida para el diseo y la implementacin del sistema de reconocimiento


de seales de trfico basado en el Kit de desarrollo Xilinx Spartan-6 FPGA Industrial Video
Processing Kit, se muestra en la Figura 6.3, tal y como se especificaba en el Captulo 1. Como
se aprecia en la figura, se ha consultado continuamente la literatura disponible, as como los
mtodos existentes y los algoritmos propuestos por los diversos grupos que han investigado
sobre la materia.

Con esta informacin, se ha hecho una evaluacin de las necesidades, un estudio de los
recursos disponibles y del tiempo necesario para implementar cada etapa del sistema y se han
tomado las decisiones oportunas para elegir uno u otro mtodo. Por ello, en los siguientes
apartados, donde se explicarn paso a paso las soluciones elegidas, se comenzar describiendo
los diferentes algoritmos disponibles, y se detallar la eleccin adoptada. Debido al limitado
alcance de este Proyecto Fin de Carrera, al tiempo disponible para su realizacin, y a otros
factores como la complejidad de algunos algoritmos, no siempre se elegirn los mtodos ms
eficientes. Sin embargo, en todo caso se justificarn, especificando las ventajas y los
inconvenientes de los mismos.

Alguno de los bloques creados han sido previamente modelados en Matlab en su totalidad.
Otros, debido a la naturaleza de la descripcin en hardware, tan slo han sido modelados
parcialmente. Finalmente, otros bloques tan slo tienen su equivalente en Matlab a modo
conceptual, para estudiar de forma emprica algunos valores numricos intrnsecos a las seales
de trfico, que posteriormente son usados en la realizacin en hardware. Todos estos bloques
sern estudiados en profundidad en posteriores apartados.

Figura 6.3. Metodologa de trabajo.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 110


6.4 Objetivos propuestos

6.4 Objetivos propuestos

En el presente Proyecto Fin de Carrera, se propone el diseo e implementacin de un


sistema de procesamiento de vdeo en tiempo real. Este proyecto consistir en un sistema de
deteccin automtica de seales de trfico, que har uso de los conocimientos adquiridos tras el
estudio y caracterizacin del sistema de visin Xilinx Spartan-6 FPGA Industrial Video
Processing Kit, del fabricante Avnet Electronics. Tambin se pondrn en prctica los mtodos
y algoritmos de procesamiento de imgenes vistos en captulos anteriores, y se disearn para
que funcionen en sistemas de lgica reconfigurable, con las herramientas ISE y EDK de Xilinx.

El sistema creado, aunque lejos de ser 100% eficiente en condiciones de exterior, tendr
que cumplir ciertas caractersticas, y funcionar de forma ptima dentro de su alcance. Tambin
deber ser diseado a partir de las tres etapas bsicas de un sistema de reconocimiento de
seales de trfico, que son la segmentacin, la deteccin y la identificacin de la seal vial.

As mismo, uno de los retos ms importantes que supone este Proyecto Fin de Carrera es
adquirir conocimientos y experiencia en el mundo del anlisis y procesado de imgenes, entender
las diferencias que existen entre el procesamiento mediante software y hardware, comprender las
limitaciones y ventajas de una implementacin en FPGA, y con todo ello crear un sistema que
funcione con resultados aceptables.

6.5 Caractersticas del sistema implementado

El sistema de reconocimiento de seales de trfico implementado en el Kit Xilinx


Spartan-6 FPGA Industrial Video Processing Kit cuenta con las siguientes caractersticas:

x Reconocimiento en tiempo real, con una tasa de 60 fotogramas por segundo.


x Resolucin de vdeo de entrada y salida de 1280x720 pxeles.
x Identificacin de 16 tipos de seales de diferentes caractersticas como tamao,
color, forma y pictograma.
x Capacidad de identificar hasta 8 seales simultneas.
x Identificacin del rea de inters realizada en el mismo vdeo de salida.
x Formato PCORE, fcilmente integrable en cualquier proyecto de EDK basado en
Spartan-6.
x Numerosos parmetros configurables mediante Generics.
x Buses de entrada y salida en formato Xilinx Streaming Video Interface (XSVI).
x Captura de vdeo en stream desde el sensor de imagen OmniVision.
x Segmentacin inicial basada en umbral de color, con umbral controlado por software.
x Etapas intermedias de filtrado y acondicionamiento de la imagen para resaltar las
zonas de inters.
x Etapa de etiquetado de componentes conectados y extraccin de la regin de inters
en tiempo real y en un slo pase.
x Bloque de generacin de patrones de imagen predefinidos con el objetivo de depurar
el cdigo en la etapa de etiquetado. Estos patrones son activados mediante software,
usando Microblaze.
x Identificacin de la seal vial basada en tres clasificaciones simultneas, hasta
encontrar la seal que corresponde con la imagen. El proceso de identificacin de la
seal no almacena ningn tipo de patrones ni plantillas, con el ahorro de memoria
que esto supone, sobre todo al aumentar el nmero de seales a identificar.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 111


Captulo 6. Reconocimiento de seales de trfico

x Identificacin robusta aunque la seal de trfico aparezca escalada, distorsionada o


rotada con respecto a su posicin ideal.
x Bloque OSD (On Screen Display) que accede a una ROM para mostrar informacin
en pantalla y aade los bounding box que determinan las seales identificadas.
x Comunicacin con la pantalla LCD TOSHIBA 8.4 LCD (TOSH84LCD-G) mediante la
interfaz ALI, utilizada como segunda pantalla para ver las etapas de segmentacin y
etiquetado en tiempo real.
x El sistema posee las caractersticas del diseo de referencia "procesamiento de
vdeo con sensor de imagen y frame buffer", es decir, una etapa previa de filtrado
(SPC, brillo/contraste, CFA, Correccin de color, Gamma), un frame buffer que se
almacena en la memoria externa DDR3, y que pasa de un dominio de reloj a otro. (de
30 f.p.s. del vdeo capturado por el sensor pasa a una tasa de salida de 60 f.p.s.).
x Comunicacin de Microblaze con el PC a travs de Hyperterminal. El sistema
dispone de un software que enva y recibe datos a travs del puerto UART de la
placa de desarrollo, y que permite al usuario configurar ciertos parmetros del
sistema de deteccin.

Cabe destacar tambin que cada uno de los bloques que componen el sistema han sido
descritos en su totalidad en VHDL. En ningn momento se han tomado plantillas, o asistentes
para la generacin de bloques, como por ejemplo CORE Generator. Todos los bloques BRAM de
doble puerto, ROMs, buffers de lnea, etc.. se han creado usando inferencia desde VHDL. Esto
ha requerido un laborioso estudio de la gua de XST (Xilinx Synthesis Tool) [142].

Esta decisin se tom con el objetivo de intentar que el cdigo no contenga "cajas negras"
o bloques cuyo comportamiento no hayan sido descritos al 100%, as como el de comprender lo
mejor posible el funcionamiento de los diferentes elementos y recursos de la FPGA, para que la
inferencia sea correcta.

6.5.1 Consideraciones de importancia sobre el sensor de imagen

Por otro lado, es necesario hacer algunas anotaciones de importancia acerca del sensor de
imagen OmniVision OV9715. A pesar de su buena resolucin de captura y su tasa de fotogramas
por segundo, ste sensor presenta cuatro grandes inconvenientes que afectan directamente al
sistema implementado. stos inconvenientes son:

x Distorsin debido a la lente de gran ngulo de visin.


x Distancia de actuacin muy cercana al sensor.
x Prdida excesiva de saturacin del color con la distancia.
x Distorsin de profundidad muy acentuada.

6.5.1.1 Distorsin debido a la lente


Debido a su tipo de lente "ojo de pez", el sensor proporciona un gran ngulo de visin, que
se acerca a los 180. Sin embargo, esto no siempre es ventajoso en el contexto de la deteccin
de seales viales. Por una parte, dependiendo de la posicin de la seal con respecto a la
cmara, sta puede aparecer distorsionada, sobre todo a medida que se acerca a los bordes del
cuadro de imagen, dificultando an ms su identificacin. En segundo lugar, se hace difcil tener
una referencia de la distancia a la que se encuentra la seal, dado que el tamao de la misma
depende tambin de su posicin con respecto al sensor (Figura 6.4).

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 112


6.5 Caractersticas del sistema implementado

Figura 6.4. Ilustracin que muestra los aspectos de distorsin del sensor cuando
la seal se encuentra muy cerca, o en los bordes de su rango de visin.

Esto es debido a que una parte considerable del ngulo de visin total se encuentra
concentrado en los bordes de la imagen, distorsionando la apariencia de los objetos. Por ello, en
la etapa de segmentacin, se ha decidido obviar todos los objetos que se encuentren a cierta
distancia de los bordes, ya que aunque es posible que en ellos exista una seal vial, su
identificacin sera prcticamente imposible por los motivos explicados.

6.5.1.2 Distancia de actuacin muy cercana al sensor


Otro de los grandes inconvenientes del sensor, es que ste ha sido diseado para tener
una muy buena resolucin a distancias comprendidas entre 3 y 10 cm. del mismo. Su distancia
focal es muy corta, lo cual hace que toda la imagen aparezca enfocada, aunque la nitidez de los
objetos se reduce drsticamente a medida que se alejan del sensor.

Por otro lado, si se ignoran los efectos de la nitidez de los objetos muy alejados de la
distancia focal (cosa que no podr hacerse como se ver a continuacin), la distancia mxima
para que una seal pueda ser identificada se ha estimado entre 10 y 15 metros. Dentro de estos
lmites la seal tendr el tamao suficiente dentro de la imagen (ROI mayor que 30x30 pxeles)
para su procesamiento. Esta condicin implica una eficiencia pobre para sistemas reales
funcionando en vehculos. Tmese como ejemplo un vehculo viajando a una velocidad media de
80 Km/h. Para conocer la ventana temporal de deteccin de este sistema, en caso de incorporar
el sensor de imagen OmniVision OV9715 realizamos los siguientes clculos:

1000
Km m 1 1
80 22.2m / s
h Km 60 min 60 s
h min

Debido a la restriccin por la cual una seal vial debe estar entre 10 y 15 metros de la
cmara para ser identificada, esto deja una ventana temporal de apenas 0.45 segundos para
detectar la seal e informar al conductor, antes de que esta desaparezca del rango de visin del
vehculo. Como podemos ver, esto no es ni mucho menos lo que se espera de un sistema de
estas caractersticas. Por ello, los sensores de gran ngulo de visin como el que se dispone,
estn pensados para otras tareas relacionadas con los sistemas de ayuda a la conduccin, como
el de asistencia en el aparcamiento, entre otros.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 113


Captulo 6. Reconocimiento de seales de trfico

6.5.1.3 Prdida excesiva de saturacin del color con la distancia


Una de las desventajas ms restrictivas del sensor de imagen es su prdida de nitidez a
medida que el objeto se aleja de la distancia focal. Esta prdida de nitidez viene acompaada de
una difusin indeseada de los bordes de los objetos y, la peor de todas, una prdida excesiva de
saturacin de los colores.

Como se vio en la Seccin 3.1.3, esta prdida de saturacin es, en mayor medida, la
responsable de una mala segmentacin, ya que a medida que los colores pierden su nitidez y se
acercan al gris, se hace ms difcil establecer umbrales y regiones para identificarlos y separarlos
en diferentes segmentos.

Este hecho obligar a realizar las pruebas del sistema a distancias cortas del sensor,
utilizando modelos a escala de las seales viales a identificar.

6.5.1.4 Distorsin de profundidad


El hecho de trabajar a distancias cortas del sensor, hace que la distorsin de profundidad
que proporciona la lente afecte en mayor medida a los objetos. Esto a su vez afecta directamente
a la eficiencia del sistema para detectar la forma de la seal, pudiendo llegar a confundir seales
triangulares con rectangulares, y viceversa (Figura 6.5).

Figura 6.5. Mala identificacin de la forma de la seal, debido a la distorsin de profundidad.

6.5.1.5 Independencia del sistema con respecto al sensor de imagen


En cualquier caso, el sistema de reconocimiento de seales de trfico implementado no
depende en absoluto del sensor de imagen, pudindose reemplazar este componente por
cualquier cmara digital con salida DVI o sensor de mejores prestaciones, y configurar el sistema
para ajustar la resolucin y otros parmetros al nuevo elemento. Esta flexibilidad que tiene el
sistema creado es una ventaja, que incluso llega ms all al no depender de la placa de
desarrollo ni de ningn otro elemento, con excepcin de la FPGA Spartan-6.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 114


6.6 Diagrama de bloques del sistema completo

Figura 6.6. Fotografa del sistema completo en funcionamiento.

6.6 Diagrama de bloques del sistema completo

El diagrama de bloques del sistema completo se muestra en la Figura 6.7. Como se ha


mencionado anteriormente, el diseo de referencia base que se ha utilizado es el de
"Procesamiento de vdeo con sensor de imagen y frame buffer", proporcionado por el fabricante
[75]. Este diseo de referencia cuenta con dos dominios de reloj, que proporcionan frecuencias
de vdeo de entrada y salida diferentes. El sensor captura la imagen a una resolucin de 720p y
30 fotogramas por segundo, que la placa FMC-IMAGEOV se encarga de acondicionar y enviar al
siguiente bloque. A partir de ah existe una cadena inicial de procesamiento, con parmetros
controlados por Microblaze. Seguidamente se tiene un controlador DMA y del bloque de control
de la memoria DDR3 que se encarga del frame buffer. Cada fotograma es tomado de esta
memoria y enviado por el bus XSVI al doble de frecuencia (75 Mhz), cambiando de esta forma la
tasa de envo de 30 a 60 fotogramas por segundo, manteniendo la resolucin inicial.

En este nuevo contexto de reloj es donde se ha incluido el sistema de reconocimiento de


seales de trfico, junto a un bloque que realiza las funciones de interfaz para la pantalla LCD. El
motivo de elegir este lugar en la cadena total de procesamiento no es otro que aprovechar la
mayor tasa de fotogramas por segundo, y hacer funcionar el sistema de reconocimiento con un
reloj al doble de frecuencia. Esto ha supuesto algunas complicaciones a la hora de hacer cumplir
las restricciones temporales de las etapas ms complejas, pero ha resultado ventajoso en cuanto
a la experiencia adquirida al adaptar el sistema a las restricciones impuestas.

El bloque que controla la pantalla LCD recibe como entrada un canal de vdeo que sale de
las etapas intermedias del proceso total, y muestra de qu forma se estn llevando a cabo la
segmentacin y el etiquetado de componentes conectados.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 115


Captulo 6. Reconocimiento de seales de trfico

Para la pantalla LCD se ha utilizado parte del cdigo proporcionado por el distribuidor [73], y
se ha descrito el resto de cdigo para que se adapte a las necesidades del diseo.

En sucesivos apartados, se estudiar en detalle el bloque de reconocimiento de seales de


trfico, sin perder de vista el contexto en el cual se encuentra, que es el sistema completo que se
aprecia en la Figura 6.7.

Figura 6.7. Diagrama de bloques del sistema completo (figura derivada de [75]).

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 116


6.7 Diagrama de bloques de la interfaz de nivel superior

6.7 Diagrama de bloques de la interfaz de nivel superior

En la Figura 6.8 se muestra el diagrama general de los ficheros de nivel superior del
sistema de reconocimiento de seales de trfico. Los ficheros correspondientes a las entidades
de nivel superior del PCORE se encargan de proporcionar una interfaz con el sistema incrustado
EDK y con el procesador Microblaze. Estos ficheros son creados por la herramienta de Xilinx
automticamente, gracias al asistente que dispone el software para la creacin o importacin de
nuevos perifricos. Este asistente crea los ficheros necesarios para el nuevo perifrico y permite
definir parmetros como:

x Nombre del PCORE y versin.


x Bus al que se conectar: OPB (On-Chip Peripheral Bus), Processor Local Bus (PLB),
Fast Simplex Link (FSL).
x Opciones adicionales de la interfaz IPIF (aparte de la codificacin y decodificacin de
direcciones de registros)
x Nmero de registros accesibles por software y profundidad de los mismos en bits.
x Otras opciones de simulacin y ficheros opcionales.

Figura 6.8. Diagrama de bloques top level del PCORE, e interfaz con el procesador.

Como se aprecia en la Figura 6.8, se ha creado una estructura comn que permite a
Microblaze reservar un espacio de memoria para el nuevo perifrico, as como leer o escribir en
los registros del mismo a travs de software. Estos registros son convertidos en puertos de
entrada y salida al bloque principal gracias a la interfaz IPIC (IP Interconnect Interface), la cual
permite que se puedan acceder a ellos como si se tratara de cualquier seal. As mismo, se
proporciona un mecanismo "Soft Reset" que puede ser activado por software. Esta seal puede
ser implementada como un reset sncrono o asncrono, dependiendo de la descripcin que se
haga.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 117


Captulo 6. Reconocimiento de seales de trfico

Las interfaces de entrada y salida de vdeo del PCORE, sin embargo, no se crean
automticamente, y hay que definirlas en los archivos correspondientes del PCORE. La
estructura de ficheros y directorios de un PCORE es la siguiente [34].

Directorio Directorio Fichero Descripcin

my_ip_v1_00_a Directorio superior. Contiene el nombre y la


versin del perifrico.

data Directorio que contiene los archivos que


definen el perifrico.

my_ip_v2_1_0.mpd Microprocessor Peripheral Definition. Este


fichero contiene los parmetros, puertos,
interfaces y buses que definen el PCORE.

my_ip_v2_1_0.pao Peripheral Analysis Order. Define qu


ficheros (VHDL, Verilog, Netlist) definen el
PCORE.

hdl Directorio que contiene los ficheros fuente


del PCORE.

verilog/*.v Directorio de ficheros de Verilog.

vhdl/*.vhd Directorio de ficheros de VHDL.

netlist Directorio de Netlist.


Tabla 6.1. Estructura de directorios y ficheros de un PCORE.

En el archivo MPD se definirn todas las interfaces de comunicacin con el PCORE, que
sern las que despus habr que conectar desde EDK. En este fichero irn definidas tanto las
interfaces XSVI de entrada y salida, como el bus LCD OUT que conectar con el bloque ALI.

Por otro lado, todos y cada uno de los ficheros creados en VHDL tendrn que ir definidos en
el archivo PAO, ya que ste ser accedido por la herramienta de sntesis para generar el Netlist
completo del sistema. Para sintetizar el perifrico, XST accede uno por uno a los archivos fuentes
(VHDL, Verilog o Netlist), y en orden inverso al que estn listados (de abajo hacia arriba). Por ello
cuando se crea una nueva entidad, no slo basta con instanciarla y mapearla en su entidad de
nivel superior, sino que adems tendr que aadirse una entrada nueva en el archivo PAO.

Por ltimo, el fichero bloque_principal.vhd es la entidad de nivel superior del sistema


creado, y el que realmente realiza las tareas objetivo de este Proyecto Fin de Carrera. ste
mdulo es el que contiene instancias de todos los ficheros del sistema de deteccin de seales
de trfico, y ha sido descrito usando la herramienta Xilinx ISE [26][27]. Para comunicarse con
Microblaze, se ha instanciado dentro del bloque explicado en este apartado, que como se ha
visto, hace de interfaz de comunicacin con Microblaze.

El mdulo bloque_principal.vhd y todos los bloques asociados a l se describirn


brevemente en el siguiente apartado.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 118


6.8 Diagrama del bloque de reconocimiento de seales de trfico

6.8 Diagrama del bloque de reconocimiento de seales de trfico

En la Figura 6.9 se muestra el diagrama general del bloque de reconocimiento de seales


de trfico, cuyas partes sern explicadas brevemente a continuacin. En posteriores apartados se
har un estudio ms profundo de cada una. Para hacer el diagrama ms comprensible, se han
omitido algunas seales y bloques de menor inters, como las de reloj, seales de control, o
bloques de retrasos que proporcionan el contexto adecuado a la informacin que llega por
puertos de distintos mdulos.

Figura 6.9. Diagrama de bloques del mdulo "bloque_principal.vhd".

Las seales que se aprecian en color verde pertenecen al registro de control slv_reg0
accesible por software, y sirven para controlar diferentes parmetros, como la activacin de los
patrones de depuracin en la etapa de segmentacin, la visualizacin del etiquetado, las regiones
de inters o el resultado final en la pantalla principal. Tambin contienen parmetros para
configurar los umbrales de segmentacin que se vern en el apartado correspondiente. Estas
seales son utilizadas por el usuario desde un PC con Hyperterminal, a travs de una consola
con interfaz de texto, y sern estudiadas en el Apartado 6.18.

Las seales que se aprecian en color rojo corresponden al flujo de vdeo en sus diferentes
etapas de procesado. As, por un lado viaja el vdeo sin procesar y llega directamente al
multiplexor final, y por otro lado va pasando de una imagen RGB con 24 bits de color, a una

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 119


Captulo 6. Reconocimiento de seales de trfico

imagen binaria (con valores 1-0) y posteriormente pasa a ser una seal de vdeo etiquetado,
donde cada pxel recibe un nmero que lo identifica dentro de un objeto nico.

Por ltimo, las seales de color negro pertenecen al grupo de seales de control del bloque
principal, y transportan informacin de los ejes de coordenadas actuales, las coordenadas de las
regiones de inters, las direcciones de acceso a la ROM o parmetros referentes a las seales de
trfico detectadas.

Cada bloque que aparece en la Figura 6.9 contiene instancias y mapeados de otros
bloques, y merecen en s mismos nuevos diagramas de bloques que se irn estudiando en
sucesivos apartados. En el Anexo 3, aparecen los esquemticos RTL del sistema completo. A
continuacin se describen brevemente los bloques que aparecen en el diagrama anterior.

Bloque divisor. Se encarga de dividir la seal entrante de vdeo en dos ramas. Una de
ellas se utilizar en la cadena de procesado, y la otra permanece invariante a lo largo de todo el
proceso hasta el multiplexor final, que la usar para aadir la informacin en pantalla, como los
carteles y las cajas que sealan las seales de trfico detectadas.

Generador de ejes de coordenadas. Este bloque toma como entradas las seales de
sincronismo del flujo de vdeo, y utiliza dos contadores para sacar a su salida las coordenadas de
los ejes X e Y de la imagen. Estas coordenadas son utilizadas por la mayora de los bloques de la
cadena de procesado.

Etapa de segmentacin. Primera etapa de inters en el sistema de reconocimiento de


seales de trfico. Utiliza el espacio de color RGB y umbralizacin por color para transformar el
vdeo de entrada en un flujo de imgenes binarias, donde cada pxel se clasifica como un pxel de
fondo o un pxel de primer plano. Utilizando las seales de configuracin por software, se pueden
variar los umbrales y ganancias de la segmentacin. Este bloque contiene adems un generador
de patrones binarios con el objetivo de depurar las sucesivas etapas del sistema. Los patrones
son conocidos y cada uno de ellos contiene diversas caractersticas y casos especficos que
precisan de un estudio particular.

Acondicionamiento: mediana. Filtro de mediana, que aplicado sobre una imagen binaria
resulta en la eliminacin de picos de ruido y zonas de alta frecuencia de la imagen. Se compone
de dos buffers de lnea y varios biestables, que proporcionan el contexto de vecindades del pxel
actual, adems de un bloque con la lgica decisora del filtro.

Acondicionamiento: erosin y dilatacin. Pertenecen tambin al grupo de


acondicionamiento de la imagen para posteriores etapas. Estos bloques realizan las ya
estudiadas operaciones morfolgicas de erosin y dilatacin, resultando en una imagen binaria
ms limpia de ruido y eliminando los grupos de pxeles de primer plano que no pertenezcan un
objeto de mayor tamao. Cada bloque se compone de dos buffers de lnea y varios biestables,
que proporcionan el contexto de vecindades del pxel actual, adems de un bloque con la lgica
decisora del filtro.

Etapa de etiquetado de componentes conectados. Segunda etapa del sistema, en el


cual se toma la imagen binaria acondicionada previamente, y se realiza una deteccin de los
objetos de inters, separando cada uno de ellos en una ROI distinta. Este bloque realiza el
etiquetado de los pxeles, y utiliza varias BRAM de doble puerto configuradas como read-first
para la actualizacin en tiempo real de las coordenadas del objeto etiquetado. Adems, trabaja
con punteros que indican el estado de las etiquetas, un bloque que toma el contexto del pxel y
decide qu etiqueta le corresponde, un bloque multi-funcin controlado desde la entidad de nivel
superior que realiza tareas de actualizacin de coordenadas, fusin de etiquetas, puesta a cero
de las BRAM, as como sacar las coordenadas de las 8 regiones de inters en cada espacio de
blanking vertical.

Multiplexor de mscaras y salida de vdeo LCD. El multiplexor de mscaras es


controlado con una seal de seleccin que proviene de un registro de Microblaze. La funcin de

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 120


6.8 Diagrama del bloque de reconocimiento de seales de trfico

este bloque es decidir qu flujo de vdeo llegar al multiplexor final (y por tanto ste puede decidir
mostrarlo por la pantalla principal del sistema). La seal de seleccin indica a este bloque si se
desea enviar por la salida la imagen binaria etiquetada (utilizando un cdigo de colores para las
etiquetas), o si se desea mostrar directamente las ROI resultantes del proceso anterior. Este
bloque tambin tiene una salida de vdeo fija que ir directamente al PCORE que hace de interfaz
con la pantalla LCD de 8.4''.

Etapa de identificacin. Esta es la tercera y ltima etapa correspondiente al proceso de


reconocimiento de seales de trfico. En ella se toman las diferentes ROI que aparecen en el
fotograma actual, y usa una entrada de vdeo sin procesar para realizar las tareas de extraccin
de caractersticas de cada ROI. En primer lugar se procede a una segmentacin "On-The-Fly", en
la que se decide a qu segmento pertenece cada pxel (rojo, blanco, azul, negro o fondo). Con
ello se incrementan contadores que detectan qu porcentaje de estos colores contiene cada
seal. Para evitar que los pxeles de fondo de la ROI distorsionen el resultado de este recuento
(por ejemplo una seal roja y blanca sobre un cielo azul se podra detectar como una seal roja,
blanca y azul), se usa un sistema zero-crossing, que utiliza conceptos de cruces por cero en
seales binarias y los aplica a seales a color. Este mtodo identifica cundo un pxel pertenece
al interior de la seal vial, y cuando el pxel es de fondo, resultando en unos porcentajes de color
ms eficientes. Seguidamente se utiliza un sistema de descriptores que analizarn la distancia
existente desde diferentes puntos de los bordes hasta la seal, para identificar la forma de la
misma, aunque esta est rotada (siempre dentro de unos lmites aceptables). Por ltimo, se
analizar el pictograma para discriminar entre diferentes seales que posean igual tamao, color
y forma, pero sean distintas. Con ello se generar una seal que codificar estas caractersticas
para el siguiente bloque. Cabe destacar que cada ROI se analiza por separado y en paralelo,
utilizando instancias iguales de los bloques decisores.

Coherencia entre fotogramas. proporciona un mecanismo de coherencia entre


fotogramas, que regulan efectos como cambios y desapariciones bruscas en la identificacin,
entre un fotograma y otro.

Decodificador Decodifica las caractersticas de la etapa de identificacin anterior para


calcular la direccin de inicio del cartel de la seal identificada (Offset en una ROM), y otros
parmetros de inters.

Memoria ROM. Contiene carteles con los nombres de la seal, cada uno de ellos de
tamao 64x16 pxeles. Estos carteles estn codificados con 1 bit por pxel, en el cual un '0' es un
pxel de fondo, y un '1' es un pxel perteneciente a una letra. De esta forma, el multiplexor final los
decodifica y los muestra a color. Cada cartel se muestra por pantalla al doble de tamao, es
decir, a 128x32 pxeles, utilizando para ello un sistema de sobremuestreo por el cual cada pxel y
cada lnea se lee dos veces.

Multiplexor final y OSD. Bloque que recibe como entrada tanto el vdeo sin procesar del
divisor inicial, como el vdeo procesado del multiplexor de mscaras, y decide cual de los dos
mostrar por la pantalla principal. Tambin realiza tareas de OSD (On-Screen-Display), mostrando
los recuadros que identifican las seales viales detectadas, y accediendo a la ROM de carteles
para mostrarlos por pantalla.

Buffer de lnea y bloque Q. Diferentes bloques de retrasos y buffers de lnea, que


proporcionan el contexto adecuado en el flujo de informacin.

Cabe destacar que existen ms bloques y archivos fuente que los que aparecen en la
Figura 6.9, que se presenta de forma esquemtica. En la Figura 6.10 se aprecia la estructura de
ficheros fuente del mdulo "bloque_principal.vhd", visto desde la herramienta Xilinx ISE. Todos
estos elementos se estudiarn en detalle en sucesivos apartados. La interfaz de entrada y salida
del fichero bloque_principal.vhd se muestra en la siguiente tabla. Para una mayor comprensin
de las Generics en su contexto, se describirn estos parmetros en sus correspondientes
entidades.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 121


Captulo 6. Reconocimiento de seales de trfico

BLOQUE PRINCIPAL

Nombre del
bloque_principal.vhd
fichero
entity bloque_principal is
generic
(
C_XSVI_DWIDTH : integer := 24;
C_NUM_BITS_LABELS : integer := 8;
C_FAMILY : string := "spartan6";
C_BITS_X : integer := 11;
C_BITS_Y : integer := 10;
C_END_OF_X : integer := 1279;
C_END_OF_Y : integer := 719
);
port
(
clk : in std_logic;

mux_sel : in std_logic;
seg_treshold : in std_logic_vector(0 to 1);
blob_bypass : in std_logic;

Entidad active_video_in : in std_logic;


hblank_in : in std_logic;
vblank_in : in std_logic;
hsync_in : in std_logic;
vsync_in : in std_logic;
video_data_in : in std_logic_vector((C_XSVI_DWIDTH - 1) downto 0);

active_video_out : out std_logic;


hblank_out : out std_logic;
vblank_out : out std_logic;
hsync_out : out std_logic;
vsync_out : out std_logic;
video_data_out : out std_logic_vector((C_XSVI_DWIDTH - 1) downto 0);

active_video_out_label : out std_logic;


hsync_out_label : out std_logic;
vsync_out_label : out std_logic;
video_data_out_label : out std_logic_vector((C_XSVI_DWIDTH - 1) downto 0)
);
end bloque_principal;

Descripcin de puertos

clk Seal de reloj de vdeo a 74.25 Mhz

Seal externa controlada por software. Indica al multiplexor final si


mux_sel mostrar la seal de vdeo original o la mscara proveniente del
multiplexor de mscara.

Seal externa controlada por software. Indica al bloque de segmentacin


seg_treshold que muestre la seal original, o uno de los 3 patrones predefinidos para
tareas de depuracin.

Seal externa controlada por software. Indica al multiplexor de mscaras


blob_bypass qu flujo de vdeo mostrar, entre la imagen etiquetada o las ROI
detectadas.

<video>_in,
Entrada y salida de la seal de vdeo (datos y sincronismo).
<video>_out

<video>_label Salida de vdeo hacia la pantalla LCD 8.4'' (datos y sincronismo).


Tabla 6.2. Interfaz del mdulo bloque_principal.vhd

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 122


6.8 Diagrama del bloque de reconocimiento de seales de trfico

Figura 6.10. Estructura de ficheros fuente de la entidad de nivel superior bloque_principal.vhd

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 123


Captulo 6. Reconocimiento de seales de trfico

6.9 Herramientas utilizadas y etapas de desarrollo

En el presente Proyecto Fin de Carrera se ha trabajado bsicamente con dos


herramientas. Para el diseo del sistema completo con el procesador incrustado, se ha utilizado
Xilinx Embedded Development Kit (EDK) [34], usando el diseo de referencia visto
anteriormente. Tambin se ha utilizado EDK para crear la interfaz del PCORE de deteccin de
seales, y su comunicacin con el resto de elementos, interfaces de entrada salida, y parmetros
de configuracin. Para la descripcin en VHDL del sistema de reconocimiento en s, se ha
utilizado la herramienta Xilinx ISE Foundation [26]. Posteriormente estos ficheros fuente han
sido exportados al PCORE, y sintetizados por EDK, generando as el bitstream final.

Para el software, se podra haber usado la herramienta Xilinx Software Development Kit
(SDK) [38]. Sin embargo, dada la poca complejidad de de esta parte del sistema, se ha optado
por utilizar la propia herramienta EDK para la programacin en C. Esta decisin se ha tomado
debido a que el sistema tan slo requiere de la programacin de una interfaz grfica que se
mostrar por Hyperterminal, y la escritura / lectura de un registro de flags y parmetros, de 32
bits.

Por ltimo, se han utilizado modelos en Matlab R2007b para cada etapa de procesado del
sistema real. Esto ha proporcionado un mtodo consistente para sacar parmetros empricos
como umbrales de color, o caractersticas de las seales, que posteriormente se han pasado al
sistema real. Tambin se han utilizado estos modelos para comprobar que las etapas y los
bloques de acondicionamiento cumplan su funcin dentro de la cadena de procesado. En lo
sucesivo, se adjuntarn imgenes procesadas con estos modelos de Matlab, cuando se requiera.

En cuanto a la estructura de directorios, se ha usado la que vena por defecto en EDK,


donde existe un directorio principal con el proyecto EDK, y otro directorio diferente con todos los
PCOREs, tanto los que utiliza el diseo de referencia como los generados en este Proyecto de
Fin de Carrera. En particular, dentro del directorio de proyectos de Xilinx (configurado
previamente en las variables de entorno del sistema operativo) existen las siguientes carpetas:

x Camera_Frame_Buffer_Chain2. Contiene el proyecto EDK del sistema completo.


x IVK_Repository. Este es el repositorio de PCOREs que utiliza EDK para el sistema
completo. Contiene tanto los PCOREs que venan originalmente con el diseo de
referencia (carpeta IVKProcessorIPLib), as como los PCOREs creados para este
Proyecto (carpeta MyProcessorIPLib).
x ISE_lcdcontroller_modificado. Proyecto ISE en el cual se toma los archivos
fuentes de la interfaz para la pantalla LCD y se modifican para que funcionen en el
sistema creado.
x ISE_Pcore. Proyecto ISE que contiene todos los archivos fuente del sistema de
deteccin de seales de trfico.

As mismo, para una comprensin global de las etapas de desarrollo del sistema
presentado en este Proyecto Fin de Carrera, se muestra la siguiente lista con los pasos
realizados, a modo esquemtico:

1. Estudio del sistema de referencia "Sensor de imagen con frame buffer".


2. Adaptacin del sistema de referencia desde EDK para aadir un nuevo PCORE.
3. Creacin de un nuevo PCORE a travs del asistente de EDK (slo interfaz de nivel
superior), as como las interfaces de entrada y salida del mismo.
4. Modificacin del software del proyecto para admitir las nuevas opciones que pueden
ser usadas por el usuario.
5. Creacin del proyecto ISE con el bloque principal.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 124


6.9 Herramientas utilizadas y etapas de desarrollo

6. Creacin de primitivas y bloques iniciales (divisor, biestables y buffers de lnea


configurables con Generics, registros de desplazamiento, etc..)
7. Descripcin de la primera etapa de segmentacin, previo modelo en Matlab.
8. Creacin del bloque de multiplexin de mscaras y multiplexor final con las primeras
funciones.
9. Descripcin de las etapas de acondicionamiento (filtro de mediana, erosin y
dilatacin), previo modelo en Matlab y comprobacin de funcionamiento.
10. Descripcin de las etapas de etiquetado de componentes conectados y extraccin
de la ROI, con inferencia en BRAMs de doble puerto.
11. Separacin del sistema de etiquetado en varios bloques tras comprobar que no
cumplan las restricciones de tiempo establecidas.
12. Modificacin del bloque multiplexor de mscaras y multiplexor final para admitir ms
opciones, as como la inclusin de las ROI encontradas previamente.
13. Implementacin del PCORE de control de la LCD en el proyecto EDK y
comprobacin de funcionamiento.
14. Creacin de la ROM con los carteles de las seales a utilizar.
15. Descripcin del sistema de identificacin de seales viales y modelado en Matlab.
16. Comprobacin de resultados, tareas de depuracin finales y banco de pruebas.

Todos estos pasos se han realizado siguiendo la metodologa presentada anteriormente, en


la cual se describa un continuo estudio de la literatura existente, la creacin de mtodos de
depuracin, sntesis de los bloques, comprobacin del funcionamiento por partes, as como la
verificacin de que cumplen con las restricciones y objetivos impuestos.

6.10 Creacin del PCORE

La creacin del PCORE del sistema de reconocimiento de seales de trfico se ha llevado a


cabo a travs del asistente de EDK (Create and Import Peripheral Wizard), en donde se han
definido los siguientes parmetros:

Parmetro Valor Descripcin

Ubicacin del repositorio de PCOREs del


Directorio del PCORE IVK_Repository
proyecto.

Imageprocessnoreg
Nombre y versin Nombre y versin del PCORE a crear.
v1.00a

Processor Local Bus Tipo de Bus que utilizar el procesador


Bus Interface
(PLB v4.6) para comunicarse con el PCORE.

Servicios IPIF requeridos por el PCORE.


Servicios IPIF Soft Reset
Se ha establecido slo el Soft Reset.

Se ha establecido un slo registro


Nmero de registros
1 registro de 32 bits. accesible por software, cuyos bits se
accesibles por Software
repartirn entre diferentes tareas.

Seales IPIC (IP Seales por defecto para el control de los


Por defecto.
Interconnect) registros y la lgica de usuario.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 125


Captulo 6. Reconocimiento de seales de trfico

Bus Functional Model Crea bloques para la simulacin funcional


NO
(BFM) del perifrico.

Rango de direcciones a travs de las


Direccionamiento de
0xC2090000 -0xC209FFFF cuales se accede a los registros del
registros
perifrico.
Tabla 6.3. Parmetros seleccionados a la hora de crear el PCORE.

El asistente crea con estos parmetros la entidad de nivel superior del PCORE y su interfaz
de comunicacin con el procesador Microblaze (Figura 6.8). As mismo, se proporciona el cdigo
para la modificacin o lectura de los registros software por parte de la lgica de usuario. Este
asistente crea los ficheros necesarios en la carpeta seleccionada. Algunos de estos ficheros
debern ser modificados, tal y como se indica a continuacin.

x Se ha modificado el archivo MPD (Microprocessor Peripheral Description), para


definir las interfaces de entrada y salida del PCORE. En particular, los buses
XSVI_IN como bus objetivo y XSVI_OUT como bus iniciador. Tambin se ha definido
el bus XSVI_LCD para la conexin de la pantalla LCD 8.4''. As mismo, se han
definido los puertos de estas interfaces, que son los siguientes: active_video, hblank,
vblank, hsync, vsync y video_data (24 downto 0). Tambin se han establecido ciertos
parmetros del PCORE que obligan a un re-escaneo de los ficheros fuente del
PCORE en cada nueva sntesis.
x Se ha modificado el archivo PAO (Peripheral Analysis Order), incluyendo todos los
archivos fuente *.vhd que se han utilizado en el proyecto, en el correcto orden de
anlisis.
x Se ha modificado el fichero imageprocessnoreg.vhd para aadir como puertos de
entrada y salida los buses indicados anteriormente.
x Se ha modificado el fichero user_logic.vhd para aadir los puertos de entrada y
salida correspondientes, as como separar las seales de control que provienen del
registro controlado por Microblaze. Tambin se ha instanciado el fichero
bloque_principal.vhd, que contiene todos los archivos fuentes creados desde ISE.
x Se han aadido a la carpeta vhdl del PCORE todos los ficheros fuente VHDL
creados en ISE.
x Se ha conectado la salida del PCORE "ivk_video_gen" con la entrada del PCORE
creado. Y la salida del PCORE creado con la entrada del PCORE
"fmc_imageov_dvi_out".

Los sucesivos apartados de este captulo describirn los bloques del mdulo
bloque_principal.vhd, que han sido implementados en la herramienta Xilinx ISE
Foundation [26]. Se debe tener en cuenta, sin embargo, que el PCORE posee otra entidad de
nivel superior que hace de interfaz con el SCP Microblaze.

6.11 Bloques iniciales

El fichero bloque_principal.vhd contiene instancias de 33 tipos de entidades diferentes, y


ha sido implementado en su totalidad en Xilinx ISE. En primer lugar, se crearon ciertos elementos
y primitivas que seran usados posteriormente a lo largo de todo el diseo. Este apartado muestra
los elementos bsicos ms importantes.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 126


6.11 Bloques iniciales

Destacar que algunos parmetros Generics son recurrentes en todos los bloques y slo se
describirn en su primera aparicin, para evitar redundancias y no alargar innecesariamente este
documento.

6.11.1 Bloque Divisor

Este bloque tiene como objetivo recibir una seal de vdeo a travs de un bus XSVI y sacar
a su salida dos flujos de vdeo de idnticas caractersticas.

BLOQUE DIVISOR
Nombre del
split.vhd
fichero

Descripcin Divisor de la seal de vdeo en dos flujos idnticos.


entity split is
generic (
C_XSVI_DWIDTH : integer := 24;
C_FAMILY : string := "spartan6"
);
Port (
clk : in std_logic;

active_video_in : in STD_LOGIC;
hblank_in : in STD_LOGIC;
vblank_in : in STD_LOGIC;
hsync_in : in STD_LOGIC;
vsync_in : in STD_LOGIC;
video_data_in : in STD_LOGIC_VECTOR ((C_XSVI_DWIDTH -1) downto 0);

Entidad active_video_out_left : out STD_LOGIC;


hblank_out_left : out STD_LOGIC;
vblank_out_left : out STD_LOGIC;
hsync_out_left : out STD_LOGIC;
vsync_out_left : out STD_LOGIC;
video_data_out_left : out STD_LOGIC_VECTOR ((C_XSVI_DWIDTH -1) downto
0);

active_video_out_right : out STD_LOGIC;


hblank_out_right : out STD_LOGIC;
vblank_out_right : out STD_LOGIC;
hsync_out_right : out STD_LOGIC;
vsync_out_right : out STD_LOGIC;
video_data_out_right : out STD_LOGIC_VECTOR ((C_XSVI_DWIDTH -1) downto 0)
);
end split;

Descripcin de puertos y generics

clk Seal de reloj de vdeo a 74.25 Mhz

<nombre>_in Entrada de la seal de vdeo (datos y sincronismo).

<nombre>_left Salida de la seal de vdeo (datos y sincronismo).

<nombre>_right Salida de la seal de vdeo (datos y sincronismo).

Indica la profundidad de color de los datos del vdeo (por defecto 24 bits,
C_XSVI_DWIDTH
R=8 bits, G=8 bits, B=8 bits).

C_FAMILY Familia del modelo de FPGA (Por defecto spartan6).


Tabla 6.4. Bloque split.vhd

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 127


Captulo 6. Reconocimiento de seales de trfico

6.11.2 Bloque Multiplexor

Corresponde a los ficheros mask_to_xsvi.vhd y mux_final.vhd. Debido a que estos


bloques realizan otras tareas adems de las de multiplexar seales, sus detalles se vern en
apartados posteriores. Su funcin principal, sin embargo, se implement al comenzar el proyecto,
con el objetivo de seleccionar una de las posibles entradas y sacarla por la salida (MUX i:1).

Para la seleccin se utilizan algunos bits del registro accesible por software slv_reg0, que a
travs de Microblaze se controla desde el exterior.

6.11.3 Delay configurable

Este bloque retrasa un ciclo de reloj todas las seales que entran, y se usa en mltiples
puntos del sistema con diferentes objetivos, como por ejemplo el de proporcionar un contexto
adecuado a la informacin que viaja por los buses de vdeo. Debido a ciertas necesidades de
menor inters, se han creado cuatro ficheros fuentes de este bloque con mnimas diferencias
entre ellos.

DELAY CONFIGURABLE

Nombre del
flipflop.vhd, flipflop_b.vhd, delay_signals_to_merger.vhd
fichero

Descripcin Proporciona un retraso de un ciclo de reloj a las seales que entran en el bloque.
entity flipflop is
generic
(
C_DATOS : integer := 6
);
Port
Entidad (
clk : in STD_LOGIC;
D : in STD_LOGIC_VECTOR((C_DATOS -1) downto 0);
Q : out STD_LOGIC_VECTOR((C_DATOS -1) downto 0)
);
end flipflop;

Descripcin de puertos y generics

clk Seal de reloj de vdeo a 74.25 Mhz

D Entrada de seales

Q Salida de las seales retrasadas un ciclo de reloj.

Anchura de datos de entrada y salida. Nmero de bits que sern


C_DATOS
retrasados un ciclo de reloj.
Tabla 6.5. Bloque flipflop.vhd

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 128


6.11 Bloques iniciales

6.11.4 Buffer de lnea

El buffer de lnea es un bloque que toma una lnea completa de datos y, opcionalmente, sus
seales de sincronismo, y las retrasa durante un nmero de ciclos de reloj igual al nmero de
pxeles horizontales de resolucin ms el nmero de ciclos correspondientes al espacio de
blanking horizontal. Este bloque se utiliza en varios puntos del sistema, para proporcionar el
contexto de vecindades del pxel actual. Tambin se utiliza para almacenar las etiquetas de una
lnea completa que ha pasado por el etiquetado de componentes conectados.

En definitiva, este bloque es esencial para la correcta implementacin de cualquier bloque


de procesamiento de imgenes.

BUFFER DE LNEA

Nombre del
line_buffer.vhd
fichero

Descripcin Almacena y retrasa una lnea completa de vdeo.


entity line_buffer is
generic
(
C_DATOS : integer := 6;
C_PIXELS_PER_LINE : integer := 1280;
C_HBLANKING : integer := 370
);
Entidad Port
(
clk : in STD_LOGIC;
data_in : in STD_LOGIC_VECTOR((C_DATOS-1) downto 0);
data_out : out STD_LOGIC_VECTOR((C_DATOS-1) downto 0)
);
end line_buffer;

Descripcin de puertos y generics

clk Seal de reloj de vdeo a 74.25 Mhz

data_in Entrada de seales

data_out Salida de las seales retrasadas un ciclo de reloj.

Profundidad de bits del bloque. Indica la cantidad de bits a introducir


C_DATOS en la lnea. Cambiar en funcin de si se desean seales de
sincronismo o slo los bits de datos.

Parmetro que indica el tamao del buffer de lnea sin contar el


C_PIXELS_PER_LINE
espacio de blanking.

Parmetro que indica cuantos ciclos de reloj dura el periodo de


C_HBLANKING
blanking horizontal.
Tabla 6.6 Bloque line_buffer.vhd

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 129


Captulo 6. Reconocimiento de seales de trfico

6.11.5 Contador de coordenadas

Este bloque toma como entrada las seales de sincronismo y el reloj de vdeo
proporcionados por el sensor de imagen y el mdulo FMC-IMAGEOV, usndolas para sacar a la
salida las coordenadas (x,y) del pxel actual.

CONTADOR DE COORDENADAS

Nombre del
contador_coordenadas.vhd
fichero

Descripcin Saca las coordenadas del pxel actual (x,y) a partir del flujo de vdeo entrante.
entity contador_coordenadas is
generic
(
C_BITS_X : integer := 11;
C_BITS_Y : integer := 10;
C_END_OF_X : integer := 1279;
C_END_OF_Y : integer := 719
);
Port
(
Entidad clk : in STD_LOGIC;

hblank : in STD_LOGIC;
vblank : in STD_LOGIC;
active_video : in STD_LOGIC;

eje_x : out STD_LOGIC_VECTOR((C_BITS_X -1) downto 0);


eje_y : out STD_LOGIC_VECTOR((C_BITS_Y -1) downto 0)
);
end contador_coordenadas;

Descripcin de puertos y generics

clk Seal de reloj de vdeo a 74.25 Mhz

hblank Seal de blanking horizontal. Se activa durante este periodo.

vblank Seal de blanking vertical. Se activa durante este periodo.

active_video Seal activa durante el periodo activo en pantalla.

eje_x, eje_y Seales de salida con las coordenadas (x,y) del pxel actual.

Nmero de bits necesarios para codificar el ancho y el alto de la pantalla.


C_BITS_X,
Por defecto para una resolucin de 720p:
C_BITS_Y
C_BITS_X=ceiling(log2(1280)), C_BITS_Y=ceiling(log2(720)),

C_END_OF_X, Coordenadas de final de la pantalla activa. Por defecto, para una


C_END_OF_Y resolucin de 720p, son 1279 y 719 respectivamente.
Tabla 6.7 Bloque contador_coordenadas.vhd

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 130


6.12 Etapa de segmentacin

6.12 Etapa de segmentacin

En este apartado se estudiar la primera etapa en el sistema de reconocimiento de seales


de trfico: la segmentacin. Se vern los problemas comunes de este tipo de tratamiento, y se
estudiarn diversos mtodos para llevar a cabo la tarea de segmentacin. Finalmente se
escoger uno de los mtodos propuestos y se implementar en el sistema total.

6.12.1 Introduccin

Como se vio en captulos anteriores, el proceso de segmentacin se encarga de evaluar


cada pxel de la imagen y decidir si contiene o no las caractersticas de inters. Como resultado,
este mtodo genera una imagen binaria, donde los pxeles que pertenecen al objeto se
representan con un '1' (objeto en primer plano), mientras que los que no pertenecen al mismo se
representan con un '0' (fondo). La decisin de pertenencia de un pxel a uno u otro segmento se
basa en el anlisis de alguna caracterstica de la imagen, como por ejemplo los niveles de
intensidad o la textura.

La particularidad que poseen las seales de trfico es que cuentan con formas y colores
muy definidos, ventaja que se puede aprovechar en la etapa de segmentacin para obtener una
imagen en la cual se marquen los pxeles de inters. Las seales con ms presencia de aparicin
en carretera son aquellas que poseen contornos rojos o azules. Aunque aparecen en manera
ms ocasional, tambin existen seales de contornos amarillos o blancos. Las seales que se
estudiarn en este Proyecto Fin de Carrera, sin prdida de generalidad, son aquellas que tienen
contornos rojos o azules.

La segmentacin que se llevar a cabo en este sistema est basada en la umbralizacin


por color. Este mtodo se basa en un umbral establecido para decidir si el pxel actual es rojo o
azul, con lo cual pertenecera al segmento '1', o no es ni rojo ni azul, con lo cual pertenecera al
segmento '0' de fondo.

Una de las dificultades de la segmentacin es la generacin de ruido, cuando ciertos


pxeles pasan el filtro establecido por el umbral, sin necesidad de pertenecer a un objeto rojo (o
azul). Esto ser solucionado posteriormente en las etapas de acondicionamiento.

Las principales dificultades que se presentan en esta etapa se detallaron en el Captulo 3, y


se centran sobre todo en las desventajas de usar un espacio de color lineal. En particular, el
espacio de color RGB resulta muy ineficiente debido a la gran sensibilidad que posee frente a los
cambios en las condiciones de luz. As mismo, los colores de este espacio, repartidos en un
cubo, no poseen caractersticas de tono similares a pesar de que se encuentren cercanos dentro
del volumen del cubo. Por ltimo, la imposibilidad de separar las componentes cromticas de la
saturacin, hacen que el espacio RGB no sea el ms adecuado para la segmentacin.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 131


Captulo 6. Reconocimiento de seales de trfico

6.12.2 Mtodos propuestos

Debido a lo explicado anteriormente con respecto a la segmentacin por umbral de color en


el espacio RGB, se dedicarn los siguientes prrafos a analizar la posibilidad de un cambio en el
espacio de color del sistema.

6.12.2.1 Eleccin del espacio de color


Debido a la ineficiencia en los mtodos de segmentacin sobre el espacio de color RGB, se
vio la posibilidad de utilizar otros espacios de color. En particular, el ms utilizado es el espacio
HSI, que se define a travs de una transformacin no lineal del espacio de color RGB [44],
modificando el cubo RGB en dos conos unidos por su base (Vase el Captulo 3). Algunos
ejemplos de trabajos realizados en este espacio los encontramos en [107] [108] [109] [110] [111].

En particular, las ecuaciones no lineales que definen el espacio HSI a partir del RGB son
las siguientes:

Como se observa, la complejidad computacional de la transformacin no lineal (mdulos,


races cuadradas, relaciones trigonomtricas inversas, etc..) hace que su implementacin sea
poco prctica en FPGA, a pesar de sus ventajas. Si se deseara describir un bloque que
transforme al espacio de color HSI, se necesitara implementar tablas de equivalencia con las
funciones trigonomtricas deseadas, y un potente mtodo para hacer la transformacin rpida y
eficiente.

En conclusin, se decidi que crear un bloque de transformacin al espacio HSI es viable,


aunque no carece de dificultad y resultara muy laborioso. Por ello se ha considerado que este
mtodo excede el alcance de este Proyecto Fin de Carrera. As mismo ocurre con otros espacios
como el HSV o LUV. Por ltimo, espacios de color como el YCbCr son fcilmente
implementables, pero carecen de ventajas con respecto al espacio RGB, ya que su funcin es
proporcionar un mtodo de compresin del flujo de vdeo, y no el de separar las componentes de
tono y saturacin.

Por todo ello, se propone el espacio RGB como espacio de color sobre el cual se
implementarn los mtodos de segmentacin.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 132


6.12 Etapa de segmentacin

6.12.2.2 Mtodos de umbralizacin en el espacio RGB


A pesar de sus desventajas, no son pocos los estudios y trabajos realizados en el espacio
de color RGB, que se sigue utilizando, por ejemplo en [103] [104] [105] [106], debido a su
simpleza en el tratamiento.

Existen diferentes formas de establecer un umbral por el cual los pxeles son marcados
como pxeles de fondo o de primer plano. Algunos de estos mtodos establecen un umbral fijo.
Otros precisan de unas sencillas operaciones para establecer un umbral variable. Estos mtodos,
que han sido extrados de [104] [143] se resumen a continuacin.

En [126] se propone un sencillo mtodo de segmentacin que usa un coeficiente "k"


(generalmente con valor entre 1.5 y 2.5), estableciendo que un pxel es rojo cuando cumple:

( Ri , j ! k Gi , j ) OR ( Ri , j ! k Bi , j )

As mismo, el pxel ser azul si cumple:

( Bi , j ! k Gi , j ) OR ( Bi , j ! k Ri , j )

Si las condiciones de luz son favorables y la saturacin de los colores es alta, se pueden
sustituir las expresiones anteriores por otras ms restrictivas, como las siguientes.

( Ri , j ! k Gi , j ) AND ( Ri , j ! k Bi , j )

( Bi , j ! k Gi , j ) AND ( Bi , j ! k Ri , j )

En [143] se propone el uso de la siguiente frmula para obtener si un pxel es rojo. La


obtencin de un pxel azul se realiza de forma similar cambiando las componentes R por las B.

0 si (R i  G i )  (R i  Bi )  0

1 si (R i  G i )  (R i  Bi ) ! 0
segmento

En este caso las pruebas con Matlab sobre diferentes imgenes en distintas condiciones de
luz indican que situar el umbral en cero es poco eficiente. Una batera de pruebas con umbrales
diferentes concluye que se obtiene un mejor resultado para valores umbrales entre 100 y 250.

En [144] se llega a la conclusin de que el espacio de color RGB es ms efectivo


computacionalmente que el HSI, y propone un mtodo de segmentacin en el cual la imagen a
color se convierte en una imagen en escala de grises con 256 niveles de intensidad, y
posteriormente se calcula su histograma. Este histograma presentar tres mximos, el primero de
ellos referente al pictograma contenido en la seal, el segundo referente al color de contorno de
la seal y el tercero referente a los pxeles blancos de relleno. Sin embargo este mtodo queda
descartado ya que no se puede aplicar sobre una imagen completa, sino solamente en las
regiones de inters.

En [145] se propone un mtodo algo ms complejo, pero basado en el espacio de color


RGB. El umbral de color utilizado se calcula con las siguientes expresiones.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 133


Captulo 6. Reconocimiento de seales de trfico

p ( x, y ) 255 
( R, G , B )

[10 p( x, y )  g ( x, y )
3
8

1
p( x, y ) avg

p ( x, y ) avg t 3 P( x, y ) t
9
0

si
1 p( x, y ) avg  3 P ( x, y ) t
segmento
si

Donde R, G, B son las componentes de color, g(x,y) es la regin de los 8 pxeles


adyacentes al pxel actual y P(x,y)t es el valor medio de color de todos los pxeles de la imagen.

Como se observa, este mtodo implica realizar divisiones en cada ciclo de reloj, con valores
que dependen del ancho y alto de la imagen. Tambin se requiere un primer pase a la imagen
para hallar el color medio, y una segunda pasada para obtener los segmentos de cada pxel. Esto
hace dificultosa su implementacin en FPGA y por este motivo se usar un mtodo ms sencillo.
An as, la idea de calcular el segmento al cual pertenece el pxel actual usando los valores de
color de los pxeles vecinos es, cuanto menos, interesante, y podra hacerse un algoritmo que
implementase parcialmente este mtodo, por ejemplo, usando un valor fijo para P(x,y)t.

El mtodo propuesto en [132] utiliza dos criterios diferentes para la segmentacin. El


primero de ellos es el menos restrictivo, y los autores aseguran que funciona de manera eficiente
en condiciones de luz favorables. Este criterio establece que un pxel es rojo si satisface las
siguientes relaciones:

Ri , j ! 50
Ri , j  Bi , j ! 15
Ri , j  Gi , j ! 15

El segundo criterio propuesto es ms robusto frente a condiciones de luz desfavorables.


ste establece que un pxel es rojo si satisface las siguientes relaciones:

255
k
max( Ri , j , Gi , j , Bi , j )

Ri', j k Ri , j
Gi', j k Gi , j
Bi', j k Bi , j

Ri', j  Gi', j ! 10
Ri', j  Bi', j ! 10

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 134


6.12 Etapa de segmentacin

6.12.3 Solucin adoptada

La primera decisin tomada fue utilizar el espacio de color RGB, tal y como se discute en el
apartado anterior. Una vez definido el espacio de color, se realizaron modelos en Matlab para
cinco de los mtodos propuestos anteriormente. La Figura 6.11 muestra los resultados de los
modelos de segmentacin vistos en el apartado anterior, con sus umbrales intactos.

Figura 6.11. Modelos de segmentacin testeados en Matlab (Imagen original [171]).

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 135


Captulo 6. Reconocimiento de seales de trfico

En la Figura 6.11 se puede apreciar que el resultado ms prometedor corresponde al


modelo nmero 3. El motivo por el cual algunos modelos no funcionan correctamente se debe a
los umbrales elegidos para la segmentacin. En la prctica estos umbrales resultan poco
efectivos en algunos casos, sin que ello signifique que el modelo sea incorrecto. Por esto se
decidi variar de forma experimental los valores umbrales de algunos modelos, llegando a
resultados ms prometedores (Figura 6.12).

Figura 6.12. Modelos de segmentacin con umbrales modificados.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 136


6.12 Etapa de segmentacin

Con estos datos se puede llegar a interesantes conclusiones. En particular el modelo 2 ha


resultado ser el ms ineficiente y se ha descartado en primer lugar. Posteriormente se ha
descartado el modelo 6, tras observar que los valores umbrales no eliminan correctamente el
ruido de segmentacin, llegando incluso a deteriorar los pxeles de propia seal de trfico antes
que el ruido. Adems, el modelo 6 requiere de divisiones con valores variables, en cada ciclo de
reloj, con el correspondiente gasto de los recursos de la FPGA.

Se ha comprobado que los modelos 4 y 5 funcionan mejor bajo condiciones de luz medias o
altas. En particular, el modelo 5 es una versin "desacoplada" del modelo 4, con una restriccin
adicional (R>80). Experimentalmente se ha obtenido que el modelo 5 tiene mayor sensibilidad a
las condiciones de menor luz, resultando en una peor segmentacin comparndola con el modelo
4.

Sin embargo, los modelos 4 y 5 tienen un gran inconveniente, y es que son robustos bajo
condiciones de luz homogneas, pero resultan muy ineficientes cuando en la misma imagen
existen zonas de luz y sombras. Esto se ilustra en la Figura 6.13.

Esto lleva a considerar finalmente el modelo 3, que a pesar de estar ligeramente por debajo
del modelo 4 y 5 en condiciones de luz favorables (genera ms ruido de segmentacin), posee
una robustez mayor cuando las condiciones son heterogneas.

Figura 6.13. Comparacin final de los modelos de segmentacin (imagen original [171]).

Por tanto, como se conocen a priori las condiciones de luz del entorno, se ha optado por
elegir el modelo 3, que establece que un pxel es rojo si cumple:

( Ri , j ! 2 Gi , j ) AND ( Ri , j ! 2 Bi , j )

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 137


Captulo 6. Reconocimiento de seales de trfico

6.12.3.1 Solucin final, umbrales variables y ganancia de color


Una vez escogido el modelo de segmentacin a utilizar y con el fin de hacer el sistema ms
robusto ante las condiciones de luz cambiantes, se ha decidido establecer dos grados de libertad
que hacen esta etapa ms flexible. En particular, se ha optado por establecer un umbral de color
dinmico, controlado por el usuario, y una ganancia de color variable. De esta forma, el sistema
podr adaptarse a distintas condiciones de luz para que la deteccin de los objetos de inters sea
ms eficiente.

A continuacin se presentan las expresiones finales para la segmentacin del rojo.

R 'i, j k1 Ri , j k1 [1  1.492]

( R ' i , j ! 2 Gi , j ) AND ( R ' i , j ! 2 Bi , j ) AND ( R ' i , j ! umbral _ diff )

El coeficiente k1, que puede tomar un valor entre 1 y 1.492 proporciona una ganancia de la
componente roja del pxel que puede interpretarse como un aumento de la saturacin en la
direccin de ste color, alejndose del gris. sta ganancia proporciona mejores resultados en la
segmentacin de seales rojas. El valor umbral_diff se ha aadido con la intencin de impedir
que aquellos pxeles demasiado oscuros cumplan las restricciones de color y sean interpretados
como rojos.

Para la segmentacin de seales de trfico azules, se ha tomado un modelo ligeramente


distinto. Esto es debido a que, en general, el azul se mezcla mucho ms fcilmente con el verde
en la realidad, y no es habitual encontrarse con azules cromticamente puros. Las seales viales
azules suelen tener una componente importante de verde, y por ello el modelo que presenta
mejores resultados es el siguiente.

R 'i , j k 2 Ri , j k 2 [0.5  0.992]

( Bi , j ! 2 R ' i , j ) AND ( Bi , j ! Gi , j  offset _ diff )

En esta ocasin, la segmentacin del color azul se ve favorecida cuando la ganancia de


rojo se decrementa a travs del coeficiente k2, que toma valores entre 0.5 y 0.992. Esto se
aprecia como un incremento de la ganancia de las componentes azul y verde, que como se ha
comentado anteriormente, deben ir juntas para una correcta segmentacin.

As mismo, se ha comprobado experimentalmente que es posible una mejor identificacin


de los pxeles azules estableciendo que su componente azul sea ligeramente superior a la
componente verde, a travs del valor offset_diff. Este umbral se ha establecido en torno a 16
con buenos resultados.

6.12.4 Diagrama de bloques

Una vez escogido un modelo de segmentacin, se ha procedido a la descripcin del bloque


en VHDL, cuyos puertos de entrada y salida se muestran de forma esquemtica en la Figura
6.14.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 138


6.12 Etapa de segmentacin

Figura 6.14. Bloque de segmentacin

6.12.5 Descripcin del bloque

La Tabla 6.8 muestra la descripcin de la entidad de nivel superior del bloque de


segmentacin.

Este bloque recibe un pxel nuevo en cada ciclo de reloj. En cada flanco de subida de la
seal de reloj se inicia un proceso en el cual el pxel es separado en sus componentes R, G y B
para ser comparadas segn el modelo de segmentacin visto anteriormente. Si el pxel es rojo, o
azul segn este modelo, el dato de salida ser '1', indicando que dicho pxel corresponde al
segmento de objetos de primer plano. En caso contrario el dato de salida ser '0', indicando un
pxel de fondo.

Debido a que las seales estudiadas contienen contornos solamente de color rojo o azul, no
es necesaria una segmentacin que separe otros colores como son el blanco o el negro. Esta
separacin se har en posteriores etapas, una vez obtenida las diferentes ROI de la imagen. As
mismo, la imagen de salida contiene todas las seales de sincronismo de la entrada. Sin
embargo, cada pxel es codificado con un slo bit, en vez de con 24, resultando en flujo de vdeo
de salida binario.

Las seales que controlan por software la ganancia de rojo (umbral_rojo y umbral_azul) son
de 6 bits, tomando valores entre [0-63]. Para conseguir una ganancia efectiva k1 y k2 entre los
rangos ya mencionados, se realizan la siguientes operaciones en la FPGA:

(256  2 umbral _ rojo ) Ri , j


k1 Ri , j

(128  umbral _ azul ) Ri , j


256

k 2 Ri , j
256

Por ltimo, cabe destacar que debido a la distorsin de la lente del sensor de imagen
(discutido en el Apartado 6.5, y mostrado en la Figura 6.4), se ha optado por eliminar la tarea de
segmentacin en los bordes de la imagen, marcando dichos pxeles con el valor '0'. La anchura
de este borde es configurable mediante Generics, y por defecto tiene un valor de 25 pxeles.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 139


Captulo 6. Reconocimiento de seales de trfico

BLOQUE DE SEGMENTACIN

Nombre del
segmentacion.vhd
fichero

Descripcin Segmenta un flujo de vdeo de entrada, y genera patrones para depuracin.


entity segmentacion is
generic(
C_XSVI_DWIDTH : integer := 24;
C_FAMILY : string := "spartan6";
C_BITS_X : integer := 11;
C_BITS_Y : integer := 10;
C_END_OF_X : integer := 1279;
C_END_OF_Y : integer := 719;
C_BORDER : integer := 25);
port (
clk : in std_logic;

seg_treshold : in std_logic_vector(0 to 2);


seg_umbral_rojo : in std_logic_vector(0 to 5);
seg_umbral_diff : in std_logic_vector(0 to 5);
seg_azul : in std_logic;
seg_umbral_azul : in std_logic_vector(0 to 5);
Entidad
active_video_in : in std_logic;
hblank_in : in std_logic;
vblank_in : in std_logic;
hsync_in : in std_logic;
vsync_in : in std_logic;
video_data_in : in std_logic_vector((C_XSVI_DWIDTH - 1) downto 0);

eje_x : in STD_LOGIC_VECTOR((C_BITS_X -1) downto 0);


eje_y : in STD_LOGIC_VECTOR((C_BITS_Y -1) downto 0);

active_video_out : out std_logic;


hblank_out : out std_logic;
vblank_out : out std_logic;
hsync_out : out std_logic;
vsync_out : out std_logic;
binary_data_out : out std_logic);
end segmentacion;

Descripcin de puertos y generics

clk Seal de reloj de vdeo a 74.25 Mhz

Seal que selecciona como salida la segmentacin original, o alguno de


seg_treshold
los tres patrones predefinidos.

seg_umbral_rojo Seales que establecen la ganancia incremental de la componente de


seg_umbral_diff rojo, as como su valor mnimo, para la segmentacin de seales rojas.

seg_azul Activa o desactiva la segmentacin de seales azules, para depuracin.

Establece la ganancia decremental de la componente de rojo


seg_umbral_azul (interpretndose sta como una ganancia positiva del azul y verde) para
la segmentacin de seales azules.

<video>_in Entrada del flujo de vdeo (datos y sincronismo).

eje_x, eje_y Seales de salida con las coordenadas (x,y) del pxel actual.

<video>_out Salida del flujo de vdeo binario (datos y sincronismo).

Nmero de pxeles de bordes que no sern tenidos en cuenta en la


C_BORDER
segmentacin, debido a la distorsin del sensor de imagen.
Tabla 6.8 Bloque segmentacion.vhd

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 140


6.12 Etapa de segmentacin

6.12.6 Generacin de patrones binarios

Adems de la tarea de segmentacin, esta etapa cuenta con un bloque de generacin de


patrones predefinidos con el objetivo de comprobar el correcto funcionamiento de las posteriores
etapas, como el etiquetado de componentes conectados. Las imgenes creadas por este bloque
son binarias, y cuentan con las mismas seales de sincronismo que el vdeo de entrada.

En la Figura 6.15 se muestran los tres patrones disponibles. En la seccin dedicada al


etiquetado de componentes conectados se estudiarn en detalle, indicando las peculiaridades
que tienen para comprobar que todo est funcionando correctamente.

Figura 6.15. Patrones binarios predefinidos, creados por segmentacion.vhd

6.12.7 Problemas encontrados

Entre los problemas encontrados en la implementacin del bloque de segmentacin, se


destacan los siguientes:

x Diferencias significativas en la captacin del color. Se ha comprobado que las


imgenes captadas con el sensor son diferentes a las utilizadas en las pruebas de
Matlab. En concreto, el sensor de imagen capta los colores verdes con mayor
saturacin, y el tono general de la imagen es ms bajo que una fotografa. Por ello se
han tenido que modificar los parmetros del umbral de segmentacin, para
adecuarlos al sensor. Tambin se han hecho ligeras correcciones en el brillo y el
contraste de la imagen, utilizando el PCORE BC y el de ganancia de color, incluidos
en la cadena de procesado del sistema.
x Diferencias en umbrales para rojo y azul. Se ha comprobado que los umbrales
para rojo son diferentes que para los pxeles azules. Adems, el color azul es mucho
ms sensible a la luz que los dems colores, pudiendo llegar a parecer negro en
algunas zonas, segn la iluminacin de la escena. Por ello, se han tenido que variar
los umbrales del modelo para mejorar la segmentacin del color azul.
x Separacin entre grupos de colores distintos. Experimentalmente se ha
comprobado que existe poca separacin numrica entre algunos colores que son
visualmente diferentes entre s. Esto provoca que algunos pxeles satisfagan el
modelo de segmentacin propuesto, pese a que en el contexto de la imagen
(tomando los colores y la iluminacin general de la escena) sea diferente. Esto
ocurre principalmente con los colores marrones, que suelen pasar el filtro de
segmentacin.
x Otros problemas menores. Se han encontrado problemas de menor inters en la
codificacin de los ejes de coordenadas, sobre todo en la localizacin de los pxeles
de los bordes (x=0, x=1279, y=0, y=719 para una resolucin de 720p).

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 141


Captulo 6. Reconocimiento de seales de trfico

Cabe destacar que adems, se ha hecho frente a un problema de conceptos relacionado


con el bus XSVI. Se ha comprobado, sin que esta informacin aparezca en ninguna gua de
Xilinx, que el orden de los colores de los pxeles en el bus XSVI no es, como cabra esperar "R-G-
B". Por el contrario, estos colores viajan en el bus en diferente orden, en particular "R-B-G". Esto
ha ocasionado algunas dificultades a la hora de identificar el origen del funcionamiento incorrecto
del bloque de segmentacin. Una vez identificado el origen del problema, se ha procedido sin
mayores dificultades.

6.13 Filtro de mediana

En este apartado se estudiar el primero de los bloques de acondicionamiento de la imagen


en el sistema de reconocimiento de seales de trfico: el filtro mediana. Se vern los mtodos
ms comunes y se detallar la solucin adoptada.

6.13.1 Introduccin

Como se vi en el Captulo 3, Un filtro de tipo mediana realiza una operacin estadstica y


no lineal con los pxeles vecinos al pxel actual, ordenndolos en primer lugar de menor a mayor
intensidad, para luego tomar el valor que est en medio y sacarlo como pxel de salida. Este filtro
sirve para eliminar el ruido "sal y pimienta", que no es ms que un ruido de alta frecuencia.

Como se puede apreciar en los resultados de la segmentacin propuestos (Figura 6.16), la


segmentacin es un proceso que deja ruido, es decir, existen pxeles puntuales que cumplen las
condiciones de segmentacin, y sin embargo no pertenecen a ningn objeto mayor. Este ruido es
conocido como "sal y pimienta" y se da cuando un pxel tiene un valor de intensidad o de color
muy distinto a sus vecinos.

Figura 6.16. Ruido tipo "sal y pimienta" generado tras la segmentacin.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 142


6.13 Filtro de mediana

El caso de un filtro tipo mediana actuando tras un bloque de segmentacin es ligeramente


diferente, ya que la imagen de entrada al filtro mediana sera imagen binaria, con dos nicos
posibles valores para un pxel ('0' para el fondo y '1' para primer plano).

Esto simplifica mucho el algoritmo del filtro de mediana, ya que en vez de calcular la
intensidad de los pxeles vecinos, ordenarlos de mayor a menor y posteriormente tomar el valor
que se encuentre en medio, lo que se hace es comparar todos los pxeles de la mscara NxM y
utilizar el siguiente algoritmo:

g ( x, y )
N M
P

N M
1 1

1 Pt 1

si
N M
2
0 P 1
salida
si
2

Donde P es un entero sin signo y g(x,y) contiene los pxeles adyacentes de la mscara
NxM. Estas expresiones, para una imagen binaria, indican que para un pxel dado, se suman
todos los pxeles vecinos a '1' y todos los pxeles a '0' por separado, dentro de su ventana. Si el
nmero de pxeles a '1' es mayora absoluta (la mitad del total ms uno), la salida ser un '1'. En
caso contrario, la salida ser '0'.

6.13.2 Mtodos propuestos

A pesar de que existen numerosos mtodos propuestos ([146] [147] [148] [149]), todos ellos
centran su atencin en el filtrado de imgenes a color en presencia de ruido. Sin embargo, para el
tratamiento de una imagen binaria, el procedimiento se simplifica como se vio en el apartado
anterior. Por lo tanto, el nico parmetro sobre el cual se necesita una decisin es el tamao de
la ventana NxM a utilizar. En principio se podra pensar que utilizar una ventana grande dara
resultados mejores. Sin embargo, como se vio en captulos anteriores, el nmero de buffers de
lnea necesarios para una ventana NxM era de (M-1).

Esto implica que una mscara de tamao excesivo utilizara innecesariamente los recursos
de la FPGA, y adems podra resultar contraproducente en las zonas de los bordes de los
objetos, que podran llegar a disminuir, perdiendo informacin de inters.

En conclusin, se debe elegir un tamao de mscara que elimine correctamente el ruido


producido por la etapa de segmentacin, que consuma la cantidad mnima de recursos de la
FPGA, y que al mismo tiempo se adapte bien a la resolucin de la imagen, no permitiendo que
los bordes de los objetos de inters se vean afectados al calcular el nmero de pxeles a '1' que
existen dentro de la mscara.

6.13.3 Solucin adoptada

Las pruebas realizadas en Matlab indican que una mscara de tamao 3x3 es ms que
suficiente para eliminar casi al completo el ruido de segmentacin, como se aprecia en la Figura
6.17, y tan slo utilizara dos buffers de lnea, un sumador y un comparador.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 143


Captulo 6. Reconocimiento de seales de trfico

Figura 6.17. Imagen segmentada (centro) e imagen tras aplicar el filtro 3x3 de mediana (derecha).

Los pequeos conjuntos de pxeles que han pasado este filtrado y no pertenecen al objeto
de inters sern tratados en las siguientes etapas de acondicionamiento de la seal.

6.13.4 Diagrama de bloques

El diagrama de bloques del filtro de mediana 3x3 se muestra en la Figura 6.18.

Figura 6.18. Bloque de filtro mediana 3x3.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 144


6.13 Filtro de mediana

6.13.5 Descripcin del bloque

La Tabla 6.9 muestra la descripcin de la entidad de nivel superior del bloque de filtrado
tipo mediana. Este bloque recibe un pxel nuevo en cada ciclo de reloj. En cada flanco de subida
de la seal de reloj se inicia un proceso en el cual el pxel es analizado en el contexto de sus
vecinos adyacentes (proporcionados por los biestables y los buffers de lnea).

Los bloques Qi,j proporcionan un retraso de un ciclo de reloj al flujo de vdeo que llega por
el bus XSVI. Cada conjunto formado por un buffer de lnea y tres biestables proporciona un
retraso de una lnea completa en la imagen. As, si el ancho total de la imagen es de 1280
pxeles, el buffer de lnea ser un bloque FIFO de profundidad (1280-3) pxeles para que el
conjunto forme una lnea completa. Cada uno de los biestables proporciona uno de los
coeficientes de la ventana de vecindades del filtro, que son llevados a un nuevo bloque que ser
el que tome la decisin sobre el pxel actual.

Cabe destacar que, adems de los pxeles correspondientes al rea activa de la imagen,
tambin pasan por los buffer de lnea las seales de sincronismo, y los pxeles de las zonas de
blanking. Existe la posibilidad de implementar una seal "enable" que se active con las seales
de sincronismo, para detener el proceso de almacenado en los buffers de lnea y as slo
almacenar la informacin de la pantalla activa; al fin y al cabo, los pxeles de las zonas de
blanking no contienen informacin de utilidad. Con ello se ahorraran recursos de la FPGA
disminuyendo la profundidad de las FIFO.

Sin embargo, esto implicara aadir un nuevo bloque que genere todas las seales de
sincronismo tras el filtrado, y que aada los espacios de blanking nuevamente, lo cual se ha
considerado ms laborioso. Es por ello que, finalmente, se ha optado por pasar las zonas de
blanking por los buffers de lnea, como si tuviesen informacin de inters.

FILTRO MEDIANA

Nombre del
fir_binary_median.vhd
fichero

Descripcin Realiza un filtrado tipo mediana con mscara 3x3


entity fir_binary_median is
generic
(
C_FAMILY : string := "spartan6";
C_DATOS : integer := 6;
C_PIXELS_PER_LINE : integer := 1280
C_HBLANKING : integer := 370
);
Port
(
clk : in STD_LOGIC;

active_video_in : in STD_LOGIC;
Entidad hblank_in : in STD_LOGIC;
vblank_in : in STD_LOGIC;
hsync_in : in STD_LOGIC;
vsync_in : in STD_LOGIC;
binary_data_in : in STD_LOGIC;

active_video_out : out STD_LOGIC;


hblank_out : out STD_LOGIC;
vblank_out : out STD_LOGIC;
hsync_out : out STD_LOGIC;
vsync_out : out STD_LOGIC;
binary_data_out : out STD_LOGIC
);
end fir_binary_median;

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 145


Captulo 6. Reconocimiento de seales de trfico

Descripcin de puertos y generics

clk Seal de reloj de vdeo a 74.25 Mhz

<video>_in Entrada del flujo de vdeo binario (datos y sincronismo).

<video>_out Salida del flujo de vdeo binario (datos y sincronismo).


Tabla 6.9 Bloque fir_binary_median.vhd

6.13.6 Problemas encontrados

Adems de los problemas inherentes a la descripcin y simulacin del funcionamiento, para


la realizacin de este bloque no se han encontrado dificultades de especial inters.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 146


6.14 Operaciones morfolgicas: erosin y dilatacin

6.14 Operaciones morfolgicas: erosin y dilatacin

En este apartado se estudiarn las dos ltimas etapas de acondicionamiento de seal del
sistema de reconocimiento de seales de trfico. Estas componen un conjunto de dos
operaciones morfolgicas: la erosin y la dilatacin. Se estudiar el propsito de estos bloques en
el sistema total, y se analizarn los resultados obtenidos tras realizar pruebas con el sistema real
y con Matlab.

6.14.1 Introduccin

Las operaciones morfolgicas suelen aplicarse sobre imgenes binarias, con el objetivo de
encontrar y distinguir caractersticas estructurales.

La operacin de dilatar una imagen se puede describir como un crecimiento de los pxeles
situados alrededor de los bordes de los objetos. En general, este mtodo marca como '1' todos
los pxeles que formen parte del fondo de la imagen, pero que al mismo tiempo estn en contacto
directo con el objeto. Esto permite aumentar en uno el nivel de pxeles en el permetro de cada
objeto, que sufre un crecimiento de tamao, y al mismo tiempo permite rellenar posibles huecos
dentro del mismo.

La erosin, sin embargo, realiza la operacin contraria. Este mtodo marca como '0' todos
los pxeles que pertenezcan al borde de un objeto. Aplicando en conjunto estas dos operaciones,
erosin y dilatacin, se obtienen interesantes resultados en cuanto a la eliminacin de ruido o de
objetos demasiado pequeos para resultar de inters.

En la Figura 6.18 se aprecia que, tras las etapas de segmentacin y filtro de mediana, an
existen pequeos grupos de pxeles que no han sido eliminados. Estos "objetos pequeos" han
resultado ser demasiado grandes para que el filtro de mediana los interprete como ruido, pero en
la prctica carecen de inters y deben ser eliminados.

Es por ello que se aade al sistema estas etapas de acondicionamiento correspondientes a


la erosin y dilatacin, que cuando se usan en cascada tienen la propiedad de dejar invariantes
los objetos de cierto tamao (el cual vendr dado por el tamao de la mscara utilizada) y
eliminar completamente otros de menor tamao, como se aprecia en la Figura 3.21.

6.14.2 Mtodos propuestos

Las operaciones de erosin y dilatacin son muy utilizadas en multitud de sistemas de


procesamiento de imgenes ([149] [150] son algunos ejemplos) y, salvo pequeos detalles, el
procedimiento es similar en la gran mayora de los casos.

En general, para una imagen binaria el procedimiento a seguir es el siguiente:

x Erosin: Si todos los pxeles vecinos al pxel de entrada estn a '1', entonces el
pxel de salida ser '1'. En cualquier otro caso, el pxel de salida ser '0'.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 147


Captulo 6. Reconocimiento de seales de trfico

x Dilatacin: Si cualquier pxel vecino del pxel de entrada es '1', entonces el pxel de
salida es tambin '1'. En cualquier otro caso el pxel de salida ser '0'.

En el siguiente apartado se detallar la solucin adoptada y se estudiar su funcionamiento.

6.14.3 Solucin adoptada

La solucin que se implementar en el sistema cuenta con la siguiente mscara de


actuacin:

Figura 6.19. Mscaras y ejemplos de las operaciones de erosin y dilatacin.

Como se puede apreciar en la Figura 6.19, la operacin de erosin elimina el pxel actual
(pasndolo de '1' a '0') si encuentra algn pxel a '0' dentro de la mscara de actuacin. Esto
resulta en una reduccin de los bordes, consiguiendo tambin eliminar ruido y objetos que son de
aproximadamente 2 veces el tamao de la mscara.

La operacin de dilatacin, aade un pxel (pasndolo de '0' a '1') cuando detecta que
alguno de los pxeles vecinos est a '1'. Esto realiza la operacin contraria, agrandando los
bordes y dejndolos tal y como estaban en un principio, pero los objetos pequeos y el ruido no
vuelven a aparecer.

El resultado general de de la erosin y dilatacin sobre una imagen binaria se puede


apreciar en la Figura 6.20, donde se ha utilizado un modelo de estos algoritmos en Matlab, sobre
la imagen de muestra.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 148


6.14 Operaciones morfolgicas: erosin y dilatacin

Figura 6.20. Ejemplos de las operaciones de erosin y dilatacin en Matlab.

Ntese que el proceso de erosin decrementa los bordes de los objetos de inters, al
mismo tiempo que elimina el ruido de fondo restante. La operacin de dilatacin vuelve a aadir
los pxeles en los bordes de los objetos, pero el ruido ya no vuelve a aparecer. El resultado ya se
ha comentado: los objetos de suficiente tamao como para resultar de inters permanecen
invariables, mientras que otros objetos pequeos o el ruido de fondo, desaparecen.

6.14.4 Diagrama de bloques

El diagrama de bloques que realiza las operaciones morfolgicas de erosin y dilatacin se


muestra en la Figura 6.21.

Figura 6.21. Bloque de los filtros 3x3 de erosin y dilatacin.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 149


Captulo 6. Reconocimiento de seales de trfico

6.14.5 Descripcin del bloque

La descripcin de la entidad de nivel superior del bloque de erosin y dilatacin es idntica


al de la Tabla 6.9. Este bloque recibe un pxel nuevo en cada ciclo de reloj. En cada flanco de
subida de la seal de reloj se inicia un proceso en el cual el pxel es analizado en el contexto de
sus vecinos adyacentes (proporcionados por los biestables y los buffers de lnea).

La diferencia con respecto al filtro de mediana estudiado anteriormente estriba en el bloque


de lgica decisora, que es completamente distinto. Para el caso de erosin, este bloque busca
algn pxel a '0' entre los vecinos y si lo encuentra, elimina el pxel actual pasndolo de '1' a '0'.
Para el caso de dilatacin, la lgica busca algn pxel a '1' dentro de la rejilla, y si lo encuentra,
aade un pxel, pasndolo de '0' a '1'.

Al igual que el caso del filtro de mediana, los bloques Qi,j proporcionan un retraso de un
ciclo de reloj al flujo de vdeo que llega por el bus XSVI, sacando los coeficientes de la ventana
de vecindades del filtro, que son llevados al bloque encargado de la lgica decisora.

6.14.6 Problemas encontrados

Los problemas referentes a este bloque vienen dados por el tamao de los objetos que se
desean eliminar en la imagen. Existen agrupaciones de pxeles de primer plano que, tras pasar el
filtro de mediana, erosin y dilatacin, no son eliminados, a pesar de no pertenecer a ningn
objeto de inters. Por ello, resulta til analizar el tamao mnimo que debe tener un objeto en
primer plano para no verse afectado por las etapas de acondicionamiento anteriores.

Si se toma una mscara de tamao 3x3 para la mediana, la erosin y la dilatacin,


podemos observar lo siguiente:

x El filtro de mediana considera como ruido una agrupacin de pxeles de tamao


mximo 2x2, eliminando completamente los objetos de ste tamao, y reduciendo en
1 los bordes de los dems objetos.
x Las operaciones de erosin y dilatacin eliminan completamente los objetos de
tamao 1x2, 2x2, 3x2, 2x1, 2x3, y dejan intactos los dems objetos.

Cuando se analiza el resultado de situar en cascada los filtros de mediana-erosin-


dilatacin, se llega a la conclusin de que los objetos de tamao 4x4 son eliminados de la
imagen, mientras que aquellos que tienen tamao mayor o igual a 5x5 no se ven afectados. Esto
resulta ms que suficiente para la mayora del ruido que se produce tras la segmentacin.

En caso de necesitar una etapa de filtrado ms agresiva, ya sea porque la segmentacin


produce mucho ruido, o porque existen muchas agrupaciones de pxeles que pasan la etapa de
erosin-dilatacin, se podra proceder a agrupar en cascada varias instancias de erosin,
seguidas de varias instancias de dilatacin. Esto sera equivalente a tener una sola etapa de
erosin-dilatacin, pero con mscaras de actuacin cada vez mayores (en particular (2+N)x(2+N),
siendo N el nmero de elementos de un mismo tipo puestos en cascada). Esto hara que el
filtrado de ruido fuera cada vez ms eficiente frente a agrupaciones de pxeles ms grandes y
mayor cantidad de ruido.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 150


6.15 Etiquetado de componentes conectados y ROI

6.15 Etiquetado de componentes conectados y ROI

En este apartado se estudiar la segunda etapa de anlisis en el sistema de reconocimiento


de seales de trfico: el etiquetado de componentes conectados y extraccin de la regin de
inters. Se vern los problemas comunes, sobre todo aquellos que surgen de la implementacin
en hardware de este tipo de tratamiento, y se estudiarn diversos mtodos para llevar a cabo la
tarea de etiquetado. Finalmente se escoger uno de los mtodos propuestos y se implementar
en el sistema total.

6.15.1 Introduccin

El etiquetado de componentes conectados, es una operacin que agrupa los pxeles


correspondientes al mismo objeto y les asigna una etiqueta, separando as unos objetos de otros.
Este proceso se realiza sobre imgenes binarias (producto de una segmentacin previa) y como
resultado se obtiene una imagen en la cual cada pxel tiene asignado una etiqueta del objeto al
cual pertenece.

Este mtodo se utiliza en la inmensa mayora de aplicaciones de reconocimiento de


patrones y objetos, y es una de las etapas esenciales de los sistemas de visin artificial. Se utiliza
para contar el nmero de objetos de inters en una imagen, para calcular su posicin o rea
ocupada, o para extraer caractersticas de inters de los objetos por separado.

En el caso del reconocimiento de seales de trfico, el sistema implementado utiliza este


mtodo para determinar en tiempo real las posiciones de las seales de trfico en potencia, y
enviar al siguiente bloque las coordenadas de las distintas regiones de inters.

6.15.1.1 Implementacin en hardware


La particularidad del etiquetado en este Proyecto Fin de Carrera es la naturaleza del flujo de
datos. En particular, el sistema trabaja con un flujo constante de vdeo, cuyos pxeles son binarios
al llegar al bloque de etiquetado. Este bloque realiza las siguientes caractersticas en tiempo real
(por defecto a 60 f.p.s.):

x Detecta si el pxel pertenece a un objeto mayor.


x Asigna etiquetas a cada uno de los pxeles basando su decisin en mltiples
criterios.
x Detecta las colisiones de etiquetas y resuelve los conflictos en un ciclo de reloj.
x Actualiza en tiempo real las coordenadas de los diferentes objetos.
x Utiliza los espacios de blanking vertical para realizar fusin de etiquetas y sacar las
distintas ROI del fotograma.
x Descarta las ROI que sean menores a un tamao predefinido (por defecto 30x30
pxeles)
x Es capaz de detectar hasta 8 ROI en un mismo fotograma.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 151


Captulo 6. Reconocimiento de seales de trfico

La mscara usada para el etiquetado de componentes conectados es la que se muestra en


la Figura 6.22. El pxel "E" es el pxel que ser modificado a la salida del bloque. "D" es el pxel
modificado en el ciclo de reloj anterior, y "A", "B", "C" son los pxeles vecinos de la lnea anterior.

En general, el algoritmo para la deteccin de componentes conectados es el siguiente:

x Si E = '0', entonces se asigna la etiqueta de fondo al pxel actual.


x Si A, B, C, D = '0' (pxeles de fondo) y E = '1', entonces se asigna una nueva
etiqueta al pxel actual.
x Si los vecinos A, B, C, D, distintos de cero son iguales y E = '1', entonces la etiqueta
asignada al pxel actual ser la etiqueta comn a los vecinos.
x Si los vecinos A, B, C, D, poseen diferentes etiquetas y E = '1', entonces la etiqueta
asignada al pxel actual ser la menor de todas. En este caso se deber proceder a
la fusin de las etiquetas mayores con la menor.

Figura 6.22. Mscara para el etiquetado de componentes conectados.

Usualmente cuando se trabaja en software, la fusin de etiquetas se realiza de forma fcil


(aunque mucho ms costosa computacionalmente); una vez obtenida la etiqueta menor y una
equivalencia de sta con otras etiquetas mayores, se buscara por toda la imagen las apariciones
de estas etiquetas mayores, y se "sustituiran" por la etiqueta menor. Este mtodo implica tener
todas las etiquetas almacenadas en una memoria, y poder acceder a cualquiera de ellas en
cualquier momento.

Sin embargo, en un sistema basado en FPGA con un flujo de vdeo constante, esto no es
posible. Almacenar todas las etiquetas de una imagen (con acceso aleatorio a cualquier posicin
para sobrescribir una etiqueta) es irrealizable. En primer lugar, el etiquetado no podra
completarse en un solo fotograma, sino que su eficiencia dependera directamente de la
complejidad de los objetos de la imagen. El peor caso se dara en objetos con formas de espiral,
donde existiran multitud de fusiones de etiquetas. En segundo lugar, se requerira una memoria
de gran tamao para almacenar las etiquetas y completar las tareas de fusin.

Por ello, al trabajar en un sistema de vdeo en tiempo real por hardware, los algoritmos
utilizados varan mucho con respecto a sus anlogos en software.

La forma de tratar las tablas de equivalencia, la colisin de etiquetas y el etiquetado en


tiempo real se discutir en los siguientes apartados. Por ahora tngase en cuenta que el objetivo
que persigue este mtodo es separar los objetos de una imagen binaria para posteriores etapas
de anlisis (Figura 6.23).

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 152


6.15 Etiquetado de componentes conectados y ROI

Figura 6.23. Proceso de etiquetado de componentes conectados.

Por ltimo, indicar que es posible extraer caractersticas como la ROI al mismo tiempo que
se va realizando el etiquetado. Esto se estudiar en prximos apartados.

6.15.1.2 Colisin de etiquetas


La colisin de etiquetas en el etiquetado de componentes conectados surge por la
incapacidad del sistema de "ver" qu hay ms abajo del pxel que se est procesando. Para
ilustrar este concepto, Imagnese una gran letra "U" que ocupa toda la ventana activa del
fotograma. El algoritmo va procesando los pxeles conforme van llegando, y su ventana de visin
es slo la de mostrada en la Figura 6.22. Esto significa que cuando se detecte la columna
izquierda de la "U", se tomar como un objeto nuevo. La columna derecha se tomar como otro
objeto diferente, y por tanto se le asignar una nueva etiqueta. No es sino hasta llegar al final de
la imagen, donde el algoritmo detecta que las dos columnas pertenecen en realidad al mismo
objeto, y por tanto se produce una colisin. Este hecho se ilustra en la Figura 6.24.

Figura 6.24. Colisin de etiquetas en el proceso de etiquetado de componentes conectados.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 153


Captulo 6. Reconocimiento de seales de trfico

Como se observa en la Figura 6.24, cuando el algoritmo llega al pxel marcado con el color
rojo, se produce una colisin de etiquetas, en la cual dos objetos aparentemente distintos resultan
ser el mismo. El algoritmo se ve en la necesidad de resolver este conflicto, y realiza dos
operaciones:

x La etiqueta de salida ser la menor de todas las halladas en la mscara.


x Se modifica la tabla de etiquetas, y se indica que la etiqueta "2", es en realidad, parte
del objeto que tiene etiqueta "1".

Llegados a este punto, los algoritmos de etiquetado por software recorreran toda la imagen
para cambiar los pxeles con etiqueta "2" y sustituirlos por la etiqueta "1". Como se ha indicado
anteriormente, esto es inviable en los sistemas de procesamiento por hardware con vdeo en
tiempo real, porque no existe un almacenamiento de todas las etiquetas asignadas en el pasado,
y porque no se puede recorrer la imagen en cada colisin y al mismo tiempo tener las
caractersticas de un sistema en tiempo real. Por tanto, se utilizan otros mtodos que se vern
ms adelante.

La frecuencia con la que ocurren las colisiones de etiquetas viene determinada por el
tamao de la pantalla, y por la complejidad de la imagen binaria. As, el peor caso se dara con
objetos en forma de espiral. Es interesante notar que la "rugosidad" de los bordes de un objeto
influye mucho en el nmero de etiquetas que contendr, y por tanto el nmero de colisiones que
existirn (este hecho se mostrar un poco ms adelante en este apartado).

A continuacin se muestran algunos ejemplos. Imagnese que la "U" anterior tuviera la


columna derecha ms alta que la izquierda. En este caso, el nmero de colisiones se
multiplicara, como se indica en la Figura 6.25. Se observa que, debido a que la columna derecha
fue detectada en primer lugar y etiquetada con el nmero ms pequeo, se produce una serie de
colisiones que duran hasta el final del objeto. Esto es especialmente dificultoso cuando no existe
forma de modificar las etiquetas pasadas, y tendrn que proponerse algoritmos que manejen
mltiples colisiones de forma eficiente.

Figura 6.25. Mltiples colisiones de etiquetas en el proceso de etiquetado de componentes conectados.

Por ltimo, en la Figura 6.26 se muestran algunos ejemplos del proceso de etiquetado en
un objeto real, que han sido tomados del sistema implementado. Cada color representa una
etiqueta diferente, y se puede apreciar que un objeto puede contener muchas etiquetas, debido a
la rugosidad de los bordes. Estos bordes pueden interpretarse como pequeas regiones

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 154


6.15 Etiquetado de componentes conectados y ROI

cncavas en forma de "U", que son mayores que el tamao de la mscara y que obligan al
sistema a ir asignando etiquetas nuevas.

Figura 6.26. Etiquetado de componentes conectados en el sistema real.

En la figura, se muestran en color amarillo los pxeles marcados con la etiqueta "1". Esta
etiqueta siempre es la menor de todas (ya que la etiqueta "0" pertenece a los pxeles de fondo).
Obsrvese que a pesar de que, por definicin, la etiqueta "1" debera ganar cualquier conflicto en
una colisin, sta aparece muchas veces en posiciones incontroladas del objeto (al final, en la
zona derecha, etc..). Cabra preguntarse por qu ocurre esto, siendo que la etiqueta "1" es la que
se asigna al primer pixel del primer objeto encontrado. La respuesta est en la misma Figura
6.26. Ntese que, si seguimos el orden de llegada de datos habitual (de arriba hacia abajo y de
izquierda a derecha), el primer pxel encontrado del objeto rectangular es, efectivamente, el pxel
donde comienza el etiquetado amarillo (Figura 6.27). Lo mismo ocurre en los otros tres casos de
la Figura 6.26.

Figura 6.27. Primer pxel encontrado en el objeto rectangular de la escena.

La gran cantidad de etiquetas que posee un solo objeto se debe, como se indic en
prrafos anteriores, a la rugosidad de los bordes, que crean zonas en forma de "U" que son
mayores que el tamao de la mscara de accin del algoritmo, y por tanto son interpretados
como diferentes objetos hasta que ocurren las colisiones.

6.15.2 Mtodos propuestos

Los mtodos para el etiquetado de componentes conectados que se han propuesto,


teniendo en cuenta la necesidad de implementacin en hardware ya han sido presentados en el
Captulo 3. A continuacin se detallan los motivos que han llevado a considerarlos o descartarlos
definitivamente.

Algoritmo clsico o de dos pasadas [56]. El algoritmo de dos pasadas es comnmente


denominado como "clsico", y su caracterstica clave es que el nmero de pasadas es siempre el
mismo e igual a 2. El Algoritmo clsico consiste en dar una primera pasada sobre la imagen

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 155


Captulo 6. Reconocimiento de seales de trfico

binaria, asignando etiquetas preliminares. Cuando se encuentren colisiones, se actualizarn los


datos en la tabla de equivalencia indicando qu etiquetas pertenecen al mismo objeto. Al final del
primer escaneo, la tabla de equivalencias es ordenada de menor a menor, y en una segunda
pasada se sobrescriben todas las etiquetas mayores que han colisionado con una menor.

Este sistema es compatible con el flujo de vdeo en tiempo real siempre y cuando se utilice
un frame buffer entre la primera y segunda pasada. Esto es necesario debido a que el algoritmo
debe llegar al final de la imagen obligatoriamente, antes de ordenar la tabla de equivalencias, y la
segunda pasada no puede comenzar hasta que sta reordenacin se haya realizado. Este hecho
se ha considerado como indeseado por el consumo excesivo de memoria y recursos, por lo cual
se han investigado otros mtodos.

Algoritmo de mltiples escaneos [57]. Este mtodo cuenta con la ventaja de no necesitar
de una memoria para almacenar las equivalencias ocurridas durante los pases. Esta tcnica
implica mltiples pasadas sobre la imagen binaria, tanto hacia atrs como hacia adelante, hasta
que no ocurra ningn cambio de etiquetas. Todas las colisiones de etiquetas son resueltas en el
contexto de los pxeles vecinos. Este sistema fue propuesto para sistemas con limitaciones de los
recursos de memoria, y para imgenes de baja resolucin, y no se recomienda para imgenes de
alta resolucin.

Este algoritmo presenta diferentes inconvenientes a la hora de su implementacin en


hardware. En primer lugar, el nmero de pasadas que se hace sobre un fotograma es variable.
Debido al flujo de vdeo constante en el sistema, se estara limitando el nmero de fotogramas
procesados por segundo, en una cantidad incontrolada. En segundo lugar, el hecho de necesitar
realizar pasadas hacia adelante y hacia atrs, requiere de una memoria para almacenar las
etiquetas, adems de toda la lgica para proporcionar el contexto de los pxeles vecinos. Por todo
ello, este mtodo se ha descartado.

Algoritmo de procesamiento paralelo. Este algoritmo fue creado en un principio para


plataformas de procesado en paralelo, y no se aplica en arquitecturas de computadores
ordinarias. Sin embargo, este tipo de algoritmos, aunque son realizables en FPGA, requieren
grandes cantidades de recursos para llevarse a cabo, y en la actualidad no son eficientes para el
streaming de vdeo, ni las imgenes de alta resolucin.

Algoritmo por seguimiento de contorno [58]. Usa ciertas tcnicas de deteccin de


contornos para detectar los objetos, y posteriormente rellenar el resto de pxeles interiores con las
etiquetas correspondientes. Este mtodo tiene la ventaja de necesitar solamente una pasada
para etiquetar todos los contornos, necesitando menos recursos y memoria que los algoritmos
basados en tabla de equivalencias. Tampoco tiene sentido hablar de colisin de etiquetas, ya que
la imagen es escaneada una vez. Sin embargo, este algoritmo requiere acceso aleatorio a todos
los pxeles de la imagen, por lo cual se convierte en un algoritmo no implementable en sistemas
en tiempo real, o streaming de vdeo, ya que se necesita que la imagen a analizar est
almacenada en una memoria.

Algoritmo de pase simple. Este tipo de algoritmos es relativamente nuevo [59], y fue
creado especficamente para etiquetado de componentes conectados en sistemas de streaming
de vdeo y sistemas en tiempo real. El etiquetado se realiza en una sola pasada, mientras la
imagen va llegando en streaming, de arriba a abajo y de izquierda a derecha. La ventaja ms
significativa de este algoritmo es que no se necesita almacenar todas las etiquetas de un
fotograma completo, sino que todo se hace en el contexto de las vecindades del pxel. Otra de
sus caractersticas ms novedosas, es que al mismo tiempo que se etiquetan los pxeles de la
imagen binaria, se van extrayendo las caractersticas de los objetos: su tamao, su nmero, su
centro, su posicin en la imagen, etc.. Se mantiene una tabla de equivalencias, donde se
resuelven las colisiones de etiquetas, y tambin una tabla de caractersticas, donde se van
aadiendo las coordenadas.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 156


6.15 Etiquetado de componentes conectados y ROI

6.15.3 Solucin adoptada

En este apartado se estudiarn las caractersticas que debe poseer el mtodo elegido, y
ciertos aspectos de inters que resultarn tiles en la implementacin del algoritmo final.

6.15.3.1 Caractersticas deseadas


En un principio, se desea que la solucin adoptada para el etiquetado de componentes
conectados tenga las siguientes caractersticas:

x Se realice en tiempo real, para sistemas de streaming de vdeo.


x Sea de una sola pasada.
x No implemente un memoria externa para frame buffer.
x No realice accesos aleatorios a pxeles de la imagen.
x No necesite acceder al fotograma en direccin inversa (de abajo hacia arriba).
x Pueda leer y escribir en una tabla de equivalencias en un solo ciclo de reloj.
x Realice fusin de etiquetas en tiempo real.
x Extraiga las coordenadas de los objetos en tiempo real.

6.15.3.2 Consideraciones sobre la extraccin de la ROI


Esta ltima caracterstica vista en el apartado anterior puede parecer un tanto fuera del
contexto del algoritmo de etiquetado, y por ello merece una explicacin.

Como se coment anteriormente, el objetivo principal del etiquetado es separar los objetos
de inters que existen en la imagen tras un proceso de segmentacin. El algoritmo finaliza
cuando a cada pxel se le atribuye una etiqueta que lo clasifica como parte de un objeto. As
mismo cada objeto de la imagen tendr asignada una (y slo una) etiqueta que lo diferencie de
los dems objetos. Sin embargo en ocasiones, dependiendo de la tarea que se vaya a realizar
despus del etiquetado, es posible aprovechar ciertas caractersticas de este algoritmo para ir
"adelantando" una tarea.

Tmese en cuenta el siguiente ejemplo, aplicado directamente sobre el procesado de


seales de trfico. Analizando las necesidades del sistema, se llega a la conclusin de que, tras
la etapa de etiquetado, es necesario extraer la regin de inters de cada seal vial. Esta ROI no
es ms que los valores de las coordenadas que encierran a cada una de las seales:

x (xi, yi). La posicin del pxel situado en la parte superior izquierda de la seal
detectada.
x (xf, yf). La posicin del pxel situado en la parte inferior derecha de la seal
detectada.

El procedimiento habitual para conseguir estas ROI sera el siguiente:

x Realizar el algoritmo de etiquetado de componentes conectados sobre el fotograma.


x Realizar la fusin de etiquetas que han colisionado.
x Finalmente obtener slo una etiqueta por cada objeto de la imagen.
x Una vez que cada objeto tenga asignada una etiqueta (y slo una), iniciar un proceso
en el cual se calcule el pxel situado en la parte superior-izquierda e inferior-derecha
del objeto.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 157


Captulo 6. Reconocimiento de seales de trfico

x Tomar las coordenadas de estos dos pxeles de inters para formar la ROI buscada.

Este mtodo puede resultar prctico y, de hecho, es el mtodo ms empleado en la


actualidad para hallar parmetros como la ROI, el centroide del objeto, su tamao, rea, etc.. Sin
embargo, cabra preguntarse lo siguiente: Es posible sacar las ROI de los objetos al mismo
tiempo que se van etiquetando? y lo ms importante: Es necesario que cada objeto tenga
asignada slo una etiqueta (y slo una), para poder extraer su ROI?

La respuestas a estas preguntas tienen interesantes conclusiones en el algoritmo que


finalmente se implementar en este Proyecto Fin de Carrera. En particular, se ver que es
posible extraer las ROI sin necesidad de llegar al final del algoritmo de etiquetado, en el cual cada
objeto posee slo una etiqueta. Esto har que se ahorren recursos y tiempo, de la siguiente
forma:

x No ser necesario que el algoritmo de etiquetado de componentes conectados llegue


a su fase final, en la cual se recorre la imagen y sustituyendo cada etiqueta obsoleta
por la etiqueta menor con la que ha colisionado.
x No ser necesario implementar un bloque de extraccin de caractersticas a
continuacin del bloque de etiquetado, ya que las dos tareas se realizan
simultneamente.

6.15.3.3 Mtodo elegido


De entre todos los mtodos propuestos en apartados previos, se ha considerado como
mejor y ms eficiente el algoritmo de un solo pase [59], porque posee las mejores prestaciones y
consigue llevar a cabo todas las funciones que se han listado al principio de este apartado.

En particular, para este Proyecto Fin de Carrera se ha implementado una versin


modificada del trabajo presentado por Christopher T. Johnston and Donald G. Bailey en [151]. En
este trabajo se implementa un algoritmo de un solo pase para sistemas basados en FPGA con
imgenes en tiempo real, que cuenta con los siguientes bloques:

x Lgica que proporciona el contexto de vecindades de la Figura 6.22.


x Un bloque FIFO que almacena todas las etiquetas de la lnea anterior, y el cual se
conecta con una tabla de datos que corrige las etiquetas en caso de existir una
colisin.
x Un bloque de seleccin de etiquetas que implementa la lgica del algoritmo de
eleccin, evaluando los pxeles vecinos.
x Un bloque de control de colisiones, que detecta cuando dos etiquetas colisionan y da
rdenes a la tabla de datos para que sustituya las etiquetas afectadas (La mayor
ser sustituida por la menor).
x Un bloque de control de fusiones, que detecta cuando se producen colisiones en
cadena y almacena los datos en una pila, para resolver estas colisiones en el
espacio de blanking horizontal.
x Una tabla de datos, con las caractersticas de cada objeto, actualizadas en tiempo
real.

A pesar de que el mtodo implementado en este Proyecto Fin de Carrera est basado en
este trabajo, posee algunas diferencias que se han considerado ventajosas con respecto a [151].
stas se indican a continuacin.

En [151] existe la posibilidad de encontrar lo que se llama una "cadena de resolucin", que
ocurre cuando, tras una colisin, se hace apuntar las etiquetas mayores a la menor de todas,

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 158


6.15 Etiquetado de componentes conectados y ROI

pero en el proceso, se detecta que sta a su vez apunta a otra ms pequea, y que a su vez sta
apunta a otra menor an, y as sucesivamente. En tal caso, se obtienen un nmero variable de
etiquetas que pertenecen a un mismo objeto, y que apuntan a etiquetas cada vez menores. Por
ello, se hace necesario un bloque que resuelva esta cadena al final de cada lnea, recorriendo la
tabla de fusiones de abajo hacia arriba y modificando todas las etiquetas para que al final slo
exista la menor de todas.

El mtodo propuesto en este Proyecto Fin de Carrera prescinde de este bloque de


resolucin, ya que el algoritmo est planteado de tal forma que estas cadenas de resoluciones no
existan en absoluto. Esto es, que a pesar de que un objeto pueda contener mltiples etiquetas,
todas ellas acaban volcando sus caractersticas a la menor de todas, sin que se produzca ste
fenmeno indeseado.

Tambin, en [151], se acceden a las BlockRAM de doble puerto en todos y cada uno de los
ciclos de reloj que dura la imagen activa, para modificar las caractersticas de los objetos que se
van analizando.

Sin embargo, el mtodo propuesto en este Proyecto Fin de Carrera, utiliza un acceso ms
inteligente a las memorias, ordenando una escritura solamente cuando exista un cambio de
contexto (en los bordes de un objeto, o en un cambio de etiquetas con respecto al pxel anterior).

Estos detalles se explicarn en los sucesivos apartados, as como el funcionamiento


general del bloque implementado. Tambin se dedicar un apartado a especificar cundo ocurren
estos cambios de contexto, y por tanto se inicia una escritura en memoria.

6.15.4 Diagrama de bloques

El diagrama de bloques que realiza el etiquetado de componentes conectados y la


extraccin de las regiones de inters se muestra en la Figura 6.28.

Figura 6.28. Etiquetado de componentes conectados y extraccin de ROI.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 159


Captulo 6. Reconocimiento de seales de trfico

Para hacer ms comprensible el diagrama, se han obviado algunas seales y puertos de


menor importancia. A continuacin se describen brevemente cada uno de los bloques, dejando la
explicacin detallada para el siguiente apartado.

Buffer de lnea, Qs y generador de ejes de coordenadas. Al igual que en los dems


casos, estos elementos proporcionan los contextos temporales del fotograma, necesarios para
tareas como proporcionar los pxeles vecinos, o situar las seales de sincronismo a la par que los
datos que viajarn por el bus de vdeo etiquetado. En cuanto al generador de coordenadas, es
necesario regenerarlo debido a los retrasos producidos por los bloques de procesado anteriores.
Al utilizar mltiples biestables, buffers de lnea y bloques que aaden retrasos en el flujo de vdeo,
el contexto de los ejes de coordenadas se pierde con respecto al pxel actual del flujo de vdeo y
por ello se hace necesario volver a calcularlos en base a las seales de sincronismo.

Precomparador. El bloque decisor de etiquetas analiza los pxeles que pertenecen a la


mscara de la Figura 6.22 y si encuentra etiquetas distintas, comienza un proceso en el cual se
halla la menor de todas ellas, que ser la etiqueta del pxel actual. Se ha comprobado que el
proceso que recibe las cuatro etiquetas de la mscara y calcula la menor de todas (distinta de
cero) requiere un tiempo que excede las restricciones del diseo. Por ello, se ha tenido que
separar este proceso en dos ciclos de reloj. En primer lugar se reciben las etiquetas
correspondientes a los espacios A, B y C de la mscara (Figura 6.22), y se calcula la menor de
todas. Este clculo se hace un ciclo de reloj antes del pxel actual. En segundo lugar se compara
ste resultado con la etiqueta almacenada en D, en el ciclo de reloj del pxel actual. De esta
forma, las restricciones del sistema se cumplen. El bloque precomparador realiza la primera de
estas dos tareas.

Lgica decisora de etiquetas. Este bloque analiza las etiquetas vecinas al pxel actual, y
decide qu etiqueta se le asignar a ste. Adems, enva rdenes y datos al bloque multifuncin
para actualizar la tabla de caractersticas, aadir nuevas entradas, o realizar tareas de fusin.

BRAM doble puerto. Este bloque infiere una memoria BRAM de doble puerto configurada
como Read-First [142] (en realidad son dos, trabajando en paralelo), que contiene las
caractersticas de las ROI. Su tamao es igual al nmero etiquetas posibles, y en cada entrada
existe informacin sobre las coordenadas que dicha etiqueta posee, es decir, un par de puntos
(xi,yi) (xf,yf). La etiqueta de salida del bloque decisor sirve como direccionamiento al bloque
BRAM para rescatar las coordenadas almacenadas en su interior. La orden proporcionada por el
bloque decisor al bloque multifuncin har que ste trate los datos de salida de la BRAM de una
forma u otra (sobrescribir los datos existentes, no hacer nada, o realizar nuevas lecturas).

Bloque multifuncin y extraccin de ROI. Este bloque realiza mltiples tareas, que son
ordenadas por el decisor de etiquetas. Entre ellas estn la creacin de una nueva etiqueta y su
correspondiente entrada en la tabla de equivalencias, la fusin de etiquetas, la actualizacin de
las caractersticas correspondientes a una etiqueta, y el clculo de las ROI finales que sern
llevadas a la salida de la entidad de nivel superior.

Los puertos de salida del bloque de etiquetado de componentes conectados son:

x Flujo de vdeo etiquetado conectado a la pantalla principal del sistema mediante el


bloque Multiplexor final.
x Ejes de coordenadas en el contexto del flujo etiquetado de salida.
x Coordenadas de las 8 regiones de inters detectadas.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 160


6.15 Etiquetado de componentes conectados y ROI

6.15.5 Descripcin del bloque

La Tabla 6.10 muestra la descripcin de la entidad de nivel superior del bloque de


etiquetado de componentes conectados. Este bloque recibe un pxel nuevo en cada ciclo de reloj.
En cada flanco de subida de la seal de reloj se inicia un proceso en el cual el pxel es analizado
en el contexto de sus vecinos adyacentes (proporcionados por los biestables y los buffers de
lnea).

Como se ha comentado anteriormente, el bloque precomparador toma las etiquetas


vecinas A,B y C y a su salida las saca ordenadas de mayor a menor. Se ha tenido en cuenta el
ciclo adicional que proporciona el propio bloque al sacar la salida, para que la mscara de
vecinos sea la correcta.

El bloque decisor recibe como entrada:

x Las etiquetas A, B y C ordenadas de menor a mayor.


x La etiqueta D asignada al ltimo pxel.
x El pxel binario actual correspondiente a etapas anteriores (sus valores sern '0' si el
pxel es de fondo, y '1' si es un pxel de primer plano)
x Las seales de sincronismo para realizar tareas en los espacios de blanking.

Con estas entradas, realiza las siguientes funciones:

x Identifica si el pxel actual es un pxel de fondo. En tal caso, la etiqueta de salida


siempre es 0 y el algoritmo finaliza. En caso contrario, el algoritmo contina.
x Si el pxel actual no tiene vecinos, se le asignar una nueva etiqueta. La orden
enviada al bloque multifuncin es "Aade una nueva entrada a la tabla de
caractersticas, y utiliza las coordenadas del pxel actual como ROI inicial.
x Si todas las etiquetas vecinas distintas de cero son iguales, se asigna sta al
pxel actual. La orden enviada al bloque multifuncin depender de si existe un
cambio de contexto (comienza un nuevo objeto, o las etiquetas previas son
diferentes a la de salida. Ver Apartado 6.15.5.1), y puede ser "Actualiza la tabla de
datos, con las coordenadas de ste nuevo pxel", o "No hacer nada".
x Si las etiquetas vecinas son diferentes, se ordenan de mayor a menor (como se
coment, la mayor parte de esta tarea se ha realizado en el bloque precomparador, a
falta de compararla con la etiqueta D), y la etiqueta menor de todas ser la de salida.
La orden enviada al bloque multifuncin depender de si existe un cambio de
contexto, y puede ser "Actualiza la tabla de punteros. Todas estas etiquetas mayores
apuntarn a sta menor. Adems, si procede, actualiza la tabla de datos y utiliza las
coordenadas del pxel actual".
x Si la seal de blanking vertical est activa, se enva la siguiente orden al bloque
multifuncin "Realiza las operaciones de fusin de etiquetas, encuentra todas las ROI
que sean mayores que 30x30 pxeles, saca stas a la salida del bloque, mantenlas
hasta el siguiente periodo de blanking, y por ltimo reinicia todos los contadores y
parmetros que has utilizado".

Ntese que la etiqueta de salida del bloque decisor se utiliza como direccionamiento de los
datos de la BRAM. Esto implica que en cada ciclo de reloj, una etiqueta es asignada al pxel
actual, y en el siguiente ciclo de reloj, se utiliza esta etiqueta para acceder a sus caractersticas
almacenadas. Estas caractersticas llegan al bloque multifuncin, que las lee y las modifica segn
la orden que ha recibido. El mtodo utilizado para almacenar y actualizar las caractersticas en
tiempo real merece una explicacin aparte, y por ello se utilizar una seccin completa dentro de
este apartado.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 161


Captulo 6. Reconocimiento de seales de trfico

ETIQUETADO DE COMPONENTES CONECTADOS Y EXTRACCIN DE ROI

Nombre del
blob_extraction.vhd
fichero

Realiza un etiquetado de los objetos encontrados en primer plano y saca las


Descripcin
ROI de cada uno.
entity blob_extraction is
generic (
C_FAMILY : string := "spartan6";
C_DATOS : integer := 6;
C_PIXELS_PER_LINE : integer := 1280;
C_HBLANKING : integer := 370;
C_NUM_BITS_LABELS : integer := 8;
C_BITS_X : integer := 11;
C_BITS_Y : integer := 10);
Port (
clk : in STD_LOGIC;

active_video_in : in STD_LOGIC;
hblank_in : in STD_LOGIC;
vblank_in : in STD_LOGIC;
hsync_in : in STD_LOGIC;
vsync_in : in STD_LOGIC;
binary_data_in : in STD_LOGIC;
active_video_out : out STD_LOGIC;
hblank_out : out STD_LOGIC;
vblank_out : out STD_LOGIC;
hsync_out : out STD_LOGIC;
vsync_out : out STD_LOGIC;

eje_x : out STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);


eje_y : out STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);

xi1_out : out STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);


xf1_out : out STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi1_out : out STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf1_out : out STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
Entidad xi2_out : out STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf2_out : out STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi2_out : out STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf2_out : out STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi3_out : out STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf3_out : out STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi3_out : out STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf3_out : out STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi4_out : out STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf4_out : out STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi4_out : out STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf4_out : out STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi5_out : out STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf5_out : out STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi5_out : out STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf5_out : out STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi6_out : out STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf6_out : out STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi6_out : out STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf6_out : out STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi7_out : out STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf7_out : out STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi7_out : out STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf7_out : out STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi8_out : out STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf8_out : out STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi8_out : out STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf8_out : out STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);

data_label_out: out STD_LOGIC_VECTOR((C_NUM_BITS_LABELS -1) downto 0)


);
end blob_extraction;

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 162


6.15 Etiquetado de componentes conectados y ROI

Descripcin de puertos y generics

clk Seal de reloj de vdeo a 74.25 Mhz

<video>_in Entrada del flujo de vdeo binario (datos y sincronismo).

<video>_out Salida del flujo de vdeo etiquetado (datos y sincronismo).

eje_x, eje_y Coordenadas en el contexto del flujo de vdeo etiquetado.

xi<1...8>_out
xf<1...8>_out Par de puntos (xi,yi), (xf,yf) que determinan las ocho regiones de
yi<1...8>_out inters detectadas.
yf<1...8>_out

data_label_out Etiqueta de salida, correspondiente al flujo de datos <video>_out

C_NUM_BITS_LABELS Nmero de bits que tendr cada etiqueta. Por defecto 8 bits (256
posibles etiquetas).
Tabla 6.10 Bloque fir_binary_median.vhd

El bloque multifuncin recibe como entrada:

x La etiqueta asignada al pxel actual.


x La posicin de este pxel en la pantalla (ejes x,y).
x Las caractersticas de esta etiqueta almacenadas en la BRAM.
x La orden del bloque decisor y, opcionalmente, los datos que necesita para llevar a
cabo dicha orden.

Adicionalmente el bloque multifuncin posee en su estructura interna los siguientes


parmetros de inters:

x Una tabla de punteros de etiquetas, que comprende las tareas de fusin. Esta tabla
indicar qu etiquetas apuntan a s mismas y cuales apuntan a otras etiquetas
menores.
x Una tabla de flags "etiqueta vlida", que valen '1' cuando la etiqueta se considera la
menor dentro de un objeto, y vale '0' cuando se detecta que la etiqueta pertenece a
un objeto pero no es la menor de todas, y por tanto apuntar a otra menor.
x Una mquina de estados que se activa en el periodo de blanking vertical, y recorre
la tabla de datos fusionando etiquetas, agrupando coordenadas, detectando
etiquetas vlidas, comprobando que el tamao de las ROI sea mayor que el mnimo,
sacando las ROI detectadas y finalmente reiniciando todos los parmetros, antes de
comenzar el siguiente fotograma.

Con estas entradas y estas tablas, el bloque multifuncin realiza las siguientes tareas:

x Si la orden recibida es "aade una nueva entrada", el bloque tomar la etiqueta


recibida como direccin a acceder, y almacenar en la memoria las coordenadas del
pxel etiquetado.
x Si la orden recibida es "actualiza una entrada existente", el bloque tomar las
caractersticas que le han llegado de la memoria, las comparar con las coordenadas

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 163


Captulo 6. Reconocimiento de seales de trfico

del pxel actual, y proceder a almacenar las nuevas caractersticas, utilizando la


etiqueta del pxel actual como direccionamiento.
x Si la orden recibida es "Fusiona estas etiquetas", el bloque tomar los datos
recibidos con dicha orden (las etiquetas mayores), y modificar la tabla de punteros
de la siguiente forma:
Las etiquetas mayores apuntarn a la etiqueta menor.
Las flags de la tabla "etiqueta vlida" correspondientes a las etiquetas
mayores pasarn a valer '0'.
x Si la orden recibida es "comienza el periodo de blanking vertical" se activar
una mquina de estados sncrona que realizar en orden las siguientes tareas:
En primer lugar, se reinician las salidas, y se pasa al siguiente estado.
A continuacin se recorre la tabla de flags "etiqueta vlida" y la tabla de
punteros, de abajo hacia arriba, es decir, de mayor etiqueta a menor, y una
por cada ciclo de reloj. Si se encuentra una etiqueta que no es vlida (flag =
'0'), se rescata la etiqueta menor que marca su puntero, y se accede a la
memoria para extraer sus caractersticas. Estas caractersticas se
comparan y se fusionan con las de la etiqueta mayor. Al final de este
proceso, todas las etiquetas no vlidas han volcado sus caractersticas en
las etiquetas a las que apuntaban.
A continuacin, se vuelve a recorrer la tabla, esta vez de arriba hacia abajo,
buscando etiquetas vlidas (flag = '1'), una entrada por cada ciclo de reloj.
Si se encuentra alguna, se accede a la memoria en busca de sus
caractersticas, se analizan para ver si la ROI tiene el tamao adecuado y
la proporcin adecuada, y en caso afirmativo, se saca por una de las 8
salidas disponibles. El proceso se repite hasta que el nmero de etiquetas
vlidas sea mayor que 8 (los slots de salida disponibles), o hasta que se
haya recorrido la tabla de punteros completamente.
A continuacin se reinician los contadores utilizados, as como la tabla de
punteros y de flags. Tambin se accede a la memoria, a una entrada por
cada ciclo de reloj, borrando todas las entradas.
Por ltimo, se mantiene a la espera del siguiente fotograma.

El funcionamiento de este bloque no carece de complejidad, y su explicacin en ocasiones


se hace dificultosa. Por ello, se muestra a continuacin los diagramas de flujos correspondientes
al bloque decisor de etiquetas y el bloque multifuncin.

Tngase en cuenta que se estos diagramas se presentan en modo esquemtico, omitiendo


cuando se ha considerado necesario otras operaciones de menor inters. Tmese como ejemplo
el hecho de haber omitido algunos estados intermedios en el diagrama de la Figura 6.30, cuya
nica funcin es esperar un ciclo de reloj para que los datos requeridos de la memoria lleguen a
tiempo.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 164


6.15 Etiquetado de componentes conectados y ROI

Figura 6.29. Diagrama de flujo del bloque "Lgica decisora de etiquetas" (logica_blob_extraction.vhd).

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 165


Captulo 6. Reconocimiento de seales de trfico

Figura 6.30. Diagrama de flujo del bloque multifuncin-extraccin de ROI (blob_table_merger.vhd).

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 166


6.15 Etiquetado de componentes conectados y ROI

6.15.5.1 Cambio de contexto


En apartados previos se ha mencionado a menudo la expresin "cambio de contexto" para
referirse al momento en el cual se accede a las tablas de datos en escritura para cambiar las
caractersticas de los objetos. En esta seccin se intentarn explicar todas las situaciones en las
que ocurre esto.

El cambio de contexto, tal y como se ha utilizado en el etiquetado de componentes


conectados, se da cuando la etiqueta asignada al pxel actual es diferente a la asignada en el
pxel anterior. Esto ocurre cuando el pxel pertenece a un objeto nuevo, cuando el pxel indica
que el objeto ha quedado atrs, o cuando dentro del objeto se pasa de una etiqueta a otra.

Estos casos se aprecian en la Figura 6.31.

Figura 6.31. Casos en los que ocurre un cambio de contexto en el etiquetado.

Solamente en estos casos previamente mencionados, el bloque decisor de etiquetas enva


la orden de actualizar la tabla de datos, y enva como parmetro la ltima etiqueta del contexto
anterior, para que sus caractersticas (coordenadas) sean actualizadas en la memoria BRAM.

6.15.5.2 Formacin de la ROI


La formacin de las regiones de inters a partir de la tabla de datos almacenada en
memoria requiere una explicacin aparte, por considerarse de inters. Para ello, tnganse en
mente los siguientes elementos, que influyen directamente en este clculo:

x La tabla de datos almacenada en memoria BRAM, que contiene una entrada por
cada etiqueta posible, y cada entrada almacena la informacin de un par de puntos
(xi,yi) (xf,yf) correspondiente a las coordenadas superior-izquierda e inferior-derecha
cuyo interior contiene a todas las etiquetas del mismo valor.
x La tabla de punteros, que contiene una entrada por cada etiqueta posible, y cada
entrada almacena informacin que indica a qu etiqueta est apuntando (a s misma
o a otra menor).

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 167


Captulo 6. Reconocimiento de seales de trfico

x La tabla de flags "etiqueta vlida", que contiene una entrada por cada etiqueta
posible, y cada entrada almacena un '0' si la etiqueta apunta a otra menor, o un '1' si
la etiqueta apunta a s misma.

Haciendo uso de estas tres tablas, se ilustrar un ejemplo grfico que muestre de forma
simplificada el funcionamiento y la creacin en tiempo real de la ROI. Para ello, tmese como
ejemplo la ya conocida "U" que ha servido para ilustrar otros conceptos. Con esta imagen se
proceder a estudiar cmo van actualizndose las tablas de datos y el resultado final.

Figura 6.32. Proceso de etiquetado y almacenado de caractersticas para la extraccin de la ROI.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 168


6.15 Etiquetado de componentes conectados y ROI

En la Figura 6.32 se puede apreciar el proceso completo de etiquetado de un objeto en


forma de "U". Se han sealado en tonos ms oscuros aquellos pxeles que aportan coordenadas
de inters para el objeto al que pertenecen y por tanto, al menos alguna de sus coordenadas
aparecer en la tabla de datos.

El algoritmo usado para decidir si un pxel tiene o no alguna coordenada de inters es el


siguiente:

x Si la X_inicial almacenada en memoria es mayor que la X_actual del pxel, entonces


X_inicial <= X_actual.
x Si la X_final almacenada en memoria es menor que la X_actual del pxel, entonces
X_final <= X_actual.
x Si la Y_final almacenada en memoria es menor que la Y_actual del pxel, entonces
Y_final <= Y_actual.
x Y_inicial nunca cambia desde su primera aparicin, debido a la forma en la cual
llegan los datos.

Ntese que a lo largo del proceso de etiquetado, la tabla de datos va reflejando los valores
de coordenadas de cada etiqueta y, por tanto, el objeto al que representa. El problema llega
cuando, por la forma irregular del objeto, el algoritmo se ve forzado a utilizar ms de una etiqueta
en el mismo. En el momento que se produce la colisin, se actualiza la tabla de punteros, donde
la etiqueta 2 apuntar a la etiqueta menor, en este caso la 1. Tambin su flag de "etiqueta vlida"
pasa a valer '0', indicando que queda obsoleta.

Sin embargo, es importante notar que no existe un "trasvase" de la informacin en la tabla


de datos, desde la etiqueta 2 a la etiqueta 1, sino que el proceso de etiquetado contina
normalmente, actualizando las coordenadas en sus etiquetas respectivas. Esto tiene una
importante repercusin: cuando el algoritmo llega al final del fotograma, las coordenadas que
encierran al objeto en forma de "U" no son las que aparecen en la entrada 1 de la tabla de datos.
Tampoco son las coordenadas que aparecen representando a la etiqueta 2, sino que sern una
fusin de ambas (Figura 6.33).

Figura 6.33. ROI almacenadas en cada entrada de la tabla de datos antes de la fusin.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 169


Captulo 6. Reconocimiento de seales de trfico

Por ello se ha implementado una mquina de estados que se inicia en el periodo de


blanking vertical, y que recorre la tabla desde abajo (etiquetas mayores) hacia arriba (etiquetas
menores), buscando cuales son las etiquetas obsoletas, y realizando este transvase de
coordenadas, siguiendo el mismo algoritmo mencionado en el prrafo anterior, para averiguar si
las coordenadas almacenadas tienen o no inters. Este hecho se ilustra en la Figura 6.34.

Figura 6.34. ROI final tras la fusin de etiquetas en el espacio de blanking vertical.

Una vez se realiza esta operacin, la tabla de datos estar lista para ser sacada por la
salida, pues contendr informacin codificada de la siguiente forma:

x Las etiquetas menores de un objeto tendrn la ROI de todo el objeto.


x La tabla de flags "etiqueta vlida" indicar qu entradas tienen una ROI vlida.
x El objeto en cuestin no ha necesitado codificarse al completo con una sola etiqueta
para obtener ROIs vlidas.

El ltimo paso ser recorrer nuevamente la tabla, y si la ROI encontrada cumple las
restricciones de tamao y proporcin, se usar un slot de salida para sacarla al siguiente bloque.
Estas restricciones son:

x La ROI debe ser mayor que 30x30 pxeles.

x La proporcin entre el ancho y el alto de la ROI no puede ser mayor que 2, ni


menor que 0.5.

6.15.5.3 Equivalencia etiqueta-color para su visualizacin


Para observar cmo se efecta en tiempo real el proceso de etiquetado de componentes
conectados, se ha creado un bloque (en realidad es el multiplexor de mscaras de la Figura 6.9
quien realiza esta tarea), que convierte cada etiqueta asignada en un color distinto, y saca un
flujo de vdeo a la pantalla principal para su visualizacin. Este flujo de vdeo etiquetado tambin
puede verse en la pantalla LCD 8.4''.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 170


6.15 Etiquetado de componentes conectados y ROI

A modo informativo, se adjunta a continuacin una tabla con los valores de etiqueta y sus
colores asociados. Esta forma de visualizacin ha sido muy utilizada en este Proyecto Fin de
Carrera, para labores de depuracin.

Nmero de
Cdigo Color
etiqueta
0 (Fondo) #000000 NEGRO

1 #FF00FF AMARILLO

2 #FFFFFF BLANCO

3 #FF0000 ROJO

4 #00FF00 VERDE

5 #FF00FF MAGENTA

6 #0000FF AZUL

7 #00FFFF CYAN

8 #666666 GRIS

(9 - 253) #FF9999 NARANJA CLARO

254 #808000 VERDE ACEITUNA

255 #808000 VERDE ACEITUNA

256 #808000 VERDE ACEITUNA

Tabla 6.11 Relacin entre etiquetas y colores mostrados en el flujo de vdeo etiquetado.

6.15.5.4 Patrones creados en la etapa de Segmentacin


Siguiendo la codificacin de colores del flujo de vdeo etiquetado de la Tabla 6.11, se
muestran a continuacin los patrones predefinidos generados en el proceso de segmentacin y el
etiquetado que realiza el sistema implementado.

Figura 6.35. Proceso de etiquetado y clculo de ROIs en los patrones predefinidos.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 171


Captulo 6. Reconocimiento de seales de trfico

Estos patrones han sido creados para comprobar el correcto funcionamiento de algunos
parmetros, como por ejemplo:

x Que las ROI funcionen correctamente, conteniendo ntegramente al objeto.


x Que el volcado de informacin de las etiquetas obsoletas a sus equivalentes se
realice correctamente.
x Que las ROI menores de 30x30 o cuya proporcin ancho/alto sea mayor que 2 o
menor que 0.5 pxeles sean descartadas.
x Que la asignacin de etiquetas sea la correcta.
x Visualizar el efecto de las colisiones de etiquetas, en todos los casos posibles.
x Comprobar la correcta administracin de los 8 slots de salida disponibles.

6.15.6 Problemas encontrados

La descripcin del bloque de etiquetado de componentes conectados y extraccin de la ROI


ha sido, sin lugar a dudas, la ms compleja de implementar, y se ha tenido que hacer frente a
numerosos problemas.

Como consecuencia de esto, se ha tenido que cambiar la forma de abordar el problema en


varias ocasiones, y el bloque ha contado con numerosas versiones previas antes de ser
completamente funcional. A continuacin se resume brevemente la trayectoria que se ha seguido
para su implementacin.

x Desde un principio, se decidi realizar un algoritmo de un solo pase, por las


restricciones del sistema, y para que el retraso de procesado fuese lo menor posible.
Esto implic un gran estudio e investigacin de la literatura, y mucho tiempo para
comprender correctamente el funcionamiento de un mtodo de estas caractersticas.
x Posteriormente, se realiz una primera aproximacin del bloque principal, que no
cumpla las restricciones de tiempo del sistema. En particular, el camino crtico se
hallaba cuando el algoritmo ordenaba de mayor a menor las etiquetas de la mscara.
Por ello se decidi implementar el bloque precomparador, que realizaba esta tarea
en dos pasos, comenzando un ciclo de reloj antes.
x Se intent crear una mscara de procesado mayor que la de la Figura 6.21, de
tamao 10x2 pxeles, con la intencin de reducir el nmero de etiquetas que pudiese
contener un mismo objeto (recurdese que ste nmero se incrementa cuando la
rugosidad de los bordes del objeto es mayor que el tamao de la mscara). Tras
realizar varias pruebas, se descart este mtodo por varios motivos.
El nmero de etiquetas se redujo apenas perceptiblemente.
La complejidad del bloque decisor de etiquetas se vio incrementada en
sobremanera, al tener que trabajar con ms pxeles vecinos.
x En un principio, el nmero de etiquetas disponibles era de 8, pero result ineficiente
debido a la resolucin por defecto de la pantalla (1280x720 pxeles). Este nmero de
etiquetas es suficiente en otros proyectos donde la resolucin de la imagen es
pequea, pero totalmente ineficiente en el sistema de este Proyecto Fin de Carrera.
x Al aumentar el nmero de etiquetas a 256, el sistema dej de cumplir las
restricciones de tiempo, al multiplicarse el nmero de seales, multiplexores y
comparadores necesarios para implementar la lgica del bloque. Por ello, se decidi
crear el bloque multifuncin, que junto al bloque decisor, realiza todo el etiquetado en
dos ciclos de reloj, en vez de utilizar slo uno. Este bloque se implement con la idea
de recibir rdenes del decisor y llevarlas a cabo.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 172


6.16 Etapa de identificacin de la seal vial

x El siguiente problema a enfrentar haca referencia a la fusin de las etiquetas y el


mtodo a elegir para realizar este proceso. En un principio, cuando una etiqueta
quedaba obsoleta, se volcaban sus caractersticas a la etiqueta equivalente menor
en el mismo ciclo de reloj. Este mtodo se comprob ineficiente al no cumplir las
restricciones de tiempo impuestas. Basndose en el estudio adquirido, se
implement un sistema en el cual las cadenas de fusiones no tuvieran razn de ser,
guardando las tareas de volcado de datos de unas etiquetas a otras para los
periodos de blanking.
x La necesidad de manejar mltiples etiquetas y caractersticas condujo a implementar
(por inferencia) una BRAM de doble puerto. Se tuvieron que modificar los bloques
para que la etiqueta de salida hiciera las veces de direccionamiento. En un principio,
esta memoria produca una gran cantidad de datos corruptos. Se comprob (a travs
de la gua XST) que el acceso en lectura y escritura de una misma direccin de
memoria, requera que la misma estuviera configurada como "Read-First". Tras
cambiar el cdigo de la memoria para inferir en una BRAM configurada como "Read-
First", el bloque comenz a funcionar.
x Por ltimo, se ha tenido que hacer frente a numerosos problemas de funcionamiento
indeseado, errores en la descripcin del bloque, administracin de tablas, slots de
salida, etc..

6.16 Etapa de identificacin de la seal vial

En este apartado se estudiar la tercera y ltima etapa de anlisis en el sistema de


reconocimiento de seales de trfico: la extraccin de caractersticas de las ROI para realizar la
identificacin de la seal vial. Se vern los problemas comunes, sobre todo aquellos que surgen
de la implementacin en hardware de este tipo de tratamiento, y se estudiarn diversos mtodos
para llevar a cabo la tarea de identificacin. Finalmente se escoger uno de los mtodos
propuestos y se implementar en el sistema total.

6.16.1 Introduccin

Esta ltima etapa, que corresponde con la identificacin de la seal de trfico, es la parte
ms abierta de todo el proyecto, debido a la gran cantidad de mtodos de muy diversas ndoles
que existen para llevar a cabo esta tarea. La implementacin de esta ltima etapa ha llevado a
investigar a conciencia el estado del arte en el reconocimiento de patrones, la extraccin de
caractersticas de inters, el uso de ciertos aspectos de la imagen para clasificar objetos, y
muchas otras cuestiones relacionadas con lo anterior. De entre todos los mtodos estudiados y
analizados, se han elegido los que mejor se adaptan a los conocimientos, la experiencia, el
tiempo disponible y el alcance de este proyecto.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 173


Captulo 6. Reconocimiento de seales de trfico

6.16.1.1 Conjunto de seales a identificar


El conjunto de seales que se ha elegido para su identificacin es el mostrado en la Figura
6.36, siendo un total de 16 seales de trfico.

Figura 6.36. Seales de trfico que pueden ser identificadas por el sistema.

Los motivos por los cuales se han elegido estas seales son los siguientes:

x Son seales que aparecen con frecuencia en carretera.


x Son una buena representacin del conjunto total de seales.
x Tienen caractersticas de todos los tipos que se puedan encontrar: forma rectangular,
triangular, circular; colores rojos, azules, blancos, negros; seales prcticamente
iguales a excepcin del pictograma central, etc..

6.16.1.2 Otras seales


Existen, sin embargo, otro tipo de seales, como pueden ser la sealizacin por obras con
colores amarillos, algunas seales de fin de prohibicin, y seales verticales de informacin que
no sern consideradas en este Proyecto Fin de Carrera.

Figura 6.37. Tipos de seales no considerados en este Proyecto Fin de Carrera.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 174


6.16 Etapa de identificacin de la seal vial

El motivo por el cual se han descartado las seales con colores amarillos, o los tipos que
aparecen en la Figura 6.37, es que se ha considerado que estas seales no aportan nada nuevo
en cuanto al desarrollo de este proyecto, y por ello su exclusin no supone una prdida de
generalidad.

6.16.2 Mtodos propuestos

Cuando se trata de realizar un sistema de reconocimiento de patrones, una prctica muy


comn es separar el problema de identificacin en varias partes bien diferenciadas, y aplicar
diferentes mtodos en cada una de ellas. De esta forma, se consigue utilizar no slo un mtodo
de identificacin, sino varios que trabajan simultneamente. Estas etapas van aportando
informacin al sistema desde diferentes puntos de vista, tras lo cual existe un bloque de decisin
que sopesa todas las caractersticas encontradas y finalmente decide qu patrn se ha
detectado. Por ello debe tenerse en cuenta que los mtodos propuestos no tienen por qu ser
excluyentes entre s, sino que pueden ir combinados de forma jerrquica, o incluso trabajar en
paralelo.

Como se vio en la Seccin 6.2, existen numerosos mtodos para la identificacin de la


seal vial. Todos ellos corresponden a una de las cuatro clases ya vistas:

x Reconocimiento basado en patrones.


x Reconocimiento basado en histograma.
x Reconocimiento basado en extraccin de caractersticas numricas.
x Reconocimiento basado en redes neuronales y SVM.

La mayora de los mtodos utilizados en la actualidad proponen el uso de patrones


almacenados en memoria, para todas las seales a reconocer. Muchos de ellos, como [132] y
[133] incluso poseen varias plantillas de distintas resoluciones para la misma seal. Para ahorrar
recursos, en ocasiones la comparacin se realiza solamente con los bordes (previamente
detectados) de la seal vial, o del pictograma que posea.

El uso de patrones para la identificacin es un mtodo robusto y fiable, pero presenta


algunos inconvenientes que se han decidido evitar en este Proyecto fin de Carrera. Por un lado,
almacenar plantillas para todas las seales a reconocer requiere un gran uso de recursos de
memoria, que muchas veces no se encuentran disponibles en un sistema Hardware. Por otro
lado, la comparacin con patrones implica disponer obligatoriamente de un sistema que haga
coincidir los ejes del patrn con los de la ROI [127], escalando y rotando la imagen hasta que
ambos ejes coincidan. De otra forma, la comparacin con el patrn sera en vano. Esto se realiza
con bloques que calculen las esquinas de la seal para detectar la posicin de los ejes de
coordenadas de la misma, bloques que pasen estas coordenadas a polares, bloques que
implementen el escalado y la rotacin de todos los pxeles de la ROI, para finalmente realizar una
correlacin cruzada con el patrn y calcular el coeficiente de correlacin obtenido.

La complejidad de esta etapa de rotacin y correlacin hace que el sistema deje de trabajar
en tiempo real, dando una tasa de fotogramas procesados por segundo muy por debajo de la
tasa de vdeo. Por todo ello, se ha decidido probar mtodos alternativos, que si bien pueden
resultar menos robustos, poseen interesantes caractersticas que se vern a lo largo de esta
seccin.

Por ltimo, destacar que el uso de las redes neuronales o las mquinas de soporte de
vectores para realizar esta tarea se ha considerado interesante, pero excede el alcance de este
Proyecto Fin de Carrera.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 175


Captulo 6. Reconocimiento de seales de trfico

6.16.3 Solucin adoptada

Aunque existen mtodos de identificacin mucho ms potentes y robustos, se ha intentado


seguir una metodologa precisa que, como mnimo, permita realizar la tarea de identificacin con
un alto grado de fiabilidad dentro del alcance del proyecto, y al mismo tiempo posea las
siguientes caractersticas.

x Se debe implementar un bloque de deteccin que siga las prcticas comunes de los
sistemas reales.
x Adems, la identificacin debe realizarse en tiempo real, por defecto a 60 f.p.s.
x La identificacin debe estar basada en diferentes clasificaciones jerrquicas, que irn
discriminando seales hasta encontrar la ms probable de todas.
x Adems, se pretende implementar un bloque de identificacin que no base su
funcionamiento en la comparacin de plantillas o patrones de imgenes
almacenados en memoria, sino solamente en extraccin de caractersticas
numricas.
x El bloque ser capaz de aproximarse a la identificacin de la seal desde distintos
puntos de vista, intentando descartar aquellas caractersticas que no sean
coherentes (por ejemplo como producto de una mala segmentacin).
x El sistema ser capaz de identificar un conjunto de seales de trfico que represente
fielmente el conjunto total de seales, contando con caractersticas variadas (colores,
formas, tamaos y pictogramas).
x Finalmente, el sistema estar abierto, en la medida de lo posible, a la inclusin de
nuevas seales dentro del conjunto de seales que es capaz de identificar. En su
defecto, se explicarn los pasos a realizar y las ventajas e inconvenientes de incluir
nuevas seales.

Por ello, se propone un sistema de identificacin jerrquica, donde varias etapas de


clasificacin analizan la ROI desde diferentes puntos de vista, obteniendo parmetros numricos
que servirn posteriormente para decidir si la ROI contiene una seal vial, y en caso afirmativo
identificarla.

6.16.3.1 Separacin en tres etapas de clasificacin


La solucin adoptada finalmente para la identificacin de las seales de trfico basa su
funcionamiento en tres etapas de clasificacin, que irn discriminando las diferentes seales
hasta encontrar la ms probable:

x Primera clasificacin: discriminacin por color.


x Segunda clasificacin: discriminacin por forma.
x Tercera clasificacin: discriminacin por pictograma o informacin interior.

Estas tres etapas de clasificacin son muy utilizadas en el campo del reconocimiento de
seales de trfico porque permiten separar el problema en tres partes independientes y usar
diferentes mtodos para cada una de ellas. Por ejemplo, para la clasificacin por color podra
usarse mtodos de segmentacin por color o deteccin de bordes; para la identificacin de la
forma podran utilizarse espacios transformados (Hough), deteccin de bordes, correlacin con
formas predefinidas, descriptores de Fourier; y para la identificacin del pictograma podran
usarse detectores de contorno o comparacin con plantillas almacenadas en memoria.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 176


6.16 Etapa de identificacin de la seal vial

6.16.3.2 Primera clasificacin: discriminacin por color


Esta primera clasificacin se hace en base a los colores de las seales, que pueden ser:

x Seales Rojas-Blancas.
x Seales Rojas-Blancas-Negras.
x Seales Azules-Blancas.
x Seales Azules-Blancas-Negras.
x Seales Azules-Blancas-Rojas.
x Seales Rojas-Azules.

Debido a que en apartados anteriores se ha realizado un extenso estudio de la


segmentacin en el espacio de color RGB, se proceder a realizar una segunda segmentacin en
esta clasificacin para detectar los colores de la seal de trfico. El objetivo de esta
segmentacin no es otro que detectar los colores presentes en la seal de trfico, calculando la
proporcin de cada uno.

Esta segmentacin, sin embargo, es diferente a la vista anteriormente, y presenta algunas


particularidades muy importantes que tendrn que analizarse en detalle. Estas diferencias son las
siguientes.

x En esta etapa debern detectarse de forma fiable los colores rojo, azul, blanco y
negro, estableciendo umbrales que se ajusten a ellos. Como se ver ms adelante,
la segmentacin del color blanco es especialmente delicada, ya que lo que se
percibe en pantalla como "blanco" puede pertenecer a un rango u otro del cubo RGB
dependiendo de las condiciones de luz. Como ejemplo, en malas condiciones de
iluminacin, un gris oscuro puede interpretarse visualmente como blanco; pero con
buena iluminacin, el mismo color gris puede pertenecer a un objeto negro.
x Adems, el proceso de segmentacin se aplica en toda la ROI, cuando realmente
la seal de trfico estar ocupando slo una parte del rea total. Esto har necesario
crear un sistema que previamente detecte si el pxel actual pertenece al interior de la
seal de trfico, o por el contrario se encuentra en el exterior.

Destacar que este ltimo punto es de vital importancia. Tmese como ejemplo la seal de
trfico roja, que es interpretada por el sistema como una seal azul slo porque el cielo de fondo
(parte del cual est dentro de la ROI) es azul. As mismo, podran interpretarse errneamente
seales azules, porque estn situadas sobre un fondo interpretado como blanco. Por ello es
necesario identificar el principio y el final de una seal lnea por lnea, para que todo pxel que no
pertenezca al interior de la seal vial sea segmentado como "pxel de fondo". Adems, si el
sistema detecta qu pxeles pertenecen al interior de la seal, se puede implementar un algoritmo
menos restrictivo en cuanto al color blanco, pudiendo disminuir el valor umbral del mismo, sin
miedo a que pasen el filtro aquellos pxeles claros que no pertenecen a la seal.

Figura 6.38. La primera etapa de clasificacin identifica errneamente el grupo al que pertenece la seal.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 177


Captulo 6. Reconocimiento de seales de trfico

El problema de no incluir un sistema que detecte qu pxeles pertenecen al interior de la


seal vial se ilustra en la Figura 6.38, y corresponde a los primeros modelos de esta clasificacin
realizados en Matlab. En dicha figura se observa el efecto de los pxeles de fondo en la
clasificacin de una seal vial. El sistema ha detectado que la seal que se encuentra en la ROI
pertenece al grupo de seales "Rojas-Azules" ya que la proporcin de estos colores es
predominante. Sin embargo, la totalidad de los pxeles azules provienen del fondo, y no
pertenecen a la seal en s.

Una vez identificadas las particularidades y los problemas de esta primera etapa de
clasificacin, se procede a describir su funcionamiento, que puede resumirse en los siguientes
puntos.

x Se recorre una lnea de la ROI y se detectan aquellos pxeles que pertenecen al


interior de la seal de trfico. Los que no pertenezcan al interior sern segmentados
como "pxeles de fondo".
x Se vuelve a recorrer la misma lnea, segmentando cada pxel interior a la seal de
trfico como "rojo", "azul", "blanco" o "negro".
x Al mismo tiempo, cuando se ha clasificado un pxel, se incrementa un contador que
indica el nmero de pxeles totales que pertenecen a cada segmento.
x Se toman los contadores y se calcula la proporcin de colores encontrados,
normalizados en base al tamao de la ROI.
x Finalmente se analizan estos valores, comparndolos con umbrales que indicarn si
la proporcin de pxeles de un cierto color es significativa o se puede descartar. Con
estos datos, se decide a qu grupo pertenece la seal clasificada.

Las condiciones que deben cumplir los pxeles para pertenecer a uno u otro segmento se
listan a continuacin. En el caso de la segmentacin del color rojo, el mtodo utilizado y los
umbrales establecidos son los mismos que se han estudiado previamente en la etapa de
segmentacin. Recurdese que era posible elegir diferentes umbrales y ganancias por software.

R ' i , j k1 Ri , j k1 [1  1.492]

Rojo : si
( R ' i , j ! 2 Gi , j ) AND ( R ' i , j ! 2 Bi , j ) AND ( R ' i , j ! umbral _ rojo)

R ' i , j k 2 Ri , j k 2 [0.5  0.992]



Azul : si
( Bi , j ! 2 R ' i , j ) AND ( Bi , j ! Gi , j  16)

Blanco : si ( Ri , j  Gi , j  Bi , j ) ! C _ UMBRAL _ BLANCO

Negro : si ( Ri , j  Gi , j  Bi , j )  C _ UMBRAL _ NEGRO

Estas expresiones han sido elegidas tras numerosas pruebas en Matlab. Como se explic
en apartados anteriores, se ha utilizado un mtodo ligeramente diferente para el color azul, que
ha probado ser ms efectivo que el utilizado para el rojo. As mismo, tngase en cuenta que el
umbral de rojo y las ganancias k1 y k2 pueden ser establecidos en tiempo real por software. Los
valores C_UMBRAL_BLANCO y C_UMBRAL_NEGRO son fijos y oscilan entre 300-500 para el
blanco y 90-150 para el negro.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 178


6.16 Etapa de identificacin de la seal vial

El motivo por el cual estos umbrales son fijos se explicar a continuacin. Una vez que se
ha detectado con certeza qu pxeles pertenecen al fondo de la ROI y cuales de ellos son
interiores a la seal de trfico, se puede afirmar con relativa seguridad que los pxeles interiores
pertenecen a zonas de color muy diferenciadas entre s, como cabra de esperar. Esto permite
relajar en cierta medida las condiciones de segmentacin, tomando umbrales bajos sin miedo a
cometer un error apreciable en la segmentacin. Esto supone una gran ventaja sobre todo en la
segmentacin del color blanco y el negro, tan problemticos en otras condiciones.

Para comprender mejor la "permisividad" de estos umbrales una vez supuesto que el pxel
se encuentra en el interior de la seal de trfico, obsrvese la expresin anterior para segmentar
un pxel blanco:

Blanco : si ( Ri , j  Gi , j  Bi , j ) ! C _ UMBRAL _ BLANCO

Un pxel blanco puro se da cuando R=G=B=255. Por tanto, este pxel blanco supondra un
valor de 255+255+255 = 765 en la expresin arriba indicada. Obsrvese que al establecer un
umbral entre 300-500, el sistema estara segmentando como blancos incluso aquellos pxeles
que tuvieran una "pureza" de apenas el 52%. Este concepto se ilustra en la Figura 6.39.

Como se ha explicado anteriormente, estos umbrales tan permisivos son posibles gracias a
las suposiciones de que el pxel se encuentra en el interior de la seal vial, y que los pxeles
interiores poseen rangos de color muy diferentes entre s. Cabe mencionar, finalmente, que el
umbral para el negro es menor que el blanco debido a que los pxeles negros de una imagen son
menos sensibles a las condiciones de luz de la escena.

Figura 6.39. Umbrales para la segmentacin del blanco y el negro.

Finalmente, una vez detectadas las proporciones de los diferentes colores de la seal, se
realiza una comparacin con un umbral. Si la proporcin es superior a ese umbral, se considerar
que la seal posee dicho color en su composicin. De esta forma esta primera clasificacin
concluye con la deteccin de los colores de la seal de trfico, y se pasar a la siguiente etapa.

6.16.3.3 Detector de los pxeles interiores a la seal


En este apartado se har una explicacin del mtodo elegido para detectar el comienzo y el
final de una seal de trfico dentro de su ROI, y de esta forma poder clasificar los pxeles de la
imagen como pxeles interiores o exteriores a la seal vial. Este mtodo es utilizado en la primera
etapa de clasificacin para que la proporcin de colores de la seal no se vea afectada por el
fondo.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 179


Captulo 6. Reconocimiento de seales de trfico

El mtodo propuesto para llevar a cabo esta tarea se basa en la adaptacin de un filtro de
deteccin de bordes Zero-crossing, ampliamente conocido y utilizado en el procesamiento de
imgenes ([152] [153] [154]). El mtodo original se utiliza sobre imgenes binarias, y su objetivo
es recorrer la imagen y detectar aquellos pxeles que tengan un cambio de signo con respecto a
sus vecinos. La salida del filtro Zero-Crossing es una imagen binaria, en donde tan slo aparecen
los bordes del objeto encontrado.

Para hacer frente al problema de deteccin de los pxeles interiores a una seal de trfico,
se ha procedido a adaptar el concepto del filtro de deteccin de bordes Zero-crossing en los
siguientes aspectos:

x Debido a que el algoritmo modificado se realizar lnea por lnea, se pierde el


concepto de imagen en dos dimensiones, por lo cual la mscara de vecinos pasar
de dos dimensiones a slo una.
x El algoritmo modificado no se realizar sobre una imagen binaria, sino sobre una
imagen segmentada en base al color rojo y azul. El concepto de cruce por cero se
dar cuando se encuentre un grupo de pxeles rojos (o azules) seguido de un pxel
de diferente color.
x As mismo, el concepto de "borde" se adapta de la siguiente forma: Se considera que
existe un "borde" cuando ste es de color rojo (o azul) y la anchura del mismo es de
5 pxeles como mnimo.

Tomando en cuenta esto, el mtodo propuesto para identificar el interior de una seal se
basar en un proceso que analice por adelantado cada lnea de la ROI, justo antes de ser
recibida por la etapa de identificacin. Este proceso aplicar una mscara unidimensional de
tamao 6x1 como la de la Figura 6.40.

Figura 6.40. Mscara de actuacin adaptada Zero-Crossing.

El algoritmo implementado es el siguiente:

x Una lnea de la ROI se recorre de izquierda a derecha. Ante la llegada de un nuevo


pxel, se analiza ste junto a todos los pxeles de la mscara.
x Si los pxeles P-1, P-2, P-3, P-4 y P-5 de la mscara son todos rojos (o todos azules), y
el pxel P0 es distinto al resto, se considera que ha habido un cruce por cero.
x En este caso, se incrementa un contador que almacena el nmero de cruces por
cero detectados, y por lo tanto el nmero de bordes que existen en esa lnea.
x Cuando se procesa la lnea completa, se analizan los resultados y se detecta si los
cruces por cero han sido provocados por el color rojo o el azul y se informa al
siguiente bloque, indicando cual es el color "activador". El color "activador" (o bien
rojo, o bien azul) servir para indicar de qu forma se har el recuento de los bordes.
x El nmero de cruces por cero detectados tambin se enva al bloque de
identificacin, que lo tendr en cuenta en su proceso.
x A continuacin se reinician los contadores y se espera a recibir la siguiente lnea de
la ROI.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 180


6.16 Etapa de identificacin de la seal vial

El bloque de identificacin procesa cada lnea inmediatamente despus de que el algoritmo


Zero-crossing haya finalizado con ella. Para esto, toma como dato el nmero de cruces por cero
que ha resultado de esa lnea y realiza las siguientes operaciones:

x A cada pxel se le aplica la misma mscara de la Figura 6.40.


x Todo pxel de la lnea es considerado como fondo (sea cual sea su color), mientras
no se haya detectado el primer cruce por cero. Para esta primera deteccin se toma
el color "activador" recibido del bloque anterior, que puede ser "azul" o "rojo".
x El primer cruce por cero se da cuando se detecta que todos los vecinos de la
mscara almacenan el color activador, menos P0 que contiene otro color. A partir de
este momento, el sistema sabe que se encuentra dentro de la seal de trfico.
x Una vez se haya detectado el primer cruce por cero, se decrementa el nmero de
cruces totales en uno.
x A partir de ese momento cada vez que se detecte un cruce por cero, se
decrementar la cantidad total en uno.
x Todos los pxeles encontrados despus del primer cruce por cero sern interpretados
como pxeles interiores a la seal de trfico, siempre y cuando el nmero total de
cruces restantes sea mayor que cero.
x Una vez se detecta el ltimo cruce por cero y el contador llega a cero, todos los
pxeles restantes son interpretados como pxeles de fondo.

Siguiendo este algoritmo, los pxeles que realmente son considerados parte del interior de
la seal son aquellos que se encuentran entre el primer cruce y el ltimo. Tmese como ejemplo
las siguientes porciones de seales mostradas en la Figura 6.41.

Figura 6.41. Clculo del interior de la seal vial con el mtodo Zero-crossing.

Para finalizar este apartado, se muestran los resultados obtenidos con este algoritmo en las
pruebas hechas con Matlab (Figura 6.42 y 6.43). Ntese que las seales son correctamente
segmentadas en la Figura 6.42, a pesar de que en ambas ROIs existan pxeles de fondo que

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 181


Captulo 6. Reconocimiento de seales de trfico

podran ser azules (La barandilla de fondo en la ROI 1 y el cielo en la ROI 2). Sin embargo, se ha
detectado correctamente que estos pxeles no pertenecen al interior de la seal, y por tanto se
clasifican dentro del segmento de fondo (en color amarillo).

En la Figura 6.43 se muestra el caso de realizar la clasificacin por color sin utilizar el
mtodo basado en el detector Zero-crossing, resultando en una mala clasificacin. Tambin se
observa que la proporcin del rea de la seal con respecto al rea total es errnea, no pudiendo
utilizar este dato para posteriores clasificaciones.

Figura 6.42. Clasificacin de la imagen por color con el mtodo Zero-crossing (Modelo en Matlab).

Figura 6.43. Clasificacin errnea de la imagen por color sin el mtodo de Zero-crossing (Modelo en Matlab).

6.16.3.4 Segunda clasificacin: discriminacin por forma


Esta segunda clasificacin se hace en base a la forma de la seal, que puede ser:

x Triangular.
x Rectangular.
x Circular.
x Octogonal.

Existen muchos mtodos para determinar la forma de una seal de trfico. La mayora
pasan por utilizar o bien espacios transformados para detectar formas, detectores de borde, o

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 182


6.16 Etapa de identificacin de la seal vial

bien una combinacin de ambas cosas. Tambin se utilizan los descriptores de Fourier para
describir el contorno del objeto a analizar.

Sea cual sea el mtodo utilizado para esta clasificacin, una caracterstica importante que
debe poseer, es la invarianza a la rotacin y el escalado de la seal detectada. Es decir, el
algoritmo de identificacin debe dar los mismos resultados tanto si la seal est bien situada,
como si est rotada, inclinada, girada, o escalada.

En este Proyecto Fin de Carrera, se presenta un mtodo de deteccin de formas basado en


el clculo de los llamados descriptores de borde, o vectores de distancia a los bordes. A
pesar de ser un mtodo relativamente sencillo (al menos en su comprensin terica), proporciona
interesantes resultados, que han sido probados tanto en Matlab como en el sistema real.

Los descriptores de borde se utilizan en sistemas de reconocimiento de patrones como


primera aproximacin para calcular el contorno de un objeto detectado. Estos vectores
proporcionan valores numricos que permiten reducir un problema en dos dimensiones
(correspondientes a las coordenadas (x,y) de la ROI) a un problema de una dimensin (distancia
del borde al objeto).

Usualmente, cuando el objeto tiene formas complejas, se utilizan mtodos ms sofisticados,


como los descriptores de Fourier [41]. Sin embargo, debido a que en este proyecto se desean
detectar contornos de formas simples (tringulos, rectngulos y crculos a lo sumo rotados o
escalados), se podrn utilizar los descriptores de borde con buenos resultados.

Los descriptores de borde son un conjunto de vectores que se sitan alrededor de la ROI, y
miden la distancia que existe entre el borde y el inicio de la seal vial. Estos cuentan con cuatro
posiciones de inicio conocidas, que son (suponiendo una ROI de tamao MxN pxeles):

x Descriptores izquierdos (L), situados en x=0.


x Descriptores derechos (R), situados en x=M.
x Descriptores superiores (T), situados en y=0.
x Descriptores inferiores (B), situados en y=N.

La Figura 6.44 muestra un ejemplo de estos descriptores de borde, donde se han


establecido 9 valores de ancho y 8 valores de alto.

Figura 6.44. Descriptores de borde T, B, L, R.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 183


Captulo 6. Reconocimiento de seales de trfico

En el caso ideal de que la seal de trfico estuviese bien orientada, con sus ejes alineados
con los de la ROI, se podra fcilmente averiguar su forma sin ms que evaluar estos descriptores
de borde de forma individual. As por ejemplo, una seal triangular tendra los descriptores Bi=0, y
Li, Ri iran creciendo de arriba hacia abajo (o de abajo hacia arriba en el caso de la seal "Ceda
el paso", por ejemplo). Una evaluacin similar de los descriptores permitira hallar formas
rectangulares o circulares sin inconvenientes.

Sin embargo, no es usual que la seal detectada est alineada con la ROI. Como regla
general, cabra esperarse todo lo contrario, que la seal se encontrase rotada o girada dentro de
su ROI, haciendo el problema de deteccin de contornos mucho ms difcil de tratar.

Por ello, se hace necesario preguntarse Qu informacin aportan los descriptores de


borde si la seal vial se encuentra girada o rotada? Es posible averiguar sus caractersticas de
forma en tal caso, usando dichos descriptores? Para responder a estas preguntas, obsrvese la
Figura 6.45, donde se presentan varios casos posibles, tanto con seales alineadas con su ROI
como rotadas y giradas. En este caso se muestran vectores de tres puntos por cada lado.

Figura 6.45. Descriptores de borde para diferentes seales y posiciones de las mismas.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 184


6.16 Etapa de identificacin de la seal vial

De la Figura 6.45 pueden obtenerse las siguientes conclusiones.

x La simetra que poseen las seales de trfico pueden aprovecharse para sacar
expresiones tiles en el clculo de sus contornos, mediante descriptores de bordes.
x El hecho de que la seal est girada (entendindose giro como una rotacin sobre el
eje del poste que la sostiene, produciendo una distorsin de perspectiva) afecta
mnimamente a las propiedades de simetra de la seal, y en el peor caso podr
corregirse normalizando el ancho o el alto de la ROI.
x La seal triangular posee simetra en dos de sus lados opuestos, y es asimtrica en
los otros dos. Ntese que esta simetra viene dada o bien en los descriptores L-R o
bien en los descriptores T-B, pero nunca en ambos. Esta simetra se ve ligeramente
afectada por la perspectiva de la seal, y ser necesario establecer un umbral de
variacin.
x La seal rectangular posee simetra en todos sus lados, dos a dos (L-R y T-B),
aunque esta simetra se aplica de forma inversa. Esto hace que, en un caso ideal se
cumpla que L1=R3, L2=R2, L3=R1, T1=B3, T2=B2, T3=B1.
x La seal circular posee simetra en todos sus lados, dos a dos (L-R y T-B), aunque
esta simetra se aplica de forma inversa. Esto hace que, en un caso ideal se cumpla
que L1=R3, L2=R2, L3=R1, T1=B3, T2=B2, T3=B1. Tambin se cumple en todos los
casos que los descriptores tienen valores pequeos o cercanos a cero. Adems, el
rea de la seal con respecto al total suele estar por encima del 70% y por debajo
del 85%.

Con estas conclusiones, y haciendo uso de las simetras mencionadas, se han establecido
las siguientes expresiones que determinan la forma de una seal.

FORMA EXPRESIN DESCRIPCIN

( Li  Ti )  ( Ri  Bi) | 0
3 3 3 3
Condicin de simetra inversa.
Indica que la suma de los descriptores L-T
es aproximadamente igual a la suma de
1 1 1 1
los R-B.

At  70% or At ! 85%
El rea total de la seal con respecto a la
ROI es menor al 70% o mayor que el
85%, rango en donde se encuentra el
rea del crculo.

si 70%  At  85% entonces Si el rea de la seal con respecto al total


(T 1  B3  R1  L3) !! (T 3  B1  R3  L1)
es similar a la del crculo, se evalan los


descriptores extremos para detectar un
OR giro de la seal. La primera expresin
(T 1  B3  R1  L3)  (T 3  B1  R3  L1)
establece un giro en el sentido antihorario.
La segunda en sentido horario.

( Li  Ti )  ( Ri  Bi) | 0
3 3 3 3
Condicin de simetra inversa.
Indica que la suma de los descriptores L-T
es aproximadamente igual a la suma de
1 1 1 1
los R-B.

70%  At  85%
El rea total de la seal con respecto a la
ROI es mayor al 75% y menor al 85%.

(T 1  B3  R1  L3) | (T 3  B1  R3  L1) La suma de los descriptores extremos


inversos es similar.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 185


Captulo 6. Reconocimiento de seales de trfico

( Li  Ti )  ( Ri  Bi ) !! 0
3 3 3 3

1 1 1 1 Condicin de asimetra.

( Li  Ti )  ( Ri  Bi )  0
OR Indica que la suma de los descriptores L-T
3 3 3 3
es diferente a la suma de los R-B.
1 1 1 1

Li | Ri
3 3

Condicin de simetra dos a dos. La


1 1

Ti | Bi
simetra se da slo en dos de los cuatro
OR
3 3 lados de la ROI, o bien en los lados L-R o
bien en los T-B.
1 1

Tabla 6.12 Expresiones para la deteccin de la forma de la seal.

A continuacin se expondrn algunos ejemplos de inters, que intentarn explicar el por


qu de las expresiones de la Tabla 6.12. En concreto, la Figura 6.46 muestra algunos de los
resultados de la batera de pruebas que se ha realizado sobre el modelo en Matlab. Se han
creado patrones de formas de todos los tipos posibles, y posteriormente se han variado los ejes
para que no coincidieran con los de la ROI. Tambin se han distorsionado los patrones simulando
las distintas perspectivas de aparicin de la seal. Posteriormente, se han calculado sus
descriptores de borde y se han evaluado las expresiones de la Tabla 6.12.

El modelo en Matlab indica que la probabilidad de acierto es alta, siempre y cuando se


establezcan los valores umbrales correctamente. Como se puede observar, stos umbrales para
la condicin de simetra inversa (cuya expresin debe ser aproximadamente cero) varan en torno
a 20, mientras que las expresiones que implican condiciones del tipo ">>" o "<<" se establecen
entre [-250,-500] y [250, 500]. Sin embargo, es de esperar que estos umbrales sean muy
dependientes del tamao de la ROI, ya que los valores en torno a los cuales se mueven los
descriptores de borde son directamente proporcionales al ancho y al alto de la regin de inters.
Por ello, se ha credo necesario establecer valores umbrales variables.

En particular, se hace necesario establecer un umbral correcto para la condicin de simetra


inversa y la condicin de simetra dos a dos, ya que idealmente deben ser expresiones cercanas
a cero. Teniendo en cuenta la definicin de un descriptor de borde como "la distancia en pxeles
que existe desde el borde hasta el objeto", se establece su tamao mximo como:

max(Li, Ri) Ancho _ ROI  1


max(Ti, Bi) Alto _ ROI  1
Aunque se ha comprobado que, en la mayora de los casos, su tamao real es menor que
la mitad de la ROI. Por ello, se proponen los siguientes valores umbrales que junto a las
expresiones ya mencionadas, completan el modelo propuesto.

Condicin de simetra inversa:

  ( Li  Ti)  ( Ri  Bi)  
3 3 3 3
Ancho_ ROI Ancho_ ROI
8 1 1 1 1 8

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 186


6.16 Etapa de identificacin de la seal vial

Condicin de simetra dos a dos:

  Li  Ri 
3 3
Ancho _ ROI Ancho _ ROI
4 1 1 4

OR

  Ti  Bi 
3 3
Alto _ ROI Alto _ ROI
4 1 1 4

Debido a la proporcin entre el ancho y el alto de una seal de trfico en condiciones


normales (entre 0.80 y 1.20), se podra considerar, sin prdida de generalidad, que:

Alto _ ROI | Ancho _ ROI


Estableciendo de esta forma un umbral que slo depende de una de las proporciones de la
ROI (la ms grande por ejemplo). En este Proyecto Fin de Carrera se ha utilizado el ancho de la
ROI como medida del umbral.

Figura 6.46. Ejemplos de las expresiones que determinan la forma de las seales viales.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 187


Captulo 6. Reconocimiento de seales de trfico

Para demostrar que, efectivamente, las reas que ocupan las seales dentro de su ROI son
las indicadas en la Tabla 6.12, se toman en cuenta las siguientes situaciones ideales y sus
expresiones. Todas las desviaciones sobre estos valores originales tendrn su causa en la
rotacin y giro de la seal dentro de la ROI, aunque permanecen acotadas dentro de un rango
estable, debido a que la ROI tambin se adapta a los bordes de la seal cuando sta no est
alineada con los ejes de la ROI.

Figura 6.47. Relaciones del rea de diferentes formas con respecto a la ROI que las contiene.

As mismo, se han elegido los vectores de bordes de tres valores por cada uno de los
vectores L, R, T, B, por los siguientes motivos:

x Las divisin de la ROI en 16 partes iguales se ha considerado suficiente para hallar


la forma de la seal con buenos resultados.
x La divisin del ancho y el alto de la ROI en cuatro partes implica hacer uso de
divisiones en potencias de 2, cuya implementacin en FPGA es ms eficiente que
otro tipo de divisiones.
x Las expresiones de la Tabla 6.12 se haran mucho ms difciles de evaluar con ms
de tres valores, no compensando esta dificultad con un mejor resultado.
x El clculo del rea de la seal con respecto al total es un discriminante adecuado
para aquellas situaciones en las que los descriptores son inconcluyentes.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 188


6.16 Etapa de identificacin de la seal vial

Las posiciones de los doce puntos de los descriptores alrededor de la ROI siguen las
siguientes expresiones, donde (x0,y0) (xf,yf) son las coordenadas de la ROI que contiene la seal.

x x0

Li : y f  y0
yi y0  i i 1,2,3
4
x x f

Ri : y f  y0
yi y0  i i 1,2,3
4
x f  x0
xi x0  i i 1,2,3
Ti :
y y f
4

x f  x0
x x0  i i 1,2,3
Ti : i
y
4
yf

Estas posiciones se aprecian en la Figura 6.45.

Se ha comprobado que este sistema funciona bien en la mayora de los casos, incluso
cuando las seales se encuentran giradas o rotadas. Sin embargo, existe una situacin en la cual
el sistema es ms sensible al error, pudiendo resultar en una mala identificacin. ste caso, que
es el ms desfavorable, se da para seales circulares que presentan una distorsin de
perspectiva considerable, donde la proporcin entre el ancho y el alto de la ROI est sobre 0.55-
0.65. Esta situacin particular puede llevar al sistema a confundir la seal circular con una
rectangular con ngulo de giro tal que su rea sobre la ROI est alrededor del 75%. Esta
situacin se ilustra en la Figura 6.48.

Figura 6.48. Identificacin de forma errnea para una seal circular distorsionada por la perspectiva.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 189


Captulo 6. Reconocimiento de seales de trfico

En un principio se podra indicar que el sistema realiza una buena identificacin de la forma
de la seal siempre y cuando la distorsin de sta no haga decaer la proporcin alto/ancho de la
ROI por debajo de cierto umbral. Sin embargo, con una batera de pruebas realizada en Matlab
se ha demostrado que este caso se puede solucionar sin ms que aadir una condicin adicional
sobre los descriptores R1-L3 (R3-L1 en caso de un giro en el sentido contrario al de la figura). En
la Figura 6.48 se puede observar que estos descriptores son pequeos en el caso de la seal
rectangular, debido a las esquinas, y crecen en el caso de la seal circular. Esta condicin se ha
aadido al sistema, y se evala slo en la situacin particular comentada anteriormente, que es
donde cobra importancia.

Tambin es necesario mencionar que las expresiones para las seales circulares se aplican
sin mayor dificultad para la seal octogonal de "STOP".

Por ltimo, cabe destacar que si la ROI analizada no cumple ninguna de las caractersticas
de la Tabla 6.12, se considera que no contiene una seal de trfico, y el sistema rechaza esta
ROI como candidata (esto no ocurrir en la tercera clasificacin, como se ver ms adelante).

Figura 6.49. Descriptores funcionando en tiempo real con una maqueta de la seal R101 "Direccin prohibida".

6.16.3.5 Tercera clasificacin: discriminacin por pictograma


La tercera y ltima etapa de clasificacin se llevar a cabo en el caso de que el color y la
forma no sean caractersticas concluyentes para identificar la seal de trfico. Esto ocurre cuando
existe ms de una seal con los mismos colores y la misma forma, como por ejemplo las seales
de lmites de velocidad, que nicamente se diferencian en el pictograma de su interior.

Ntese la importancia que tiene esta ltima etapa de clasificacin en el resultado total del
sistema, as como su complejidad de implementacin, tomando como ejemplo las seales de
lmite de velocidad de la Figura 6.50. En dicha figura, se han cubierto las zonas clave de las
seales para hacer nfasis en la dificultad existente a la hora de identificar seales cuya similitud
es tan alta. En concreto, las diferencias que discriminan entre unas seales y otras se concentran
en apenas el 1-2% del rea total de la seal. Un mnimo error en el anlisis de estas zonas de la
seal, en cualquier etapa del sistema, resultar inevitablemente en una mala identificacin, con
las consecuencias que esto supondra en un sistema real.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 190


6.16 Etapa de identificacin de la seal vial

Por ello, esta ltima etapa debe ser lo ms robusta y eficiente posible.

Figura 6.50. Las diferencias entre las seales de lmite de velocidad suelen estar en torno al 1.5% del total.

La gran mayora de estudios realizados en el reconocimiento de seales de trfico propone,


para la identificacin del pictograma de la seal, la comparacin con patrones almacenados en
memoria, o bien del pictograma completo [99], o bien de su contorno [133] [156], o bien
dividiendo la seal en varias regiones independientes antes de la comparacin [119].

El mtodo propuesto en [157] clasifica las seales de lmite de velocidad utilizando una
matriz de tamao fijo de 5x7 pxeles, donde se "vuelcan" los pxeles del primer nmero
encontrado (El otro nmero siempre es cero). Posteriormente, se analiza esta matriz y se
compara con una base de datos almacenada en memoria, utilizando para ello redes neuronales.
Este mtodo slo clasifica imgenes de prueba y an no se ha probado en imgenes reales.

En [143] se propone un mtodo que concatena las lneas de pxeles de un pictograma


hallado (previo alineamiento de los ejes), y se calculan los primeros 105 coeficientes de la DCT
de una sola dimensin (Discrete Cosine Transform, o transformada del coseno discreta) que son
comparados con una base de datos.

Otro mtodo interesante es propuesto por Wen-Yen Wu, Tsung-Cheng Hsieh y Ching-Sung
Lai en [135], donde se utilizan las proyecciones de los pictogramas sobre los ejes verticales y
horizontales de la imagen (previo alineamiento de los ejes) para reconocer el smbolo, y usa los
valores picos de dichas proyecciones como caractersticas para la identificacin. ste mtodo, a
pesar de ser capaz de identificar un numeroso abanico de seales, establece que en algunos
casos pueden existir dos seales diferentes con los mismos valores, y por tanto se requiere un
segundo anlisis que el estudio no abarca.

En este Proyecto Fin de Carrera se propone un mtodo para extraer caractersticas de


inters del rea central de la seal, donde se halla el pictograma. En un principio, se model un
algoritmo basado en la deteccin de pxeles de contorno de los pictogramas, y la extraccin de
dos caractersticas numricas basadas en una mscara de actuacin horizontal y otra vertical.
Este mtodo ha resultado ser poco eficiente, sobre todo en las seales de lmite de velocidad, y
su desarrollo se ha obviado en este documento por dicha razn.

Finalmente se opt por tomar, como referencia base, el trabajo realizado por Hasan Irmak
en [126], adaptndolo a las necesidades de este Proyecto Fin de Carrera, y modificando algunas
de sus caractersticas para adecuarlas a las etapas previas de clasificacin.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 191


Captulo 6. Reconocimiento de seales de trfico

En Particular [126] propone la clasificacin final de la seal vial basada en un mtodo


llamado "IPP Matching", consistente en la divisin de la ROI en diferentes regiones, que se
utilizarn para hallar el porcentaje de pxeles de inters con respecto al rea de cada regin. Esta
cantidad numrica se conoce como IPP (Informative Pixel Percentage).

Una vez obtenidos los IPP de todas las regiones, se compara con unos valores
almacenados en una memoria utilizando el mtodo SAD (Sum of Absolute Difference, Suma de
la diferencia absoluta), que es un mtodo comnmente utilizado para evaluar en qu medida
dos matrices (o imgenes en este caso) se parecen entre s.
Recurdese que en la etapa anterior, se tuvieron que calcular la posicin de doce
descriptores de borde (tres por cada lado), que dividan la ROI completa en diecisis regiones
iguales. Por lo tanto, se pueden aprovechar estos valores y utilizarlos en esta etapa, sin necesitar
dividir la ROI nuevamente (Figura 6.51). Con estos valores, se ha decidido dividir la zona central
de la ROI en cuatro regiones o cuadrantes donde, con toda probabilidad, se concentra la mayor
parte del pictograma de la seal. Estas zonas sern aquellas delimitadas por los descriptores T1-
T3, L1-L3, R1-R3 y B1-B3, como se aprecia en la Figura 6.51.

Figura 6.51. Calculo de las cuatro regiones de inters delimitadas por los descriptores de borde.

Una vez halladas las IPP de cada regin, el algoritmo comparar esta cantidad con los
valores almacenados en memoria. Aquel que minimice el SAD ser el candidato ms probable. El
Clculo del SAD se realiza con la siguiente expresin. Dadas dos matrices NxM con
componentes enteros positivos, se calcula el SAD como:

AMxN
BMxN
SAD a11  b11  a12  b12  a13  b13  ...  a1n  b1n  a21  b21  ...  amn  bmn

Esta cantidad da una medida de la similitud existente entre las matrices A y B, siendo un
nmero entero y positivo. Tmese como ejemplo prctico el ilustrado en la Figura 6.52.

Figura 6.52. Calculo de la SAD para dos matrices 3x3

En el caso del sistema de clasificacin del pictograma de la seal vial, el SAD se calcula en
base a cuatro IPPs, por lo cual sera similar a comparar dos matrices de tamao 2x2. Ntese que,
en definitiva, cada seal vial estara definida por cuatro valores numricos. Esto hace que la

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 192


6.16 Etapa de identificacin de la seal vial

cantidad de datos almacenados en memoria sea reducida, y al mismo tiempo permite aadir sin
mayor dificultad nuevas seales al conjunto de seales viales a identificar.

Para calcular los IPPs, se ha programado un algoritmo en Matlab que, tras dividir la zona
central de la ROI en cuatro cuadrantes, calcula la proporcin de pxeles de informacin con
respecto al rea total. Esto se ha realizado para todas las seales de inters, creando as una
base de datos numrica que posteriormente ser almacenada en una memoria ROM.

Sin embargo, es necesario destacar que existe una gran diferencia entre [126] y la cadena
de procesado de este Proyecto Fin de Carrera. En particular, el trabajo mencionado
anteriormente calcula las IPPs de la seal una vez se han alineado los ejes de la misma con los
de la ROI que la contiene. ste detalle asegura que el clculo de las IPPs de una seal dada
debe tener una coincidencia alta con su valor almacenado en memoria, ya que el pictograma se
espera que est siempre en la misma posicin, y por tanto sus IPPs sern siempre las mismas.
Desgraciadamente ste no es el caso para el sistema que se ha diseado, ya que no posee un
bloque de alineacin de coordenadas.

Para ilustrar este inconveniente, ntese cunto varan las IPPs para una seal especfica,
cuando aparece rotada en diferentes ngulos (Figura 6.53).

Figura 6.53. Variacin de los IPPs con la rotacin de la seal.

Ntese el esfuerzo realizado en etapas previas para hacer un sistema invariante a la


rotacin y el giro de las seales dentro de la ROI. Todo ese esfuerzo resultara en vano si la
ltima etapa de clasificacin fuera incapaz de identificar la seal a menos que sta estuviera
alineada. Por ello, cabe preguntarse si es posible modificar el mtodo propuesto por [126] para
hacer frente a este inconveniente.

Teniendo en cuenta que es posible almacenar la informacin de un pictograma en tan slo


cuatro nmeros, se ha propuesto ampliar esta cantidad a 32 valores, que almacene la
informacin del mismo pictograma en diferentes ngulos de giro en incrementos de 15. As, se
obtendran ocho grupos de cuatro IPPs, cada una de ellas extradas del mismo pictograma, pero
en diferentes giros, siendo la comparacin y el clculo de la SAD ms eficiente ante seales
rotadas.

Los ngulos de giro propuestos se presentan en la Figura 6.54. Con estas nuevas medidas
no slo se proporciona un mtodo capaz de identificar un pictograma en seales con giros de
entre -65 y 45, sino que adems se ha comprobado que la variacin de los IPPs de una muestra
a otra es lo suficientemente progresiva para que el sistema sea capaz de calcular correctamente
el SAD y por ello el candidato ms probable.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 193


Captulo 6. Reconocimiento de seales de trfico

Figura 6.54. Clculo de IPPs para diferentes ngulos de giro de la seal.

Con todo lo expuesto anteriormente, el algoritmo implementado se resume en los siguientes


puntos.

x Se calcula el rea de cada cuadrante (por lo general, ser el mismo valor para las
cuatro regiones).
x Se calcula la IPP de cada cuadrante como el porcentaje de pxeles de informacin
con respecto al total del cuadrante, obteniendo cuatro valores finales.
x Se implementa un algoritmo de comparacin con una base de datos de valores.
Aquel valor que minimice el SAD, ser el candidato elegido como ms probable, y la
seal identificada que corresponde ser sacada a la salida del bloque.

6.16.4 Diagrama de bloques

El diagrama de bloques que realiza la clasificacin por color, forma y pictograma se muestra
en la Figura 6.55. Esta estructura est instanciada ocho veces (A excepcin de la salida "Vdeo
Debug"), una por cada ROI posible, realizando la identificacin de la seal en paralelo.

Figura 6.55. Diagrama de bloques de la etapa de identificacin de la seal.

A continuacin se detallan brevemente los bloques de la Figura 6.55, dejando la


descripcin del funcionamiento completo para el siguiente apartado.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 194


6.16 Etapa de identificacin de la seal vial

Detector de interior de seal Zero-Crossing. Realiza las tareas una lnea por delante de
la etapa decisora, y calcula dnde comienza y dnde termina la seal de trfico dentro de su ROI.
Este procedimiento evita una mala identificacin al segmentar errneamente los pxeles de fondo.
En cada lnea, enva a la etapa decisora el nmero de cruces por cero detectados y qu color es
el activador (rojo o azul), tal y como se especific en apartados anteriores.

Etapa decisora. Realiza en paralelo la toma de datos correspondientes a las tres


clasificaciones, es decir, la clasificacin por colores, por formas y por pictograma. Una vez se han
tomado todos los datos y el fotograma ha concluido, se inicia una mquina de estados en la cual
se recopilan los datos, se evalan y se escoge el candidato ms probable, que ser codificado y
enviado a la salida.

Memoria ROM IPPs. Memoria que contiene los IPPs de las seales, tal y como se explic
en apartados anteriores. Es accedida por la etapa decisora para encontrar los valores que
minimicen el SAD.

Clculo de ganancia de segmentacin. Inicialmente el clculo de la ganancia de la


componente roja para la segmentacin (a travs de las expresiones vistas en la Seccin 6.12.3)
se realizaba en el mismo bloque de identificacin. Posteriormente, para ahorrar recursos de la
FPGA y para cumplir con las restricciones temporales, este clculo se implement en un bloque
exterior, comn a todas las instancias decisoras que trabajan en paralelo. De esta forma se evita
tener que realizar el mismo clculo 8 veces.

Las seales de configuracin especifican las ganancias y umbrales de segmentacin. As


mismo, la salida denominada como "Vdeo Debug" slo aparecer en la ROI_1, y ser utilizada
para tareas de y depuracin y visualizacin del proceso en tiempo real.

6.16.5 Descripcin del bloque

La Tabla 6.13 muestra la descripcin de la entidad de nivel superior del bloque de


identificacin de la seal de trfico. Este bloque recibe un pxel nuevo en cada ciclo de reloj. En
cada flanco de subida de la seal de reloj se inicia un proceso en el cual el pxel es analizado y
segmentado, contribuyendo posteriormente, si procede, a incrementar alguno de los contadores
de caractersticas del sistema. El bloque de deteccin del interior de la seal basado en el filtro
Zero-Crossing realiza las siguientes operaciones:

x Recibe los pxeles uno a uno, una lnea por delante del resto de bloques.
x Cuando llega un pxel nuevo, analiza si ste pertenece a la ROI, y en caso afirmativo,
se inicia un mtodo de segmentacin por color rojo, azul, blanco, negro o fondo. La
segmentacin es configurable por software, as como los umbrales.
x Seguidamente, se aplica la mscara de vecinos de la Figura 6.40, que no es ms
que un registro de desplazamiento de seis posiciones donde se van almacenando los
segmentos de las etapas anteriores.
x Si todos los segmentos de la mscara son rojos (o azules para una seal azul),
excepto el actual, se considera que se ha producido un cruce por cero, y se
incrementar un contador.
x Si el ltimo pxel de la ROI es un pxel rojo (o azul para una seal azul), se
incrementar dicho contador en uno.
x Una vez finalizada la lnea, el bloque enva a la salida el nmero de cruces por cero
detectados en la lnea (en realidad, la parte de la lnea que pertenece a la ROI)

Este nmero ser usado por la etapa decisora para saber si un pxel pertenece o no al
interior de la seal de trfico.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 195


Captulo 6. Reconocimiento de seales de trfico

IDENTIFICACIN DE LA SEAL VIAL

Nombre del
decisor_signals.vhd / decisor_signals_debug.vhd
fichero

Realiza la tercera etapa del sistema, identificando la seal vial en tres


Descripcin clasificaciones que se realizan en paralelo: por color, por forma y por
pictograma.
entity etapa_decisora is
generic (
C_XSVI_DWIDTH : integer := 24;
C_FAMILY : string := "spartan6";
C_BITS_X : integer := 11;
C_BITS_Y : integer := 10;
C_UMBRAL_BLANCO : integer := 360;
C_UMBRAL_NEGRO : integer := 120);
Port (
clk : in STD_LOGIC;

tipo_segmentacion : in std_logic_vector(0 to 2);


seg_umbral_rojo : in std_logic_vector(0 to 5);
seg_umbral_diff : in std_logic_vector(0 to 5);

active_video_in_bypass : in STD_LOGIC;
hblank_in_bypass : in STD_LOGIC;
vblank_in_bypass : in STD_LOGIC;
hsync_in_bypass : in STD_LOGIC;
vsync_in_bypass : in STD_LOGIC;
video_data_in_bypass : in STD_LOGIC_VECTOR ((C_XSVI_DWIDTH-1) downto 0);

active_video_out : out STD_LOGIC;


Entidad hblank_in_out : out STD_LOGIC;
vblank_in_out : out STD_LOGIC;
hsync_in_out : out STD_LOGIC;
vsync_in_out : out STD_LOGIC;
video_data_out : out STD_LOGIC_VECTOR ((C_XSVI_DWIDTH -1) downto 0);

hblank_in_line_ant : in STD_LOGIC;
vblank_in_line_ant : in STD_LOGIC;
video_data_in_line_ant : in STD_LOGIC_VECTOR (C_XSVI_DWIDTH-1 downto 0);

video_data_out_d : out STD_LOGIC_VECTOR ((C_XSVI_DWIDTH -1) downto 0);

eje_x : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);


eje_y : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
eje_x_ant : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
eje_y_ant : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);

xi1_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);


xf1_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi1_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf1_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);

signal_detectada : out STD_LOGIC_VECTOR(8 downto 0));


end etapa_decisora;
Descripcin de puertos y generics

clk Seal de reloj de vdeo a 74.25 Mhz

tipo_segmentacion
Seales de configuracin del tipo de segmentacin, as como el
seg_umbral_rojo
establecimiento por software de los parmetros u_rojo y u_diff.
seg_umbral_diff

<video>_in Entrada del flujo de vdeo original (datos y sincronismo).

<video>_out Salida del flujo de vdeo para debug (datos y sincronismo).

<video>_line_ant Flujo de vdeo retrasado una lnea.

eje_x, eje_y Coordenadas en el contexto del flujo de vdeo, tanto en la lnea

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 196


6.16 Etapa de identificacin de la seal vial

eje_x_ant, eje_y_ant actual como en la lnea retrasada.

xi1_in, xf1_in,
Par de puntos (xi,yi), (xf,yf) que determinan la regin de inters que
yi1_in, yf1_in
se analizar.

Seal de salida que contiene de forma codificada la seal


signal_detectada
identificada.

C_UMBRAL_BLANCO Umbrales fijos establecidos para la segmentacin del color blanco y


C_UMBRAL_NEGR el color negro.
Tabla 6.13. Bloque decisor_signals.vhd

El funcionamiento de la etapa decisora es complejo, y se resumir su funcionamiento en los


siguientes prrafos, ilustrndolo tambin con los diagramas de flujo de las Figuras 6.56 y 6.57.

x Al inicio del fotograma, se calculan parmetros de inters como el rea total de la


ROI normalizada (ms adelante se explicar esta normalizacin), las posiciones (x,y)
correspondientes a los descriptores de borde que dividen la ROI en diecisis partes
iguales, o el rea normalizada de los cuatro cuadrantes centrales donde se realizar
el clculo de las IPP.
x As mismo, al principio de cada lnea se rescatan valores como el nmero de cruces
por cero de esa lnea proporcionado por el bloque anterior, y se pone a cero una
bandera llamada interior_seal.
x Cuando llega un nuevo pxel al bloque se evala si pertenece a la ROI. En caso
afirmativo el algoritmo contina. En caso contrario, ste finaliza.
x Seguidamente se utilizan los mtodos ya vistos de segmentacin para clasificar el
pxel actual dentro de uno de los segmentos de color rojo, azul, blanco, negro o
fondo. Para ello, se hace uso del parmetro calculado previamente con el filtro Zero-
Crossing. El algoritmo utilizado es el siguiente.
Si la bandera interior_seal esta inactiva, se considera que an no se ha
llegado a la regin de pxeles que estn dentro de la seal, por lo cual el
pxel actual slo puede ser de fondo, o en todo caso rojo (azul para seales
azules), suponiendo que se est frente a un borde de la seal.
Seguidamente, se aplica nuevamente la mscara de la Figura 6.40. Si se
encuentra un borde de la seal (es decir, los pxeles anteriores han sido
segmentados como rojos, o azules en caso de una seal azul, y el pxel
actual no es ni rojo ni azul), entonces se considera que se ha entrado en la
regin interior de la seal, y la bandera interior_seal se activa mientras
que el nmero de cruces por cero sea mayor o igual que uno.
A partir de ese momento, la segmentacin de cada pxel puede incluir no
slo el fondo, el rojo y el azul, sino tambin el blanco y el negro.
Mientras el sistema considere que los pxeles que llegan pertenecen al
interior de la seal (a travs de la bandera interior_seal), se evalan todos
los nuevos cruces por cero, que puedan indicar el final de la seal.
Cada nuevo cruce por cero har que se decremente el contador de cruces
total, calculado en bloques anteriores.
El interior de la seal termina cuando se ha llegado al ltimo cruce por
cero, y por tanto, todo el resto de la lnea ser segmentado como pxeles
de fondo.
x Una vez segmentado el pxel actual (slo pxeles interiores a la seal), se toma el
segmento al que pertenece para incrementar un contador de pxeles totales, utilizado

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 197


Captulo 6. Reconocimiento de seales de trfico

ms adelante para la primera clasificacin de la seal, por sus colores. Estos


contadores sern evaluados posteriormente para decidir si la seal es "roja y
blanca", "roja, blanca y negra", etc..
x As mismo, se calcula en tiempo real la proporcin de pxeles de seal con respecto
al rea total de la ROI para la clasificacin por forma.
x Seguidamente, se inicia un proceso por el cual se calcula si el pxel actual pertenece
o no a alguna de las posiciones de los descriptores de borde. En caso afirmativo, se
vuelve a evaluar el segmento al cual pertenece el pxel y si es de fondo, se
incrementa el contador del descriptor correspondiente (poniendo a cero aquel que se
encuentra en el lado contrario). Para detectar fielmente cuando se ha llegado al
borde de la seal, y por tanto dejar de incrementar el descriptor correspondiente, se
utilizan unas mscaras de pxeles verticales (para T-B), u horizontales (para L-R) que
indican cuando ha habido varios pxeles consecutivos fuera del segmento de fondo.
Esto se repite para todos los descriptores, obteniendo finalmente un valor numrico
para cada uno de los Li, Ri, Ti, Bi.
x Finalmente, se identifica si el pxel actual pertenece a alguno de los cuatro
cuadrantes interiores de la ROI, y en caso afirmativo se evaluar el segmento al cual
pertenece. En caso de ser blanco o negro, se incrementar un contador, y se
calcular la proporcin de pxeles blancos o negros sobre el total del rea del
cuadrante. Ntese que los pxeles blancos y negros se cuentan por separado, ya que
no siempre ambos se consideran pxeles de inters. Por ejemplo los pxeles de
inters en una seal de lmite de velocidad son negros (los blancos son de fondo), y
sin embargo en una seal azul de direccin obligatoria, los pxeles del pictograma
son de color blanco. Este recuento se utiliza para hallar los IPPs de cada cuadrante
que posteriormente sern evaluados.
x Adicionalmente, para la ROI_1, se enva por la salida un flujo de datos para visualizar
la segmentacin y los descriptores de borde en tiempo real.

Una vez finalizada la etapa de adquisicin de datos, que se realiza ciclo a ciclo en tiempo
real, es necesario esperar al periodo de blanking vertical existente entre fotogramas para evaluar
los datos obtenidos y finalmente decidir qu seal de trfico hay dentro de la ROI (si es que
existe alguna). Una vez llegado el espacio de blanking vertical, se inicia una mquina de estados
que proceder de la siguiente manera.

x En primer lugar se calculan algunos parmetros umbrales que dependen del ancho,
del alto, o del rea de la ROI. Estos umbrales se utilizan para decidir qu colores
tiene la seal, o para evaluar las expresiones de la Tabla 6.12.
x Seguidamente, se calculan las expresiones de la Tabla 6.12, con los valores Li, Ri,
Ti, Bi obtenidos previamente.
x En el siguiente paso se utilizan los umbrales calculados y se evalan los contadores
de color utilizados en la segmentacin. Con ello se decide qu colores tiene la seal.
En caso de que el objeto dentro de la ROI no cumpla las caractersticas de color de
ningn grupo de seales, se considerar que la ROI no contiene ninguna seal vial.
x A continuacin se comparan las expresiones de la Tabla 6.12 con sus umbrales
correspondientes, y se decide la forma que tiene la seal. En caso de no cumplirse
ninguna de las condiciones de forma, se considerar que la ROI no contiene ninguna
seal de trfico. En caso contrario, el algoritmo registrar una "seal vial detectada
pero an no identificada".
x En el siguiente paso se inicia un proceso por el cual se detectar el pictograma de la
seal, con las IPPs obtenidas.
En primer lugar, el algoritmo decide qu color resulta de inters en la
evaluacin del pictograma, atendiendo a los colores de la seal. As por
ejemplo, una seal "roja-blanca-negra" tendr el pictograma de color negro,
y una seal "azul-blanca" tendr su pictograma de color blanco.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 198


6.16 Etapa de identificacin de la seal vial

A continuacin se evala la forma de la seal. Si sta forma es concluyente


para decidir la seal de trfico de la ROI, el algoritmo registrar una "seal
vial detectada e identificada" y sacar por la salida su cdigo codificado,
finalizando el algoritmo. En caso de que la forma no sea concluyente para
identificar la seal, se iniciar la evaluacin del pictograma.
Para la evaluacin del pictograma, se accede a la memoria ROM, con un
offset que se obtiene a partir del color de la seal. As, el offset puede
apuntar al "grupo de seales rojas-blancas-negras" o al grupo de seales
"azules-blancas", segn el color identificado anteriormente.
Una vez se accede al grupo correspondiente de valores en la ROM, se
rescatan una a una las matrices 2x2 de IPPs. Cada una de estas matrices
es comparada con las IPPs obtenidas de la ROI, segn el mtodo SAD.
Existe un registro que almacenar las IPPs que minimicen el SAD. En la
primera iteracin, se almacena en este registro las IPPs obtenidas de la
primera posicin de la ROM y se marcan como "las ms pequeas".
En las siguientes iteraciones, si se encuentra un SAD menor, se
sobrescribe el valor anterior por el nuevo, y se contina el proceso.
Cuando se ha accedido a todo el grupo correspondiente de la memoria
ROM, el registro tendr las IPPs que minimicen el SAD.
Estas IPPs se analizan, y su posicin dentro del grupo en la ROM ser el
parmetro que indique a qu seal de trfico pertenece.
x Una vez identificada la seal, se marca la salida del bloque como "seal encontrada
e identificada" y se enva el cdigo de la seal al siguiente bloque.
x Finalmente, se reinician las seales y variables utilizadas en todo el proceso y se
espera al siguiente fotograma.

6.16.5.1 Datos almacenados en la ROM


La memoria ROM almacena las IPPs de las seales tal y como se describi con
anterioridad. Esta memoria almacena los cuatro nmeros correspondientes a las IPPs de una
seal vial en cada una de sus filas. Las IPPs de cada cuadrante se codifican con 6 bits de datos,
obteniendo un rango de [0-63]. Esto implica que, en total, se necesitan 24 bits para almacenar las
IPPs de una seal de trfico con una rotacin dada.

Por otro lado, como se coment anteriormente, en el modelo en Matlab se extrajeron las
IPPs de cada seal en ocho grupos, cada uno de ellos correspondientes a un giro en incrementos
de 15 (Figura 6.54).

En total, la informacin extrada para una sola seal ocupa un espacio de 192 bits (24x8
bits). La memoria ROM almacena solamente los datos de aquellas seales que requieren un
anlisis del pictograma, es decir, aquellas cuyo color y forma no son concluyentes para asegurar
una correcta identificacin.

El nmero de seales (de entre las 16 que comprenden el conjunto total) que requieren de
un anlisis del pictograma es de 11 seales de trfico, obteniendo as una ROM de 2.112 bits
(88x24 bits), con una seal de direccionamiento de 7 bits y una celda de 24 bits de anchura.

Por ltimo, cabra preguntarse por qu el nmero almacenado para cada IPP tiene tan solo
un rango [0-63], siendo que un IPP almacena un porcentaje de pxeles de informacin til, cuyo
valor debera estar entre [0-100]. La respuesta a esta pregunta se ver a continuacin, donde se
explicarn los mtodos utilizados para el clculo de reas y proporciones.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 199


Captulo 6. Reconocimiento de seales de trfico

Figura 6.56. Diagrama de flujo de la etapa decisora.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 200


6.16 Etapa de identificacin de la seal vial

Figura 6.57. Mquina de estados de la etapa decisora.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 201


Captulo 6. Reconocimiento de seales de trfico

6.16.5.2 Clculo de reas normalizadas y proporciones


Con el objetivo de optimizar el uso de los recursos de la FPGA ante las operaciones de
divisiones con datos variables, se propone un mtodo para el clculo de proporciones que utiliza
una divisin por una potencia de dos una nica vez, y dos contadores que se incrementan tan
solo una unidad por ciclo de reloj. Este mtodo realiza un recuento en tiempo real de los datos de
inters, formando la proporcin a lo largo del fotograma, para as estar lista en el espacio de
blanking vertical, donde ser utilizada.

Este mtodo se ha utilizado en el clculo de las proporciones de los pxeles de la seal vial
con respecto al rea total de la ROI que la contiene, utilizado en la clasificacin por forma de la
Tabla 6.12. Tambin se ha utilizado para el clculo de las IPPs, que no es ms que una
proporcin entre los pxeles de informacin de cada cuadrante con respecto al rea total del
mismo.

Tmese como ejemplo la seal de trfico contenida en la ROI cuya proporcin se muestra
en la Figura 6.58.

Figura 6.58. Porcentaje de pxeles de la seal con respecto al total de la ROI.

El clculo realizado para llegar a la siguiente proporcin es el siguiente.

u 100 u 100
Pxeles _ de _ seal 78279
Ancho _ ROI u Alto _ ROI
A% 53%
147696

Sin embargo, la multiplicacin por 100 para obtener el porcentaje es, al fin y al cabo, una
cantidad arbitraria establecida por convenio, cuyo uso est justificado en base a la mejor
comprensin que tiene el ser humano del sistema decimal. En un principio, se podra eliminar
esta cantidad, convirtiendo la proporcin en un nmero fraccionario entre [0-1], pero obligara al
sistema a trabajar con nmeros decimales en punto fijo o flotante.

Por ello, se propone la siguiente solucin. Tmese Pn, un coeficiente de normalizacin


arbitrario cuya nica restriccin es que debe ser un entero positivo potencia de 2. El clculo de la
proporcin anterior quedara modificado de la siguiente forma.

u Pn Ap [0  Pn ]
Pxeles _ seal Pxeles _ seal Pxeles _ seal
Ap
Area _ ROI Area _ ROI Anormalizada
Pn

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 202


6.16 Etapa de identificacin de la seal vial

Donde se ha establecido un nuevo parmetro llamado "rea normalizada", que no es ms


que la divisin del rea de la ROI por Pn, siendo Pn un nmero potencia de dos.

Con esta ltima expresin, se podra crear un algoritmo que calcule Ap de la siguiente
forma:

x Se halla el rea de la ROI (una vez).


x Se calcula el rea normalizada dividiendo este valor por Pn (una vez).
x Si el pxel actual pertenece a la seal pxeles_seal ++;
x Si pxeles_seal == Area_normalizada Ap ++; pxeles_seal = 0;

Obsrvese ste algoritmo en conjunto con la expresin arriba indicada para ver que, como
resultado al final del fotograma, Ap contendr el valor de la proporcin total de la seal con
respecto a la ROI.

Estrictamente hablando, el algoritmo indicado posee una diferencia con respecto a la


ecuacin utilizada. Ntese que en la expresin, Ap puede valer cualquier fraccin entre [0-Pn],
mientras que en el algoritmo implementado, el conjunto de valores posibles para Ap viene dado
por cualquier nmero entero que est entre [0-Pn]. Por ello, la expresin que define el algoritmo
utilizado es:


Pxeles _ seal Pxeles _ seal
Ap =  [0  Pn ]
Anormalizada
Ap _ implem

Area _ ROI
Pn

Como ejemplo, si se toma Pn=256, se obtiene la siguiente proporcin para la seal de


trfico de la Figura 6.58.


Pxeles _ seal 78279
147696 135
Anormalizada
A256

256
Con las siguientes expresiones se calcula la relacin que existe entre el valor de porcentaje
y Ap.

uN
Pxeles _ seal
AN

Nu
Area _ ROI
A100 AN A100
AN
u 100
100 N 100
Pxeles _ seal
A100
Area _ ROI

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 203


Captulo 6. Reconocimiento de seales de trfico

Este mtodo de clculo de proporciones se implementa de forma ms eficiente en la FPGA,


ya que tan slo se realiza una divisin a la hora de calcular el rea normalizada, y sta es una
divisin implementable con un registro de desplazamiento, al ser el divisor una potencia de 2.

Debido a las restricciones sobre el tamao mnimo que debe tener la ROI para ser
procesada, cuyo valor se vio en apartados anteriores, se han tomado los siguientes valores de
normalizacin para el clculo de las proporciones.

x Para el clculo del rea de la seal con respecto al rea de la ROI: Pn=256.
x Para la proporcin de pxeles de informacin (IPP) con respecto al cuadrante: Pn=64.

Cabe destacar que, en el caso del clculo de las IPPs, al ser Pn=64, stas variarn entre
[0-64]. Esto permite que cada IPP pueda ser codificada con 6 bits, resultando en 24 bits totales
para los cuatro cuadrantes de una seal, tal y como se vio en el apartado anterior al hablar de la
ROM de almacenamiento de IPPs.

6.16.5.3 Codificacin de la seal de salida


En varias ocasiones se ha mencionado que la salida del bloque de identificacin es un
vector que contiene los datos codificados de la seal detectada. Esta codificacin se utilizar,
entre otras cosas, para hallar el offset en la memoria ROM que contiene los carteles de las
diferentes seales viales.

La seal de salida del bloque decisor es un vector de 9 bits, y est codificada de la


siguiente forma:

seal Rango Significado Descripcin

signal_detectada 00: No existe seal en la ROI.


Cdigo de
(8 downto 7) [0-3] 01: Seal detectada pero no identificada.
identificacin
10: Seal detectada e identificada.

000: Seal del grupo "Rojo-Blanco".


001: Seal del grupo "Rojo-Blanco-Negro".
signal_detectada
010: Seal del grupo "Azul-Blanco".
(6 downto 4) [0-7] Color de la seal
011: Seal del grupo "Azul-Blanco-Negro".
100: Seal del grupo "Azul-Blanco-Rojo".
101: Seal del grupo "Azul-Rojo".

signal_detectada 00: Seal Triangular.


(3 downto 2) [0-3] Forma de la seal 01: Seal Circular / Octogonal.
10: Seal Rectangular.

00: Pictograma de informacin tipo 1.


signal_detectada
(1 downto 0) Identificacin del 01: Pictograma de informacin tipo 2.
[0-3]
pictograma 10: Pictograma de informacin tipo 3.
11: Pictograma de informacin tipo 4.
Tabla 6.14. Codificacin de la seal "signal_detectada(8 downto 0)", salida de la etapa decisora.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 204


6.16 Etapa de identificacin de la seal vial

Los motivos por los cuales la salida contiene datos codificados con las caractersticas de la
seal, en vez de tener directamente un cdigo que referencie unvocamente a una seal de
trfico, son los siguientes:

x Al tener codificado las caractersticas de la seal de trfico, otros bloques pueden


conocer exactamente qu partes de la misma se han identificado correctamente, o
en qu etapa de clasificacin se ha producido un error.
x Al separar el decodificador en un bloque independiente a la mquina de estados
decisora, se ofrece la capacidad de ampliar en un futuro el nmero de seales a
identificar, con tan solo hacer modificaciones en el decodificador.

6.16.5.4 ngulos de giro mximo y otros


Para el desarrollo de esta etapa de identificacin se ha hecho un gran esfuerzo para que
sus resultados sean invariantes al escalado, el giro y la rotacin de la seal captada por la
cmara. Tericamente, el sistema est preparado para la deteccin del color y la forma de la
seal sea cual sea su rotacin, obteniendo en el peor de los casos un resultado del tipo "Seal
[rectangular, triangular, circular] detectada, pero no identificada". Esto resulta en la invariabilidad
de los resultados ante la rotacin para las dos primeras clasificaciones. La ltima clasificacin,
que se basa en el anlisis del pictograma, permite tericamente un giro desde -65 hasta 45
sobre los ejes de la ROI. Se ha comprobado que, si las condiciones de perspectiva son buenas,
esta cantidad se ve incluso incrementada, ya que el clculo del SAD seguira teniendo su
distancia mnima en la seal correcta.

Sin embargo, cabe destacar los grandes inconvenientes que resultan del sensor de imagen
OmniVision OV9715, los cuales se vieron en la Seccin 6.5. El mayor problema a la hora de
identificar correctamente la seal es la distorsin de profundidad, producto de la lente tipo "ojo de
pez" que obliga a tener el objeto muy cerca del sensor, donde la distorsin de profundidad es un
factor dominante. Destacar que, en condiciones normales, si se utilizara una cmara
convencional y la seal de trfico estuviera situada a varios metros de distancia de la misma
(como mnimo), la distorsin de profundidad sera inapreciable, pudiendo corregir el cambio de
perspectiva con una simple normalizacin de los ejes de la ROI.

Este hecho se ilustra en la Figura 6.59, donde se muestra una seal de trfico captada por
una cmara convencional lejos del punto focal de la lente y la correccin que el sistema
implementado realiza sobre la misma, frente a una seal captada con el Sensor OmniVision
OV9715. La correccin de los ejes de la ROI no es ms que un ensanchamiento de uno de los
ejes cuando se detecta que la proporcin entre el ancho y el alto no es la correcta. Esto en
general elimina gran parte del problema de perspectiva de la seal, pudiendo posteriormente
aplicar todos los mtodos conocidos de deteccin de forma.

En particular, en el sistema implementado en este Proyecto Fin de Carrera, esta


normalizacin de la ROI viene implcita en el clculo de las reas de la ROI y de los cuadrantes
interiores, ya que todas las caractersticas calculadas dependen de estos valores; incluso los
umbrales variarn cuando estos parmetros cambien. Esto proporciona un sistema robusto frente
a la distorsin por perspectiva.

Sin embargo, ntese lo que ocurre en la Figura 6.59, cuando la seal se encuentra cercana
a la cmara. En este caso, los efectos de la distorsin de profundidad dejan de ser despreciables,
y la correccin de los ejes de la ROI no elimina en absoluto el problema. Esto supone
inconvenientes sobre todo en la deteccin de la forma y el pictograma, problemas que se han
tenido que trabajar en este Proyecto Fin de Carrera.

Se prev, sin embargo, que en un sistema real con un sensor adecuado, los efectos de
distorsin de profundidad no existan o sean despreciables, enmarcando el problema solamente al
contexto de este trabajo.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 205


Captulo 6. Reconocimiento de seales de trfico

Figura 6.59. Distorsin de profundidad para seales cerca y lejos de la cmara.

6.16.6 Problemas encontrados

Entre los problemas que se han encontrado en esta ltima etapa de identificacin, podemos
destacar:

x Se ha necesitado implementar el sistema Zero-Crossing para detectar el interior de la


seal, ante la dependencia que tena el sistema de identificar errneamente la seal
de trfico dependiendo del fondo donde se encontrara.
x El sistema presenta problemas cuando existe un conjunto de bits de color rojo en el
fondo que el mtodo Zero-Crossing no es capaz de solucionar.
x Se han hecho numerosas modificaciones en la etapa decisora, sobre todo para
adecuar correctamente las condiciones de incremento o puesta a cero de los
descriptores de borde, y hacerlas ms robustas ante el ruido de segmentacin.
x As mismo, el modelo de los descriptores de borde y sus umbrales han sido objeto de
gran estudio y una gran batera de pruebas, para hallar las expresiones adecuadas.
x Tambin se ha hecho frente a numerosos problemas relacionados con la distorsin
de profundidad del sensor de imagen, tal y como se coment en el apartado anterior.
x Se ha tenido que implementar un bloque que calcule previamente la ganancia de la
componente roja para la segmentacin, en varios ciclos de reloj, para cumplir las
restricciones temporales en la etapa de identificacin (ganancia_color_seg.vhd).
x Por ltimo, para que la identificacin resulte en xito, debe resultar correcta en todas
y cada una de las tres clasificaciones. Esta agrupacin en serie de las etapas de
clasificacin proporciona menos fiabilidad, ya que cualquier fallo en cualquiera de las
clasificaciones hara que la identificacin fallase. An as, el sistema est preparado
para dar una respuesta a pesar de que el pictograma no se haya podido identificar
correctamente, de la forma "Seal [rectangular, triangular, circular] detectada, pero
no identificada".

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 206


6.17 Bloques multiplexores, ROM y otros

6.17 Bloques multiplexores, ROM y otros

En este apartado se vern otros elementos de inters del sistema implementado. Tanto el
multiplexor de mscaras como el multiplexor final se mencionaron en apartados anteriores como
parte del conjunto de bloques iniciales del sistema. Sin embargo, en el diseo final se ampliaron
las funciones de stos para realizar otras tareas que se mencionarn a continuacin. Tambin se
har una descripcin de la memoria ROM utilizada, as como otros bloques de inters.

6.17.1 Multiplexor de mscaras y generador de vdeo LCD

El multiplexor de mscaras realiza las siguientes funciones, dentro del sistema.

x Recibe como entrada un flujo de vdeo etiquetado y las ocho ROI detectadas en la
etapa anterior.
x Realiza la conversin etiqueta-color presentada en la Tabla 6.11.
x Dibuja los bounding boxes de las ROIs vlidas que se han recibido.
x Genera un flujo de vdeo de salida adecuado que ser recibido por la pantalla LCD
8.4''.
x Toma la seal de seleccin proveniente del registro controlado por software y,
dependiendo de su valor, enva por su salida el flujo de vdeo etiquetado por colores,
o las un flujo de vdeo que contiene las bounding boxes de las regiones de inters.

En la Figura 6.60 se muestra el diagrama de bloques del multiplexor de mscaras y en la


Tabla 6.15 se muestran los puertos de entrada y salida de la entidad de nivel superior.

Figura 6.60. Diagrama de bloques de la entidad mask_to_xsvi.vhd.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 207


Captulo 6. Reconocimiento de seales de trfico

MULTIPLEXOR DE MSCARAS DE VDEO / ROI Y SALIDA LCD

Nombre del
mask_to_xsvi.vhd
fichero

Realiza la conversin etiqueta-color, selecciona un flujo de vdeo salida y


Descripcin
crea el flujo de vdeo para la pantalla LCD.
entity mask_to_xsvi is
generic (
C_XSVI_DWIDTH : integer := 24;
C_NUM_BITS_LABELS : integer := 8;
C_FAMILY : string := "spartan6";
C_BITS_X : integer := 11;
C_BITS_Y : integer := 10;
C_BORDER_BOX : integer := 5);
Port (
clk : in std_logic;
active_video_in : in STD_LOGIC;
hblank_in : in STD_LOGIC;
vblank_in : in STD_LOGIC;
hsync_in : in STD_LOGIC;
vsync_in : in STD_LOGIC;

eje_x : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);


eje_y : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);

data_label_in : in STD_LOGIC_VECTOR((C_NUM_BITS_LABELS-1) downto 0);

blob_bypass : in STD_LOGIC;

xi1_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);


xf1_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi1_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf1_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi2_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf2_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi2_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf2_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi3_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf3_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
Entidad yi3_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf3_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi4_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf4_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi4_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf4_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi5_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf5_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi5_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf5_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi6_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf6_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi6_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf6_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi7_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf7_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi7_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf7_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi8_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf8_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi8_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf8_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);

active_video_lcd : out STD_LOGIC;


hsync_lcd : out STD_LOGIC;
vsync_lcd : out STD_LOGIC;
video_data_lcd : out STD_LOGIC_VECTOR ((C_XSVI_DWIDTH -1) downto 0);

active_video_out : out STD_LOGIC;


hblank_out : out STD_LOGIC;
vblank_out : out STD_LOGIC;
hsync_out : out STD_LOGIC;
vsync_out : out STD_LOGIC;
video_data_out : out STD_LOGIC_VECTOR ((C_XSVI_DWIDTH -1) downto 0));
end mask_to_xsvi;

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 208


6.17 Bloques multiplexores, ROM y otros

Descripcin de puertos y generics

clk Seal de reloj de vdeo a 74.25 Mhz

<video>_in Entrada del flujo de vdeo binario (datos y sincronismo).

eje_x, eje_y Coordenadas en el contexto del flujo de vdeo etiquetado.

data_label_in Etiqueta del pxel actual. (sustituye a video_data_in)

xi<1...8>_in
xf<1...8>_in Par de puntos (xi,yi), (xf,yf) que determinan las ocho regiones de
yi<1...8>_in inters detectadas.
yf<1...8>_in

Seal de seleccin por software. Elige cual de los dos flujos de vdeo
blob_bypass
se llevar a la salida del bloque.

<video>_lcd Salida de vdeo etiquetado por colores, para la pantalla LCD.

<video>_out Salida de vdeo seleccionado con la seal blob_bypass.

C_BORDER_BOX Anchura del borde de los bounding boxes. Por defecto 5 pxeles.
Tabla 6.15. Bloque mask_to_xsvi.vhd.

6.17.2 Multiplexor final y OSD

El multiplexor final realiza las siguientes funciones, dentro del sistema.

x Recibe como entrada el flujo de vdeo procesado del multiplexor de mscaras.


x Recibe el flujo de vdeo sin procesar.
x Recibe el flujo de vdeo segmentado junto a los descriptores de borde,
pertenecientes a la ROI_1 de la etapa de identificacin.
x Segn la seal de seleccin controlada por software, saca un flujo de vdeo u otro
por la salida.

Adems, si la seal de seleccin indica que se muestre el flujo de vdeo procesado, realiza
las siguientes tareas:

x Recibe los datos del decodificador para cada ROI vlida, indicando la seal de trfico
contenida en cada uno de ellos y el offset para acceder a los carteles en la ROM.
x Si el contenido es una seal vlida, se dibuja el bounding box indicando la regin de
inters.
x Si adems la seal ha sido identificada, se accede a la ROM y se muestra el cartel
correspondiente al cudruple del tamao que est almacenado.

En la Figura 6.61 se muestra el diagrama de bloques del multiplexor final y en la Tabla 6.16
se muestran los puertos de entrada y salida de la entidad de nivel superior.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 209


Captulo 6. Reconocimiento de seales de trfico

Figura 6.61. Diagrama de bloques de la entidad mux_final.vhd.

Por ltimo, se ilustra la forma de manejar los datos de la ROM para mostrar los carteles a
mayor tamao. Para ello, se han creado registros de desplazamiento, del tamao de una lnea del
cartel. El procedimiento es el siguiente:

x Cuando las coordenadas del pxel actual se encuentran dentro de la zona donde se
muestra el cartel, el bloque OSD accede a la memoria ROM.
x La direccin addr de acceso depender de las coordenadas (x,y) del pxel, y del
offset proporcionado por el decodificador para la seal identificada.
x La direccin de memoria accedida contiene una lnea completa del cartel, codificada
con un bit por pxel ('0' para pxeles de fondo y '1' para pxeles de letras).
x Esta lnea es volcada en un registro de desplazamiento, que ir desplazando un pxel
cada dos ciclos de reloj, proporcionando el escalado horizontal.
x Adems, se accede dos veces a cada posicin de memoria, con lo cual la lnea del
cartel es leda y dibujada dos veces, proporcionando as el escalado vertical.

Figura 6.62. Funcionamiento del sistema de representacin de carteles.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 210


6.17 Bloques multiplexores, ROM y otros

MULTIPLEXOR FINAL Y OSD

Nombre del
mux_final.vhd
fichero

Realiza la conversin etiqueta-color, selecciona un flujo de vdeo salida y


Descripcin
crea el flujo de vdeo para la pantalla LCD.
entity mux_final is
generic (
C_XSVI_DWIDTH : integer := 24;
C_NUM_BITS_LABELS : integer := 8;
C_FAMILY : string := "spartan6";
C_BITS_X : integer := 11;
C_BITS_Y : integer := 10;
C_BORDER_BOX : integer := 5);
Port (
clk : in std_logic;
sel_bypass : in std_logic(0 to 1);

active_video_in_bypass : in STD_LOGIC;
hblank_in_bypass : in STD_LOGIC;
vblank_in_bypass : in STD_LOGIC;
hsync_in_bypass : in STD_LOGIC;
vsync_in_bypass : in STD_LOGIC;
video_data_in_bypass : in STD_LOGIC_VECTOR ((C_XSVI_DWIDTH -1) downto 0);

active_video_in_mask : in STD_LOGIC;
hblank_in_mask : in STD_LOGIC;
vblank_in_mask : in STD_LOGIC;
hsync_in_mask : in STD_LOGIC;
vsync_in_mask : in STD_LOGIC;
video_data_in_mask : in STD_LOGIC_VECTOR ((C_XSVI_DWIDTH -1) downto 0);

active_video_in_descr : in STD_LOGIC;
hblank_in_ descr : in STD_LOGIC;
vblank_in_ descr : in STD_LOGIC;
hsync_in_ descr : in STD_LOGIC;
vsync_in_ descr : in STD_LOGIC;
video_data_in_descr : in STD_LOGIC_VECTOR ((C_XSVI_DWIDTH -1) downto 0);

Entidad eje_x : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);


eje_y : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);

xi1_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);


xf1_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi1_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf1_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi2_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf2_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi2_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf2_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi3_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf3_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi3_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf3_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi4_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf4_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi4_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf4_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi5_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf5_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi5_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf5_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi6_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf6_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi6_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf6_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi7_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf7_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi7_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf7_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
xi8_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
xf8_in : in STD_LOGIC_VECTOR((C_BITS_X - 1) downto 0);
yi8_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);
yf8_in : in STD_LOGIC_VECTOR((C_BITS_Y - 1) downto 0);

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 211


Captulo 6. Reconocimiento de seales de trfico

signal_detectada1 : in STD_LOGIC_VECTOR(8 downto 0);


signal_detectada2 : in STD_LOGIC_VECTOR(8 downto 0);
signal_detectada3 : in STD_LOGIC_VECTOR(8 downto 0);
signal_detectada4 : in STD_LOGIC_VECTOR(8 downto 0);
signal_detectada5 : in STD_LOGIC_VECTOR(8 downto 0);
signal_detectada6 : in STD_LOGIC_VECTOR(8 downto 0);
signal_detectada7 : in STD_LOGIC_VECTOR(8 downto 0);
signal_detectada8 : in STD_LOGIC_VECTOR(8 downto 0);

rom_data_in : in STD_LOGIC_VECTOR(63 downto 0);


rom_enable : out STD_LOGIC;
rom_addr : out STD_LOGIC_VECTOR(6 downto 0);

active_video_out : out STD_LOGIC;


hblank_out : out STD_LOGIC;
vblank_out : out STD_LOGIC;
hsync_out : out STD_LOGIC;
vsync_out : out STD_LOGIC;
video_data_out : out STD_LOGIC_VECTOR ((C_XSVI_DWIDTH -1) downto 0));
end mux_final;
Descripcin de puertos y generics

clk Seal de reloj de vdeo a 74.25 Mhz

Selecciona uno de los tres flujos de vdeo para la salida (vdeo


sel_bypass
procesado, vdeo etiquetado o vdeo segmentado)

<video>_in_bypass Entrada del flujo de vdeo sin procesar.

<video>_in_mask Entrada del flujo de vdeo procedente del multiplexor de mscaras.

<video>_in_descr Entrada del flujo de vdeo procedente del bloque de identificacin.

eje_x, eje_y Coordenadas en el contexto del flujo de vdeo etiquetado.

xi<1...8>_in
xf<1...8>_in Par de puntos (xi,yi), (xf,yf) que determinan las ocho regiones de
yi<1...8>_in inters detectadas.
yf<1...8>_in

signal_detectada1 ... Seal decodificada que indica la identificacin que se ha realizado


signal_detectada8 sobre la ROI_1, ..., ROI_8.

rom_data_in
rom_enable Seales de acceso a la ROM, y dato recibido de la misma.
rom_addr

<video>_out Salida de vdeo seleccionado con la seal sel_bypass.


Tabla 6.16. Bloque mux_final.vhd.

6.17.3 Memoria ROM

El sistema posee un bloque de memoria ROM creada por inferencia, a travs del fichero
ROM_carteles.vhd. Esta ROM contiene los carteles que se muestran en la parte superior de la
ROI detectada.

Sus caractersticas se enumeran a continuacin:

x Anchura de 64 bits.
x 9 bits de direccionamiento, con 352 celdas de datos.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 212


6.17 Bloques multiplexores, ROM y otros

x Codificacin de 1 bit por pixel, donde '0' representa un pxel de fondo y '1' representa
un pxel perteneciente a una letra.
x Bloque creado a partir de inferencia desde un fichero .vhd, sin utilizar Core
Generator.

ROM

Nombre del
ROM_carteles.vhd
fichero

Descripcin Contiene los carteles mostrados en la parte superior de la ROI.


entity ROM_cartel_letras is
Port (
clk : in STD_LOGIC;
Entidad
en : in STD_LOGIC;
addr : in STD_LOGIC_VECTOR(8 downto 0);
data : out STD_LOGIC_VECTOR(63 downto 0));
end ROM_cartel_letras;
Descripcin de puertos y generics

clk Seal de reloj de vdeo a 74.25 Mhz

en Seal de enable. Habilita la salida del dato ledo.

addr Direccin de lectura.

data Dato de salida.

Tabla 6.17. Bloque ROM_carteles.vhd.

6.17.4 Bloque de coherencia entre fotogramas

Se ha comprobado que en ocasiones, a pesar de que la seal de trfico se identifica


correctamente en el flujo de vdeo, sta identificacin puede fallar en algn fotograma, o grupo de
fotogramas en concreto. sta situacin ocurre debido al ruido de segmentacin aleatorio que
puede llegar a alterar el valor de algn descriptor de borde, o dar un valor IPP errneo. Estos
errores suelen ser de tipo aleatorio y de corta duracin, afectando en la mayora de casos a un
slo fotograma. En estos casos, se aprecia un efecto indeseado en pantalla, que es el cambio
brusco del cartel sobre la ROI detectada, o un parpadeo intermitente y aleatorio de dicho cartel.

Para evitar este comportamiento indeseado, se ha aadido un bloque llamado "coherencia


entre fotogramas", cuyo objetivo es analizar los aspectos de identificacin de una ROI con
respecto a los fotogramas anteriores, y decidir si el cambio ocurrido es "legtimo" o producto de
algn error en el sistema. Para ello, el bloque utiliza un mtodo que se puede resumir como: "Si
se detecta un cambio brusco en la identificacin de una ROI, y este cambio aporta ms
informacin que los anteriores fotogramas, el cambio se considera legtimo. En caso de una
prdida de informacin, este cambio tendr que mantenerse en el tiempo para darlo por vlido".

Un cambio legtimo es aquel que aporta ms informacin al sistema con respecto a los
fotogramas anteriores. Considrese como ejemplo la ROI cuyo interior es detectado como "Seal
triangular detectada pero no identificada". Si en un fotograma dado el bloque detecta que la seal
ha cambiado a "Seal triangular R1, ceda el paso", este cambio se considera beneficioso por
aportar ms informacin, y la salida ser actualizada inmediatamente. Esto ocurre tambin para

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 213


Captulo 6. Reconocimiento de seales de trfico

los cambios de "Ninguna seal detectada" a "Seal detectada". El caso contrario en el cual se
detecta un cambio no vlido se da, por ejemplo, para una deteccin del tipo "Seal R101,
direccin prohibida" que en un fotograma en concreto pasa a ser "Seal circular detectada, pero
no identificada".

Existe sin embargo un caso especial, que ocurre debido a la forma en la cual se ha
implementado el bloque de etiquetado de componentes conectados. Este bloque utiliza los slots
(ROI_1, ..., ROI_8) a medida que va encontrando objetos dentro de la imagen. Esto quiere decir
que el primer objeto vlido detectado ir a la ROI_1, el segundo a la ROI_2, y as sucesivamente.

Este hecho puede llegar a producir un cambio brusco cuando se mueve un objeto hacia
arriba de la imagen, cambiando su ROI automticamente con respecto a otros objetos que pueda
haber en pantalla, situacin ilustrada en la Figura 6.63. Este cambio tambin se debe llevar a la
salida automticamente, por considerarse "legtimo". Por ello, el bloque de coherencia tambin
evala las coordenadas de cada ROI. Si de un fotograma a otro estas coordenadas cambian
bruscamente de posicin, se considera que la seal de trfico anterior ha cambiado de slot en
etapas previas, y el cambio ser considerado como vlido.

Figura 6.63. Cambio brusco en la identificacin de una ROI.

En resumen, el bloque de coherencia entre fotogramas se describe en los siguientes


puntos, para una sola ROI. Ntese que este procedimiento se realiza en paralelo para todas y
cada una de las ROI del sistema.

x El bloque recibe la seal codificada que indica el resultado de la identificacin en la


ROI. Esta seal se analiza con respecto a la del fotograma anterior.
x Si la seal codificada no ha cambiado, se saca por la salida y el algoritmo finaliza.
x Si la seal codificada ha cambiado, y este cambio es vlido, se saca por la salida
inmediatamente y el algoritmo finaliza. Se considera un cambio legtimo cuando:
La seal codificada nueva posee ms informacin que la del fotograma
anterior.
La coordenada x_final de la ROI anterior es menor que la x_inicial de la
ROI nueva (por lo tanto se considera un cambio de slots en etapas
previas).
x Si la seal codificada ha cambiado y no cumple alguna de las condiciones anteriores,
se considera un cambio no vlido, y se iniciar un recuento de fotogramas, de la
siguiente forma.
Durante los prximos 30 fotogramas (por defecto 500 ms.) se evaluar la
seal codificada de entrada. Durante todo este tiempo de evaluacin, la
salida seguir siendo el valor de la seal codificada anterior, hasta que se
demuestre que el cambio es vlido.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 214


6.17 Bloques multiplexores, ROM y otros

Si durante todo este tiempo la seal se mantiene en el cambio "menos


beneficioso", se considera que ste es vlido y se sacar por la salida.
Si por el contrario la seal vuelve a su estado anterior, en cualquiera de los
30 fotogramas de evaluacin, el cambio se descarta por ser no vlido y se
vuelve a sacar la salida original.

Se ha comprobado que este bloque aporta una gran estabilidad en la salida de los datos,
eliminando los efectos indeseados de intermitencia, desaparicin brusca de los carteles, entre
otros.

6.17.5 Bloque decodificador

Finalmente, el bloque decodificador toma como entrada la seal de cada ROI codificada, y
saca por la salida una nueva seal que contiene la siguiente informacin:

x El resultado final de la identificacin, con los valores "No existe seal en la ROI",
"Seal detectada pero no identificada", o "Seal identificada correctamente".
x Adems, indica al bloque multiplexor final el offset de acceso a la memoria ROM que
contiene los carteles, facilitando la tarea de acceso y muestra de los carteles.

En caso de que la seal no se haya identificado completamente, el offset a la ROM


apuntar a los carteles "Seal [rectangular, circular, triangular] no identificada". En caso de que la
seal no se haya detectado en absoluto, el valor "No existe seal en la ROI" ser suficiente para
que el bloque multiplexor final descarte dicha ROI y no la muestre por pantalla.

6.18 Programacin del software y comunicacin con el PC

En este apartado se detallar la comunicacin del PCORE de reconocimiento de seales de


trfico con el resto del sistema a travs de MicroBlaze, y el software de control que se ha
implementado.

6.18.1 El registro slv_reg0

Tal y como se ha visto en el Apartado 6.10 en la creacin del PCORE, se ha establecido


un registro de 32 bits accesible por software, que es utilizado para controlar las diferentes seales
de seleccin y configuracin del sistema, representadas en color verde en los diferentes
diagramas de bloques vistos en apartados anteriores (por ejemplo el de la Figura 6.9). La
decisin de aadir un slo registro es debido a que 32 bits es ms que suficiente para el control
de todas las seales que requiere el sistema, pudiendo en todo momento aadir nuevos registros
en caso de necesitarlo, a travs de la opcin "Create or Import Peripheral" de EDK.

El registro utilizado, llamado slv_reg0, se controla a travs de la entidad de nivel superior


del PCORE creado, que proporciona la interfaz correspondiente con el bus de datos PLB y las
seales adecuadas para la seleccin, la escritura y la lectura de dicho registro (Figura 6.8).

A continuacin se muestran los bits del registro slv_reg0 as como las seales de seleccin
y configuracin que representan. Es importante destacar que las especificaciones definen el bus
Processor Local Bus (PLB) como un bus big-endian [158], y por tanto todos los registros y
seales del sistema asociados al mismo estarn definidos en este formato ("0 to TAM-1"). Por
este motivo el registro slv_reg0 aparece descrito desde 0 a 31, al contrario que el resto de
seales, puertos y buses del sistema, que utilizan por definicin una configuracin little-endian

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 215


Captulo 6. Reconocimiento de seales de trfico

("TAM-1 downto 0"). Esto habr de tenerse en cuenta en todo momento a la hora de la
asignacin y evaluacin de las seales de seleccin y configuracin, ya que provienen
directamente de este registro.

Figura 6.64. Registro slv_reg0 controlado por software.

REGISTRO ACCESIBLE POR SOFTWARE slv_reg0

Bits Rango Seal Actan en Descripcin

Selector de uno los tres modos de


30-31 [0-3] mux_sel mux_final.vhd vdeo que saldr por la pantalla
principal.

activa el algoritmo de segmentacin, o


27-29 [0-7] seg_sel segmentacion.vhd establece uno de los tres patrones
binarios predefinidos.

Selecciona como salida del multiplexor


26 [0-1] mask_sel mask_to_xsvi.vhd de mscaras el vdeo etiquetado o las
bounding boxes de la ROI.

segmentacion.vhd
Establece la ganancia incremental de
decisor_signals.vhd
20-25 [0-63] umbral_rojo zero_crossing.vhd
rojo para la segmentacin de seales
rojas, consiguiendo k1 entre [1-1.492]
etapa_decisora.vhd

segmentacion.vhd
Establece el umbral mnimo de la
decisor_signals.vhd
14-19 [0-63] umbral_diff zero_crossing.vhd
componente roja para la segmentacin
de seales rojas.
etapa_decisora.vhd

Desactiva la segmentacin de seales


13 [0-1] seg_azul segmentacion.vhd
azules, por motivos de depuracin.

Establece la ganancia decremental de


segmentacion.vhd
rojo (produciendo una ganancia
decisor_signals.vhd
7-12 [0-63] umbral_azul zero_crossing.vhd
efectiva de azul + verde) para la
segmentacin de seales azules,
etapa_decisora.vhd
consiguiendo k2 entre [0.5-0.992]

coherencia_ Activa o desactiva la coherencia entre


6 [0-1] bloque_coherencia.vhd
fotogramas.
sel

0-13 - - - -

Tabla 6.18. Relacin del registro slv_reg0 con las seales de control del sistema.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 216


6.18 Programacin del software y comunicacin con el PC

6.18.2 Programacin del software de control

El software de control que se ha implementado para este sistema tiene las siguientes
caractersticas, algunas de ellas proporcionadas por el diseo de referencia que se ha utilizado
como base para el desarrollo. Otras han sido programadas especialmente para este Proyecto Fin
de Carrera.

x Comunicacin serie con un PC a travs de un cable USB (previa instalacin del


driver que hace de interfaz USB-UART [159]).
x Consola de comandos a travs de la aplicacin Hyperterminal.
x Interfaz de configuracin y seleccin a travs de lneas de texto.
x Informacin del estado del sistema.

Para ello, se han utilizado los archivos fuente listados en la Tabla 6.19.

Archivo fuente Descripcin


Fichero de cdigo C de nivel superior. Encargado correr el bucle
principal del programa, establecer las variables que se usarn,
ivk_top.c
llamar a las funciones de inicializacin de los PCOREs y crear el
men inicial que se mostrar en Hyperterminal.
ivk_processing_menu.c Implementacin del men de procesamiento del sistema, con las
ivk_processing_menu.h funciones de acceso a los bloques del diseo de referencia
ivk_processing_menu_l.h utilizado.
ivk_camera.c Implementacin de las funciones de control del sensor OmniVision
ivk_camera.h OV9710.
ivk_camera_menu.c
ivk_camera_menu.h Men de configuracin del sensor OmniVision OV9710.
ivk_camera_menu_l.h
Definiciones de tiempo de vdeo para distintas resoluciones, y
ivk_video_resolution.c
funciones para la deteccin de la resolucin de vdeo, utilizada por
ivk_video_resolution.h
los PCOREs ivk_video_gen, ivk_video_det
ivk_frame_buffer.c Implementacin de las funciones de acceso y control del frame
ivk_frame_buffer.h buffer a travs del bloque MPMC.
Implementacin de las operaciones de diagnstico del bus I2C, al
ivk_iic_diag.c
cual se encuentran conectadas, entre otros elementos, las placas
ivk_iic_diag.h
FMC.
Tabla 6.19. Archivos fuente para el software del sistema.

Estos archivos fuente se combinan con las libreras de software para finalmente compilar el
fichero .elf que se descargar en la memoria de instrucciones de MicroBlaze (Figura 6.65).

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 217


Captulo 6. Reconocimiento de seales de trfico

Figura 6.65. Dependencia de los ficheros fuente para la creacin del software final [75].

Para controlar el registro slv_reg0 se han utilizado los tipos de datos y las funciones
proporcionadas por Xilinx para la lectura y modificacin de registros, utilizando variables
intermedias para volcar los bits necesarios en cada proceso, y dejar intactos los dems. En
particular se han hecho uso de los siguientes elementos.

x Tipo de datos Xuint32 para las variables enteras sin signo.


x La funcin mWriteSlaveReg0(BASEADDR, RegOffset, Xuint32 Data) definida
automticamente en el proceso de creacin del PCORE, para escribir un dato en el
registro.
x La funcin mReadSlaveReg0(BASEADDR, RegOffset, Xuint32 Data) definida
automticamente en el proceso de creacin del PCORE, para leer un dato del
registro.
x La funcin Xil_printf, que enva una cadena de texto por la conexin UART a la
aplicacin Hyperterminal.

Cabe destacar que, debido a que los bits del registro utilizado se utilizan para diferentes
seales del sistema y que las funciones arriba mencionadas leen o escriben el registro completo,
se ha tenido que programar un sistema que lea y almacene determinados bits y deje intactos los
dems. El algoritmo se resume a continuacin.

Para la lectura de ciertos bits del registro slv_reg0:

x Se almacena el registro completo en una variable intermedia.


x Se desplazan los bits de la variable hacia la izquierda una cantidad de posiciones tal,
que los bits de inters pasen a ser los LSB de la variable.
x Se hace un AND bit a bit con una mscara que deje intactos los bits de inters y
ponga a cero el resto.
x En caso de necesitar un valor numrico (como por ejemplo los umbrales), se
convierte esta cantidad a un entero.

Para la escritura de ciertos bits del registro slv_reg0:

x Se almacena el registro completo en una variable intermedia.


x Se eliminan los bits de inters con una mscara AND.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 218


6.18 Programacin del software y comunicacin con el PC

x Se desplazan los bits de la variable que contiene el dato hasta hacerlos coincidir con
su posicin dentro del registro global.
x Se realiza una operacin OR para modificar el valor de la variable intermedia y
cargar los datos nuevos.
x Se escribe esta variable intermedia en el registro.

Si slo se necesita modificar un bit dentro del registro slv_reg0, la operacin se simplifica
simplemente haciendo un switch (Operacin XOR del registro con una mscara todo a cero,
menos el bit que se desea cambiar).

6.18.3 Control de parmetros a travs de Hyperterminal

Finalmente, una vez compilada la aplicacin software que ejecutar MicroBlaze, se


establece una conexin serie entre el puerto UART de la placa de desarrollo y un PC a travs de
Hyperterminal. Esta aplicacin informa al usuario en todo momento del estado del sistema, y
permite controlar los diferentes parmetros del mismo.

Comando
Rango Acta sobre Descripcin
Hypert.

0: Vdeo original procesado.


s [0-3] mux_sel 1: Vdeo de segmentacin inicial / ROI.
2: Vdeo de segmentacin final y Zero-crossing.

0: Algoritmo de segmentacin 1.
1: Patrn predefinido de depuracin 1.
d [0-3] mask_sel 2: Patrn predefinido de depuracin 2.
3: Patrn predefinido de depuracin 3.

Seleccin de vdeo segmentado y etiquetado, o video con


b [0-1] seg_sel las ROI detectadas.

Incrementa la ganancia de rojo utilizada para la


r [0-126] umbral_rojo segmentacin de seales rojas (aumenta k1 entre
[1-1.492].

decrementa la ganancia de rojo utilizada para la


e [0-126] umbral_rojo segmentacin de seales rojas (disminuye k1 entre
[1-1.492].

g [0-63] umbral_diff Incrementa el valor mnimo de la componente roja.

f [0-63] umbral_diff Decrementa el valor mnimo de la componente roja.

r [0-1] seg_azul Activa / desactiva la segmentacin para seales azules.

Incrementa la ganancia de azul+verde utilizada para la


q [0-126] umbral_azul segmentacin de seales azules (aumenta k2 entre
[0.5-0.992].

Decrementa la ganancia de azul+verde utilizada para la


w [0-126] umbral_azul segmentacin de seales azules (aumenta k2 entre
[0.5-0.992].

z [0-1] coherencia Activa / desactiva el bloque de coherencia entre fotogramas.

Tabla 6.20. Comandos de control a travs de Hyperterminal

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 219


Captulo 6. Reconocimiento de seales de trfico

Los comandos que se utilizan para controlar los bloques del diseo de referencia se
encuentran en [75]. En la Tabla 6.20 se muestran aquellos que se han creado especficamente
para este Proyecto Fin de Carrera.

6.19 Conexin con la pantalla LCD 8.4''

En este apartado se describe brevemente la interfaz de conexin con la pantalla LCD


TOSHIBA 8.4 LCD (TOSH84LCD-G).

Como se vio en la Figura 6.7, el PCORE encargado de la deteccin de seales de trfico


tiene una interfaz de salida correspondiente a un flujo de vdeo XSVI que finalmente termina en la
pantalla LCD 8.4''. Sin embargo, ste flujo de vdeo debe ser convertido segn las
especificaciones de la interfaz ALI (Avnet LCD Inteface) [73]. Para ello, el fabricante proporciona
un diseo de referencia en Verilog, que ha sido estudiado y modificado para adecuarse a las
caractersticas del sistema implementado.

En particular, se ha modificado el archivo UCF aadiendo las restricciones temporales del


diseo general de EDK. Tambin se ha cambiado la localizacin de los pines para obtener la
misma seal de reloj que el resto del sistema. Se ha eliminado el cdigo fuente innecesario, como
las instancias a primitivas que generan las seales de sincronismo, los generadores de patrones
de test, entre otros. Finalmente, se ha creado un nuevo PCORE a travs de la herramienta
"Create or Import Peripheral", donde se han definido las interfaces de entrada y salida en el
diseo general, y se ha indicado que este bloque no posee ningn registro controlado por
software, por lo cual no se conecta a ningn bus de MicroBlaze.

Figura 6.66. PCORE de interfaz ALI dentro del sistema.

La funcin que realiza el controlador ALI se muestra en la Figura 6.67 y sus detalles
pueden consultarse en [73]. Ntese el uso de un PLL que transforma la frecuencia de vdeo de
entrada en una frecuencia de salida siete veces superior, para hacer frente al conversor serie-
paralelo. Tambin se utilizan buffers de salida LVDS en la FPGA (LVDS, Low-voltage differential
signaling).

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 220


6.20 Generacin del bitstream

Figura 6.67. PCORE de interfaz ALI [73].

6.20 Generacin del bitstream

Finalmente, una vez implementado el sistema completo en EDK (Figura 6.68), se debern
generar los ficheros .bit (parte hardware) y .elf (parte software), que configurarn la FPGA para
que ponga en funcionamiento el sistema de reconocimiento de seales de trfico. El proceso total
de generacin del bitstream (sntesis, PAR, MAP, etc..) dura aproximadamente cuatro horas (en
un procesador Intel Core i7 con 4Gb de RAM).

Figura 6.68. Diagrama de bloques del sistema completo en EDK.

PROYECTO FIN DE CARRERA. NICOLS AGUIRRE DOBERNACK 221

Vous aimerez peut-être aussi