Académique Documents
Professionnel Documents
Culture Documents
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.
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.
Figura 6.1. Las seales de trfico estn expuestas a un gran nmero de variables que dificultan su deteccin [170].
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
x Segmentacin de la imagen.
x Deteccin de la seal vial.
x Identificacin de la seal vial.
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].
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:
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.
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%.
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.
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.
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.
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.
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:
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.
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.
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.
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.
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.
Figura 6.7. Diagrama de bloques del sistema completo (figura derivada de [75]).
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:
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.
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].
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.
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
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.
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.
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''.
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.
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.
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;
Descripcin de puertos
<video>_in,
Entrada y salida de la seal de vdeo (datos y sincronismo).
<video>_out
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.
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:
Imageprocessnoreg
Nombre y versin Nombre y versin del PCORE a crear.
v1.00a
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.
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.
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.
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
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);
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).
Para la seleccin se utilizan algunos bits del registro accesible por software slv_reg0, que a
travs de Microblaze se controla desde el exterior.
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;
D Entrada de seales
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.
BUFFER DE LNEA
Nombre del
line_buffer.vhd
fichero
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, eje_y Seales de salida con las coordenadas (x,y) del pxel actual.
6.12.1 Introduccin
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.
En particular, las ecuaciones no lineales que definen el espacio HSI a partir del RGB son
las siguientes:
Por todo ello, se propone el espacio RGB como espacio de color sobre el cual se
implementarn los mtodos de segmentacin.
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.
( Ri , j ! k Gi , j ) OR ( Ri , j ! k Bi , j )
( 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 )
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.
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
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.
Ri , j ! 50
Ri , j Bi , j ! 15
Ri , j Gi , j ! 15
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
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.
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 )
R 'i, j k1 Ri , j k1 [1 1.492]
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.
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:
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.
BLOQUE DE SEGMENTACIN
Nombre del
segmentacion.vhd
fichero
eje_x, eje_y Seales de salida con las coordenadas (x,y) del pxel actual.
6.13.1 Introduccin
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'.
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.
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.
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.
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
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;
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.
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'.
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'.
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.
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.
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.
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.
6.15.1 Introduccin
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.
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.
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:
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).
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
cncavas en forma de "U", que son mayores que el tamao de la mscara y que obligan al
sistema a ir asignando etiquetas nuevas.
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.
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.
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.
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.
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.
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.
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.
x Tomar las coordenadas de estos dos pxeles de inters para formar la ROI buscada.
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,
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.
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).
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.
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.
Nombre del
blob_extraction.vhd
fichero
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;
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
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
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:
Figura 6.29. Diagrama de flujo del bloque "Lgica decisora de etiquetas" (logica_blob_extraction.vhd).
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).
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.
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.
Figura 6.33. ROI almacenadas en cada entrada de la tabla de datos antes de la fusin.
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:
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:
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
Tabla 6.11 Relacin entre etiquetas y colores mostrados en el flujo de vdeo etiquetado.
Estos patrones han sido creados para comprobar el correcto funcionamiento de algunos
parmetros, como por ejemplo:
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.
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:
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.
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.
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.
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.
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.
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.
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.
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)
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.
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:
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.
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.
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:
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.
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
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).
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
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.
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):
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.
Figura 6.45. Descriptores de borde para diferentes seales y posiciones de las mismas.
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.
( 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.
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%.
( 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
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
( Li Ti) ( Ri Bi)
3 3 3 3
Ancho_ ROI Ancho_ ROI
8 1 1 1 1 8
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
Figura 6.46. Ejemplos de las expresiones que determinan la forma de las seales viales.
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:
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
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.
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".
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.
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.
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.
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.
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.
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.
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
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).
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.
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.
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.
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.
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.
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.
Nombre del
decisor_signals.vhd / decisor_signals_debug.vhd
fichero
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);
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);
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
xi1_in, xf1_in,
Par de puntos (xi,yi), (xf,yf) que determinan la regin de inters que
yi1_in, yf1_in
se analizar.
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.
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.
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.
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.
u Pn Ap [0 Pn ]
Pxeles _ seal Pxeles _ seal Pxeles _ seal
Ap
Area _ ROI Area _ ROI Anormalizada
Pn
Con esta ltima expresin, se podra crear un algoritmo que calcule Ap de la siguiente
forma:
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.
Pxeles _ seal Pxeles _ seal
Ap = [0 Pn ]
Anormalizada
Ap _ implem
Area _ ROI
Pn
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
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.
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:
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.
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.
Entre los problemas que se han encontrado en esta ltima etapa de identificacin, podemos
destacar:
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.
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.
Nombre del
mask_to_xsvi.vhd
fichero
blob_bypass : in STD_LOGIC;
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.
C_BORDER_BOX Anchura del borde de los bounding boxes. Por defecto 5 pxeles.
Tabla 6.15. Bloque mask_to_xsvi.vhd.
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.
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.
Nombre del
mux_final.vhd
fichero
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);
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
rom_data_in
rom_enable Seales de acceso a la ROM, y dato recibido de la misma.
rom_addr
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.
x Anchura de 64 bits.
x 9 bits de direccionamiento, con 352 celdas de datos.
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
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
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.
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.
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.
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
("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.
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
0-13 - - - -
Tabla 6.18. Relacin del registro slv_reg0 con las seales de control del sistema.
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.
Para ello, se han utilizado los archivos fuente listados en la Tabla 6.19.
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).
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.
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.
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).
Comando
Rango Acta sobre Descripcin
Hypert.
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.
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.
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).
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).