Logo Studenta

Implementação de Algoritmo de Seguimento de Objetos em FPGA

¡Este material tiene más páginas!

Vista previa del material en texto

TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de La Paz
INSTITUTO TECNOLÓGICO DE LA PAZ
DIVISIÓN DE ESTUDIOS DE POSGRADO E INVESTIGACIÓN
MAESTŔIA EN SISTEMAS COMPUTACIONALES
IMPLEMENTACIÓN DE UN ALGORITMO DE
SEGUIMIENTO DE OBJETOS EN FPGA
QUE PARA OBTENER EL GRADO DE
MAESTRO EN SISTEMAS COMPUTACIONALES
PRESENTA:
JOSUÉ BENJAMÍN PALAFOX HERNÁNDEZ
DIRECTOR DE TESIS:
DR. SAÚL MART́INEZ D́IAZ
LA PAZ, BAJA CALIFORNIA SUR, MÉXICO, DICIEMBRE 2017.
Blvd. Forjadores de B. C. S. #4720, Col. 8 de Oct. 1era. Sección C. P. 23080
La Paz, B.C.S. Conmutador (612) 121-04-24, Fax: (612) 121-12-95
www.itlp.edu.mx
Dedicatoria
A mis padres por todo el apoyo que me han dado.
i
Agradecimientos
A Dios, porque todas las cosas provienen de Él.
A Nohemı́, por entenderme y tolerarme durante este tiempo de crecimiento.
A Pablo, por estar atento y alentarme a seguir adelante.
A mis profesores, por compartirme de su conocimiento y experiencia.
ii
Resumen
El seguimiento de objetos es un área importante en el campo de visión computacional,
con aplicaciones en la vigilancia, monitoreo de tráfico, veh́ıculos autónomos, e interacción con
computadoras. Para utilizar algoritmos de seguimiento en tiempo real se debe disminuir el
tiempo de ejecución de las operaciones de procesamiento de imágenes.
El método de seguimiento de objetos TLD (“Tracking-Learning-Detection”) de Z. Kalal, es
de interés debido a que combina el seguimiento tradicional y la detección de objetos utilizando
un modelo de aprendizaje con el cual se crea el modelo del objeto a partir de la primera imagen, y
lo actualiza conforme se obtiene más cuadros. Dentro del método TLD, uno de los elementos que
consume el mayor tiempo de procesamiento es la aplicación de un filtro gaussiano de suavizado,
por lo que se eligió como la función para acelerar utilizando una FPGA (“Field Programmable
Gate Array”).
En este trabajo se implementaron las funciones para trabajar con imágenes de mapa de bits
en tarjetas micro SD desde un microcontrolador, aśı como diferentes algoritmos de procesamiento
de imágenes. Finalmente, al realizar el diseño en FPGA, se disminuyó el tiempo de procesamiento
del filtrado en un 91.50 % de su implementación original en un microcontrolador.
iii
Abstract
Object tracking is an important area in computer vision with applications in surveillance,
traffic control, autonomous vehicles, and human-computer interaction. In order to use object
tracking algorithms in real time applications, the runtime of image processing operations must
be diminished.
An object tracking method of interest is Tracking-Learning-Detection developed by Z. Kalal,
due to the combination of traditional object tracking and object detection using a learning model
which creates the object model from the first image and update it as more frames are obtained.
Within this method, one of the tasks that use most of the processing time is the employment
of a gaussian filter for smoothing, which was selected to accelerate using a Field Programmable
Gate Array (FPGA).
In this work the functions that deal with bitmap images in micro SD cards from the mi-
crocontroller were implemented, as well as different image processing algorithms. In the end,
the FPGA design diminished the runtime of the smoothing filter in 91.50 % from its original
implementation in a microcontroller.
iv
Índice general
1. Introducción 1
1.1. Descripción del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2. Justificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3. Hipótesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.1. Objetivos especificos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5. Limitaciones y alcances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2. Marco teórico 10
2.1. Procesamiento de imágenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2. Seguimiento de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.3. Aceleración de algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.4. Field programmable gate array . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3. Metodoloǵıa 31
3.1. Propuesta de solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2. Desarrollo de software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3. Desarrollo en FPGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4. Resultados y conclusiones 47
4.1. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.2. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.3. Trabajo futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
v
ÍNDICE GENERAL vi
A. Código fuente PC 51
A.1. conf.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
A.2. img.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
A.3. img.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
A.4. bmp.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
A.5. bmp.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
A.5.1. main.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
B. Código fuente microcontrolador 96
B.1. bmp.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
B.2. bmp.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
B.3. dma.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
B.4. dma.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
B.5. gaussian module.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
B.6. gaussian module.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
B.7. main.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
C. Código fuente FPGA 124
C.1. gaussian filter 9x9 1 5.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
C.2. cubic hermite.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
C.3. bicubic interpolation.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
C.4. gaussian filter.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
C.5. Diseño de bloques en Vivado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Bibliograf́ıa 138
Índice de figuras
1.1. Luz visible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. El ojo humano y su respuesta a la luz. . . . . . . . . . . . . . . . . . . . . . . . 2
1.3. Imagen digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4. Mejora de contraste por modificación del histograma. . . . . . . . . . . . . . . . 5
1.5. Operaciones sobre vecinos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.6. Complejidad computacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1. Comparación de una resonancia magnética de un cerebro humano con su negativo. 11
2.2. Transformación gamma a una toma aérea. . . . . . . . . . . . . . . . . . . . . . 12
2.3. Transformación logaŕıtmica para resaltar regiones oscuras. . . . . . . . . . . . . 12
2.4. Corrección del contraste por estiramiento del histograma. . . . . . . . . . . . . . 13
2.5. Corrección del contraste por ecualización del histograma. . . . . . . . . . . . . . 14
2.6. Umbralizaciónde una imagen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.7. Acotamiento y amplificación de un rango valores de intensidad. . . . . . . . . . 16
2.8. Operaciones sobre vecinos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.9. Filtros de suavizado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.10. Efecto de un filtro de suavizado en el gradiente de la imagen. . . . . . . . . . . . 19
2.11. Filtros de realce. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.12. Filtros Laplacianos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.13. Desplazamiento de la región de interés de acuerdo a Lucas-Kanade. . . . . . . . 23
2.14. Taxonomı́a de Flynn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.15. Compuertas lógicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.16. FPGAs y CLBs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
vii
ÍNDICE DE FIGURAS viii
3.1. Perfil del programa del método de seguimiento TLD. . . . . . . . . . . . . . . . 32
3.2. Comparación de métodos de interpolación . . . . . . . . . . . . . . . . . . . . . 36
3.3. Conexión con interfaz SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.4. Sistemas de archivos en microcontroladores . . . . . . . . . . . . . . . . . . . . . 39
3.5. Transacciones en las interfaces AXI4-Full y AXI4-Lite. . . . . . . . . . . . . . . 41
3.6. Comparación procesamiento secuencial y segmentado (“pipelining”) . . . . . . . 42
3.7. Convolución en FPGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.8. Procesamiento de datos con y sin buffer en imágenes. . . . . . . . . . . . . . . . 45
3.9. Comunicación entre microcontrolador y módulo AXI4-Stream . . . . . . . . . . 46
4.1. Comparación de tiempos de ejecución . . . . . . . . . . . . . . . . . . . . . . . . 49
C.1. Diseño de bloques en Vivado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Caṕıtulo 1
Introducción
La visión nos permite recibir y utilizar una gran cantidad de información; este proceso
comienza con la luz. La luz se refleja o pasa a través de objetos y llega a los ojos. Nuestros ojos
perciben solo una porción del espectro electromagnético, la figura 1.1 nos muestra en dónde
se ubica esta fracción. La luz visible se encuentra en una longitud de onda entre 400 y 650
nanómetros [1].
Rayos gamma Rayos x Ultravioleta Infrarojo Microondas Radio
400nm 700nm
10-12
Longitud de
onda (m)
10-10 10-8 10-6 10-4 10-2 1 102 104
Figura 1.1: Espectro electromagnético y las longitudes de onda visibles por el ojo humano.
En el ojo humano el iris controla el tamaño de la pupila y regula la cantidad de luz que pasa
por el cristalino para llegar a la retina la cual traduce la luz a señales nerviosas y las manda al
cerebro por el nervio óptico, en la figura 1.2a se aprecian los componentes básicos del ojo. La
retina contiene células sensibles a la luz, bastones y conos. Los bastones son muy sensibles y
responden a niveles bajos de iluminación, mientras que los conos son menos sensibles y solo se
activan con luz brillante. Existen 3 tipos de conos los cuales responden óptimamente a diferentes
longitudes de onda y son responsables de nuestra visión a color [1], la respuesta de las células
fotorreceptoras se puede ver en la imagen 1.2b.
1
CAPÍTULO 1. INTRODUCCIÓN 2
(a) Estructura básica del ojo humano.
100
80
60
40
20
Conos
azules
420 nm
Bastones
500 nm 531 nm 558 nm
400 500
Longitud de onda (nm)
Po
rc
en
ta
je
 d
e 
re
sp
ue
st
a 
m
ax
im
a
600 700
Conos
verdes
Conos
rojos
(b) Respuesta de las células fotorreceptoras a dife-
rentes longitudes de onda.
Figura 1.2: El ojo humano y su respuesta a la luz.
Finalmente es en nuestro cerebro donde se lleva a cabo el procesamiento de las señales en-
viadas por la retina. Este procesamiento está compuesto de varias etapas [2]. En las primeras
etapas ocurren tareas como separar figuras del fondo, detectar bordes y caracteŕısticas básicas,
tales como color, orientación o movimiento. En las etapas intermedias la información se combina
en una representación temporal del objeto. En las últimas etapas se lleva a cabo el reconoci-
miento e identificación visual del objeto al hacer coincidir la representación temporal con figuras
anteriores del objeto guardadas en nuestra memoria visual de largo plazo. Las primeras etapas
son automáticas y dependen de las señales del ojo, mientras que las últimas etapas se basan
más en nuestro conocimiento. Este es el proceso que se lleva a cabo para que nosotros podamos
percibir los objetos e interpretar las imágenes de nuestro entorno.
La visión computacional consiste en proveer a las computadoras de la habilidad para adquirir,
analizar y entender imágenes. Las imágenes son la estructura básica de datos en la visión
computacional. Una imagen puede ser definida como una función bidimensional f(x, y) donde x
y y son coordenadas espaciales y el valor de f es la intensidad de la imagen en un punto (x, y). La
diferencia entre una imagen análoga y una imagen digital es que los valores x, y y f son continuos
en la imagen análoga, mientras que en la imagen digital son discretos. La imagen digital, al ser
discreta, tiene un numero finito de elementos, llamados pixeles, los cuales están ordenados en m
filas y n columnas. La figura 1.3 muestra la representación de una imagen digital en forma de
CAPÍTULO 1. INTRODUCCIÓN 3
un arreglo rectangular. La cantidad de pixeles en una imagen se refiere a la resolución espacial,
mientras que los diferentes valores que puede tener cada pixel es la resolución tonal o profundidad
de color. La resolución tonal depende de la cantidad de bits utilizados para guardar el valor de
cada pixel. Usualmente se usan 8 bits para imágenes monocromáticas, conocidas también como
imágenes en escala de grises, y 24 bits para imágenes a color o imágenes de color verdadero
(truecolor). Con 8 bits obtenemos 256 diferentes niveles de intensidad. Con 24 bits se pueden
representar más de 16 millones de colores a partir de la combinación de colores rojo, verde y azul
(modelo RGB), utilizando 8 bits por cada canal. Los canales de una imagen pueden representar
colores u otro tipo de información dependiendo del modelo de color.
columnas
�l
as
y
x0
1
m
n
M-1
N-10 1
44 69 111 152 181 180 171 170
46 79 122 163 185 177 174 180
49 89 136 176 195 189 187 189
57 101 150 189 208 210 194 176
79 130 169 194 205 210 205 190
87 131 160 176 177 186 194 199
74 104 124 134 133 141 156 175
54 71 83 91 94 98 113 134
Figura 1.3: Representación de una imagen digital en filas y columnas.
Los modelos de color más comunes son el RGB (“red”, “green” y “blue”), CMYK (“cyan”,
“magenta”, “yellow” y “key”), HSV o HSB (“hue”, “saturation” y “value” o “brighness”) y YUV
(“Y” contiene la luminosidad de la imagen, “U” y “V” proveen información acerca del color de
la imagen). El modelo RGB es un modelo aditivo basado en nuestra percepción de color; suma
o combina los colores rojo, verde y azul en diferentes proporciones para formar otros colores.
El modelo RGB es utilizado mayormente en dispositivos electrónicos como monitores, pantallas
y cámaras digitales. El modelo CMYK es un modelo sustractivo aplicando la absorción de luz;
la luz reflejada por un objeto es la luz que no se absorbe. Los colores cian, magenta y amarillo
funcionan como filtros que absorben los colores rojo, verde y azul respectivamente. El modelo
CAPÍTULO 1. INTRODUCCIÓN 4
CMYK se utiliza principalmente en la imprenta y originalmente no utilizaba el color negro, sin
embargo, en la práctica no se obteńıa un verdadero color negro, por lo que se agregó como un
cuarto color. El modelo HSV tiene tres componentes, matiz, saturación, y valor. El matiz nos
indica elcolor, la saturación se refiere a la pureza del color o que tan mezclado está con la
luz blanca, y el valor describe el brillo del color o luminancia. El modelo HSV proviene de una
transformación del modelo RGB con la idea de separar los componentes de un color espećıfico
de manera que fuera práctico para la interpretación humana. El modelo YUV fue desarrollado
como un modelo de color para televisión basado en el modelo RGB. “Y” es la señal luma que
proporciona el brillo; provee una imagen en escala de grises a partir de una suma ponderada de
los colores rojo, verde y azul en una proporción aproximada a la sensibilidad del ojo humano.
“U” y “V” son señales de color o crominancia y son proporcionales a las diferencias entre el
color azul y la señal luma, y, entre el color rojo y la señal luma respectivamente. Una de las
razones por la cual el modelo YUV es importante es debido a que la ecuación para calcular la
señal luma se utiliza comúnmente para obtener una imagen en escala de grises a partir de una
imagen RGB, como se muestra en la ecuación 1.1.
Y = 0.299R + 0.587G+ 0.114B (1.1)
En visión computacional es común utilizar imágenes en escala de grises ya que disminuye la
complejidad y requiere menos tiempo para procesarla. Una imagen en escala de grises contiene
menos información que una imagen a color, sin embargo, la mayor parte de la información
relacionada a las caracteŕısticas visuales como regiones y esquinas se mantiene.
Para obtener una imagen digital existen diferentes tecnoloǵıas. Los dispositivos más comunes
convierten la intensidad de luz que se refleja sobre ellos en señales eléctricas las cuales son
digitalizadas, de igual modo se puede utilizar otro tipo de radiación electromagnética tal como
rayos x, ultrasonido o calor. Independientemente del dispositivo, la formación de una imagen
digital ocurre cuando un sensor registra la radiación que interactúa con objetos f́ısicos y produce
un arreglo de muestras.
Una vez obtenida la imagen digital es común aplicarle operaciones para modificarla, ya sea
que se mejore la imagen para consumo humano, o, que se preparare para que facilite la extracción
CAPÍTULO 1. INTRODUCCIÓN 5
de información. La aplicación de estas operaciones se conoce como procesamiento de imágenes.
Algunas operaciones producen nuevas imágenes, mientras que otras producen representaciones
o descriptores no visuales. Estás operaciones aplican funciones sobre pixeles individuales o sobre
grupos de pixeles contiguos llamados vecinos. Entre las operaciones que se realizan sobre pixeles
individuales están: obtener el negativo de una imagen, en la cual se calcula el complemento de
cada pixel; estirar el histograma, donde se ampĺıa el rango de valores de la imagen; y ecualizar
el histograma, utilizado para distribuir uniformemente la frecuencia de los valores de la imagen.
La figura 1.4 muestra el cambio que se realiza sobre el histograma para mejorar el contraste de
la imagen.
(a) Imagen original con bajo contraste. (b) Imagen al estirar el histograma.
0 50 100 150 200 250 300
0
0.5
1
1.5
2
2.5
104
(c) Histograma original.
0 50 100 150 200 250 300
0
0.5
1
1.5
2
2.5
104
(d) Histograma estirado.
Figura 1.4: Mejora de contraste por modificación del histograma.
Otras operaciones se realizan sobre un pixel y los pixeles a su alrededor, llamados vecinos. La
forma más común de operaciones sobre grupos de pixeles es la aplicación de filtros. El filtrado
de imágenes requiere de dos imágenes; una se considera la entrada o imagen, y la otra se conoce
CAPÍTULO 1. INTRODUCCIÓN 6
como filtro o núcleo. La idea del filtrado de imágenes es recorrer el núcleo por toda la imagen,
conforme se va moviendo se produce una nueva imagen cuyos pixeles son calculados a partir de
los pixeles dentro del filtro. Si el valor calculado se obtiene con una función lineal de los valores
del filtro, entonces se trata de un filtro lineal. Las operaciones con filtros se utilizan comúnmente
para detectar esquinas, remover el ruido en imágenes e intensificar detalles. En la figura 1.5 se
representa visualmente la aplicación de un filtro lineal.
Núcleo
Pixeles
vecinos
Imagen de entrada Pixel procesándose 
Producto del núcleo con
el area sobre la imagen
Pixel de salida Imagen de salida
Suma de los
productos
Figura 1.5: Representación del filtrado lineal.
El ĺımite entre el procesamiento de imágenes y el análisis de imágenes no es muy claro,
sin embargo, podemos considerar diferentes niveles de procesamiento; bajo, medio y alto. El
nivel bajo incluye operaciones que reducen el ruido, mejoran el contraste o hacen más ńıtida la
imagen. Este nivel produce por lo general una imagen de salida. En el nivel medio encontramos
la segmentación, descripción de objetos y reconocimiento de objetos. Del mismo modo que el
nivel bajo, se obtiene una imagen de salida, pero también entrega atributos extráıdos de la
imagen tales como contornos u objetos etiquetados. El nivel alto está normalmente asociado a
funciones de la vista humana, donde no tan solo se reconocen objetos, sino que se determina o
entiende lo que sucede en la imagen.
CAPÍTULO 1. INTRODUCCIÓN 7
El problema de seguimiento de objetos se encuentra entre el nivel medio y alto del pro-
cesamiento de imágenes; obtenemos una imagen de salida y además extraemos caracteŕısticas
de la identificación de objetos. El propósito del seguimiento de objetos es identificar un ob-
jeto determinado en una secuencia de imágenes. Los cambios en la secuencia nos proveen de
caracteŕısticas para detectar objetos que se están moviendo y para estimar su trayectoria. El
movimiento en la secuencia nos puede revelar la forma de un objeto, la velocidad o su función.
Sus aplicaciones se encuentran en la vigilancia y seguridad, monitoreo de tráfico, navegación
de veh́ıculos e interacción entre humano y computadora. El seguimiento de objetos no es una
tarea sencilla. Entre sus dificultades se encuentran que el objeto salga de la vista de la cámara
o se oculte, que haya movimientos abruptos, que cambie de apariencia, que se confunda con el
fondo de la imagen, que cambie su tamaño, que haya cambios de iluminación, que las imágenes
estén borrosas o con algún otro tipo de ruido, que se requiera mantener la cantidad de cuadros
por segundo (procesar en tiempo real) en la secuencia.
Esta tesis tiene como interés disminuir el tiempo de procesamiento de un algoritmo de
seguimiento de objetos.
1.1. Descripción del problema
Al escribir un programa se debe tener en cuenta los recursos que va a utilizar. Los recur-
sos principales a considerar son el tiempo y la memoria. Estos dos recursos son independientes
y de acuerdo con la situación se puede elegir optimizar uno en lugar del otro. El recurso a
elegir depende de la aplicación y del sistema en el cual se va a implementar. La complejidad
computacional se refiere al análisis de la cantidad de recursos que se requieren para ejecutar un
algoritmo y lo clasifica dependiendo de su eficiencia computacional. La eficiencia de un algo-
ritmo cuantifica el número de operaciones básicas que se realizan en relación a la cantidad de
información que se está procesando. La notación para describir la cantidad máxima de recursos
que utiliza un algoritmo se conoce como “Big-O”. La notación “Big-O” se representa como
O(f(n)) donde f es la función que describe la tasa de crecimiento de recursos dependiendo del
tamaño de la entrada n. En la figura 1.6 se hace una comparación de diferentes complejida-
des computacionales considerando crecimiento constante O(1), logaritmico O(log(n)), log-lineal
CAPÍTULO 1. INTRODUCCIÓN 8
O(nlog(n)), polinomial O(n2), exponencial O(2n), y, factorial O(n!).
Número de elementos
N
úm
er
o 
de
 o
pe
ra
ci
on
es
E�ciencia
O(1)
O(log n)
O(n)
O(n log n)
O(n2)O(2
n)O(n!)
+
-
Figura 1.6: Comparación de diferentes complejidades computacionales.El procesamiento de imágenes debe su complejidad a la cantidad de datos requeridos para
representar una imagen y al número de operaciones que se deben ejecutar sobre ella. Por ejem-
plo, un algoritmo de un filtro lineal cuadrado de tamaño m que recorre una imagen cuadrada
de tamaño n tiene una complejidad computacional de O(m2n2), lo cual hace muy lenta la im-
plementación. Si además el tamaño del filtro tiende a n su complejidad se acerca a O(n4) lo
que se traduce en una operación muy lenta. Para lograr utilizar un algoritmo de seguimiento de
objetos en tiempo real debemos disminuir el tiempo que toma en procesar la información.
1.2. Justificación
La alta complejidad computacional de los algoritmos utilizados en visión computacional,
aunado al constante incremento del tamaño de las imágenes, genera el interés de encontrar nue-
vos y eficientes métodos para realizar las tareas de procesamiento de imágenes. Los dispositivos
electrónicos comunes como cámaras digitales, teléfonos inteligentes y televisiones generan y uti-
lizan imágenes de varios millones de pixeles. Para procesar esta información en tiempo real se
CAPÍTULO 1. INTRODUCCIÓN 9
requiere disminuir el tiempo que tardan en ejecutarse las operaciones sobre las imágenes. Una
solución prometedora es el empleo de FPGAs (arreglo de compuertas programable en campo,
por “Field Programmable Gate Array”), las cuales son conocidas por su poder de procesamien-
to. Una FPGA es una arquitectura programable que nos permite crear aplicaciones de hardware
dedicadas y configurables.
1.3. Hipótesis
Es posible disminuir el tiempo de procesamiento de un método de seguimiento de objetos al
implementar partes del algoritmo en una FPGA.
1.4. Objetivos
Implementar un método de seguimiento de objetos en una FPGA.
1.4.1. Objetivos especificos
Elegir un método de seguimiento de objetos. Implementar el método en C/C++. Acelerar
parte de la aplicación utilizando la FPGA. Comparar los tiempos de ejecución con y sin FPGA.
1.5. Limitaciones y alcances
Se implementará el método “Tracking-Learning-Detection” [3] (TLD) propuesto por Z. Ka-
lal. Se utilizará la FPGA modelo Zybo de la marca Xilinx. La comparación de tiempos de
ejecución se hará con la misma secuencia de imágenes sobre la tarjeta Zybo con y sin el módulo
en la FPGA.
Caṕıtulo 2
Marco teórico
2.1. Procesamiento de imágenes
El procesamiento de imágenes aplica operaciones y algoritmos sobre imágenes con dos
propósitos principales, mejorar una imagen u obtener caracteŕısticas de ella. Esto se lleva a
cabo a través de algoritmos que realizan modificaciones sobre la imagen en diferentes domi-
nios. El dominio espacial es el más común, sin embargo, al utilizar transformaciones tales como
la transformada de coseno discreta (DCT, por “Discrete Cosine Transform”), la transforma-
da discreta de Fourier (DFT, por “Discrete Fourier Transform”), o la transformada discreta
de ond́ıculas (DWT, por “Discrete Wavelet Transform”), se puede operar en el dominio de la
frecuencia.
En el dominio espacial las operaciones se aplican directamente sobre los pixeles. Estas modi-
ficaciones se pueden realizar sobre los pixeles de manera independiente o sobre un vecindario de
pixeles. Las primeras se realizan a través de operaciones sobre puntos, mientras que las últimas
hacen uso de filtros espaciales. Entre las operaciones sobre puntos más comunes están:
Obtener el negativo
Transformaciones gamma
Transformaciones logaŕıtmicas
Cambios sobre el histograma
Umbralización (“thresholding”)
10
CAPÍTULO 2. MARCO TEÓRICO 11
Acotamiento (“clamping”)
La operación de negativo produce el equivalente al negativo de una fotograf́ıa y se utiliza
para resaltar detalles blancos o claros que se encuentran sobre regiones oscuras, cuando estas
últimas son las dominantes. La ecuación 2.1 muestra como para calcular el negativo de una
imagen, donde r es el pixel de entrada, L es el número de niveles de intensidad y s es el pixel
de salida. En la figura 2.1 se aprecia esta transformación.
s = L− 1− r (2.1)
(a) Resonancia magnética de un ce-
rebro humano.
(b) Negativo de la imagen.
Figura 2.1: Comparación de una resonancia magnética de un cerebro humano con su negativo.
Los sensores de los dispositivos para capturar, imprimir o mostrar imágenes responden de
manera similar a las funciones de potencia. Este efecto puede producir imágenes muy oscuras o
muy claras. Para solucionar este problema se utiliza la corrección gamma; llamada aśı debido a
que el exponente en la función de potencia se conoce como gamma. Antes de imprimir la imagen
o mostrarla en un monitor se debe realizar esta corrección, para que en la salida se obtenga una
imagen lo más parecida a la original. De forma similar, podŕıa ser necesario aplicar la corrección
después de capturar una imagen. Para hacer una transformación gamma se utiliza la ecuación
2.2, donde c y γ son constantes positivas. La figura 2.2 muestra una toma aérea brillante a la
cual se le aplica la corrección gamma para mejorar el contraste.
s = crγ (2.2)
CAPÍTULO 2. MARCO TEÓRICO 12
(a) Vista aérea de una ciudad. (b) Corrección gamma γ = 1.50 y
c = 1.
Figura 2.2: Transformación gamma a una toma aérea.
La transformación logaŕıtmica nos permite aumentar el rango de valores de intensidad para
pixeles oscuros y comprime el rango de valores para pixeles claros en una imagen; al aplicar la
función inversa del logaritmo se produce el efecto opuesto. Esta transformación se utiliza para
resaltar detalles que se encuentran en áreas oscuras de la imagen, tal como se muestra en la
figura 2.3. La forma para calcular la transformación logaŕıtmica se muestra en la ecuación 2.3,
donde c es una constante positiva y b es la base del logaritmo.
s = c logb(1 + r) (2.3)
(a) Fotograf́ıa con poca exposición
de luz.
(b) Transformación logaŕıtmica con
c = 2.5 y b = 2.
Figura 2.3: Transformación logaŕıtmica para resaltar regiones oscuras.
El histograma de una imagen nos da la frecuencia de las intensidades. Con el histograma
se pueden apreciar propiedades como el brillo y el contraste. Dentro de las operaciones que
hay para la modificación del histograma encontramos el estiramiento y la ecualización. Estas
transformaciones se utilizan cuando la imagen tiene bajo contraste, ya sea porque no se tuvo una
CAPÍTULO 2. MARCO TEÓRICO 13
buena iluminación, por una mala configuración del dispositivo de captura, o debido al sensor.
El estiramiento del histograma expande el rango de niveles de intensidad de una imagen. La
forma de realizar esta operación se muestra en la ecuación 2.4, donde a es el valor mı́nimo y b es
el valor máximo que puede tomar un pixel (0 y 255 en el caso de imágenes de 8 bits), y donde c
es el valor mı́nimo y d es el valor máximo de intensidad que toman los pixeles en la imagen. En
ocasiones se encuentran valores at́ıpicos los cuales reducen la efectividad de la operación, por
ejemplo, si c = 0 y d = 255 la imagen no se modifica.
s = (r − c)
(
b− a
d− c
)
+ a (2.4)
(a) Vista aérea de una ciudad. (b) Imagen al estirar el histograma.
0 50 100 150 200 250
0
2
4
6
8
10
12
14
16
104
(c) Histograma original.
0 50 100 150 200 250
0
2
4
6
8
10
12
14
16
104
(d) Histograma estirado.
Figura 2.4: Corrección del contraste por estiramiento del histograma.
La finalidad de ecualizar el histograma es obtener un histograma uniforme. El histograma
nos da la cantidad de pixeles nk con intensidad rk dentro de un rango de niveles [0, L−1], donde
L es el número de posibles niveles de intensidad en la imagen. La probabilidad de ocurrencia
pr de un nivel de intensidad rk en una imagen se obtiene con la ecuación 2.5, donde MN es
CAPÍTULO 2. MARCO TEÓRICO 14
el número total de pixeles en la imagen. Para obtener un histograma ecualizado se utiliza la
ecuación 2.6, de la cual obtenemos un nuevo valor de intensidadsk por cada valor original rk,
en la imagen de salida se intercambia el valor original de cada pixel por su nueva intensidad.
pr(rk) =
nk
MN
, 0 ≤ k ≤ L− 1 (2.5)
sk = (L− 1)
k∑
j=0
pr(rj)
=
L− 1
MN
k∑
j=0
nk, 0 ≤ k ≤ L− 1 (2.6)
(a) Vista aérea de una ciudad. (b) Imagen al ecualizar el histogra-
ma.
0 50 100 150 200 250
0
2
4
6
8
10
12
14
16
104
(c) Histograma original.
0 50 100 150 200 250
0
2
4
6
8
10
12
14
16
104
(d) Histograma ecualizado.
Figura 2.5: Corrección del contraste por ecualización del histograma.
La umbralización (“thresholding”) convierte una imagen en escala de grises a una imagen
binaria. Una imagen binaria solo tiene dos valores, 0 y 1. Los valores de los pixeles menores al
umbral se hacen 0, mientras que aquellos mayores los vuelve 1. La ecuación 2.7 muestra como
CAPÍTULO 2. MARCO TEÓRICO 15
obtener una imagen binaria a partir de un umbral t.
s =
 0 si r < t1 si r ≥ t (2.7)
Con el método de Otsu [4] se selecciona de manera automática el valor del umbral. Este
método busca minimizar la varianza σw
2 dentro de cada grupo de pixeles de acuerdo a la
ecuación 2.8, haciendo una búsqueda para cada valor posible del umbral t.
σw
2(t) = ω0(t)σ0
2(t) + ω1(t)σ1
2(t) (2.8)
donde,
ω0(t) =
k−1∑
i=0
pi ω1(t) =
L−1∑
i=k
pi
σ0
2(t) =
k−1∑
i=0
[i− µ0(t)]2
pi
ω0(t)
σ1
2(t) =
L−1∑
i=k
[i− µ1(t)]2
pi
ω1(t)
µ0
2(t) =
k−1∑
i=0
i pi
ω0(t)
µ1
2(t) =
L−1∑
i=k
i pi
ω1(t)
(a) Imagen de una estatuilla. (b) Imagen umbralizada con
t = 128.
(c) Imagen umbralizada con el
método de Otsu.
Figura 2.6: Umbralización de una imagen.
El proceso de acotamiento (“clamping”) limita el rango de valores de intensidad de una
CAPÍTULO 2. MARCO TEÓRICO 16
imagen, utilizando la ecuación 2.9, donde a es el limite inferior, y b es el limite superior del
rango que se desea mostrar. Esta operación sirve para visualizar solo una región de valores de
intensidad.
s =

a si r < a
r si a ≤ r ≤ b
b si r > b
(2.9)
Una modificación del acotamiento amplifica un rango de valores de intensidad para utilizar
todos los posibles valores. Los valores fuera del rango se vuelven negros cuando son menores
y blancos para los que son mayores, mientras que a aquellos dentro del rango se les aplica un
estiramiento lineal de acuerdo a la ecuación 2.10 para cubrir todo el rango posible de valores de
intensidad.
s =

0 si r < a
(L− 1) r−a
b−a si a ≤ r ≤ b
L− 1 si r > b
(2.10)
(a) Imagen de una estatuilla. (b) Imagen acotada con a = 50
y b = 150.
(c) Amplificación de un rango
de intensidad a = 50 y b = 150.
Figura 2.7: Acotamiento y amplificación de un rango valores de intensidad.
A diferencia de las operaciones sobre puntos las cuales trabajan con los pixeles de manera
CAPÍTULO 2. MARCO TEÓRICO 17
individual, el filtrado espacial requiere de un vecindario para realizar una operación. Los vecinos
mas comunes para un pixel (x, y) son los 4 pixeles (“4-connected”) dados por (x±1, y) y (x, y±1),
aśı como los 8 pixeles (“8-connected”) descritos por (x ± 1, y ± 1). De igual modo, se pueden
utilizar otros tamaños; un vecindario es por lo general un pequeño rectángulo con centro en
(x, y).
El termino de filtrado se toma del procesamiento de señales en donde se trabajan con
frecuencias. Los filtros en el procesamiento de señales dejan pasar o rechazan (filtran) ciertos
componentes de una señal. Se puede obtener un resultado equivalente de estos filtros del dominio
de la frecuencia trabajando directamente con la imagen usando filtros espaciales.
El filtrado espacial consiste de un vecindario y de una operación predefinida que se aplica
en los pixeles delimitados por el vecindario. Si la operación que se realiza sobre los pixeles es
lineal se trata de un filtro espacial lineal, de lo contrario el filtro es no-lineal. La ecuación 2.11
muestra como se realiza el filtrado espacial lineal de una imagen de tamaño M ×N y filtro de
tamaño m× n. Para cada punto (x, y) en la imagen, el resultado g(x, y) del filtrado, es la suma
de productos de los coeficientes del filtro w y los pixeles de la imagen f que abarca el filtro. La
figura 2.8 muestra cómo se realiza el filtrado espacial.
g(x, y) =
a∑
s=−a
b∑
t=−b
w(s, t)f(x+ s, y + t) (2.11)
donde,
a =
m− 1
2
, b =
n− 1
2
Dentro del filtrado espacial lineal encontramos la correlación y la convolución. La diferencia es
que en la convolución el filtro se rota 180◦. La ecuación 2.12 describe la operación de correlación,
la cual aplica la misma operación que en la ecuación 2.11. La convolución se muestra en la
ecuación 2.13, en donde se hacen cambios de signo a consecuencia de la rotación.
w(x, y) ◦ f(x, y) =
a∑
s=−a
b∑
t=−b
w(s, t)f(x+ s, y + t) (2.12)
w(x, y) ∗ f(x, y) =
a∑
s=−a
b∑
t=−b
w(s, t)f(x− s, y − t) (2.13)
Usar la correlación o convolución para realizar el filtrado espacial es cuestión de preferencia
CAPÍTULO 2. MARCO TEÓRICO 18
Núcleo
Pixeles
vecinos
Imagen de entrada Pixel procesándose 
Producto del núcleo con
el area sobre la imagen
Pixel de salida Imagen de salida
Suma de los
productos
Figura 2.8: Representación del filtrado lineal.
[5], ya que se pueden intercambiar las ecuaciones 2.12 y 2.13 haciendo una rotación al filtro. Lo
importante es usar un filtro con su operación correcta.
Para generar un filtro de tamaño m × n se requiere especificar mn coeficientes. Estos co-
eficientes se seleccionan dependiendo de la finalidad del filtro, considerando que únicamente
implementan una suma de productos. Entre los filtros mas comunes encontramos los filtros de
suavizado (“smoothing”) y de realce (“sharpening”).
Los filtros de suavizado, o filtros pasa bajas, más utilizados son los de promedio, los cuales
calculan el promedio de la vecindad de m × n pixeles. Aqúı se encuentran los filtros de caja
(“box”) o promedio ponderado, en la figura 2.9 se aprecia un ejemplo de los coeficientes para
ambos núcleos. En estos filtros el valor obtenido se normaliza con una constante de valor igual
a la suma de los coeficientes, la principal diferencia es que en el promedio ponderado se le da
mas importancia a los pixeles cercanos al centro.
Dentro de los filtros de suavizado también se encuentra el filtro gaussiano, el cual obtiene
sus coeficientes a partir de la función gaussiana, mostrada en la ecuación 2.14. Este filtro se
utiliza para quitar las frecuencias altas en una imagen, las cuales se traducen en cambios rápidos
en los valores de los pixeles, con la finalidad de encontrar más fácilmente caracteŕısticas en la
CAPÍTULO 2. MARCO TEÓRICO 19
1 1
111
1
1 1
1
9
1
x
(a) Filtro de caja de 3×3.
4 2
121
2
1 2
1
16
1
x
(b) Filtro de promedio
ponderado de 3× 3.
Figura 2.9: Filtros de suavizado.
imagen. En la figura 2.10 se hace una comparación de una imagen con ruido contra esa misma
imagen después aplicar un filtro gaussiano; al analizar el gradiente de la imagen, en 2.10f se
puede identificar más fácilmente el limite entre las regiones negra y blanca que en 2.10c.
G(x, y) =
1√
2πσ2
e−
x2+y2
2σ2 (2.14)
(a) Imagen f1(x, y)
con ruido.
0 100 200 300 400 500 600
0
50
100
150
200
250
(b) Valores de la imagen f1(x, y),
en y = 0.
0 100 200 300 400 500 600
-200
-150
-100
-50
0
50
100
150
200
250
(c) Valores de la derivada parcial
∂
∂xf1(x, y), en y = 0.
(d) Imagen f2(x, y),
resultado de un filtro
de suavizado.
0 100 200 300 400 500 600
0
50
100
150
200
250
(e) Valores de la imagen suavizada
f2(x, y), en y = 0.
0 100 200 300 400 500 600
0
50
100
150
200
250
(f) Valores de la derivada parcial
∂
∂xf2(x, y), en y = 0.
Figura 2.10: Efecto de un filtro de suavizado en el gradiente de la imagen.
CAPÍTULO 2. MARCO TEÓRICO 20
Un filtro no lineal de suavizado es el filtro de mediana, el cual remplaza el valor del pixel por
la mediana de los valores del vecindario. Este filtro es útil cuando se tienen imágenes con ruido
impulsivo, tambiénconocido como ruido de sal y pimienta (“salt and pepper”) por introducir
pixeles blancos y negros en la imagen.
La finalidad de los filtros de realce, o pasa altas, es intensificar transiciones en la intensidad
de los pixeles. Estos filtros comúnmente utilizan la primer y segunda derivada de las imágenes.
La derivada de una función digital se basa en la diferencia de los valores de la función. En
una imagen digital estos cambios se miden entre pixeles adyacentes, al ser una función de dos
variables se utilizan derivadas parciales. La ecuación 2.15 muestra la primer derivada parcial y
2.16 la segunda derivada parcial de una imagen f(x, y).
∂f
∂x
= f(x+ 1, y)− f(x, y), ∂f
∂y
= f(x, y + 1)− f(x, y) (2.15)
∂2f
∂x2
= f(x+ 1, y) + f(x− 1, y)− 2f(x, y), ∂
2f
∂y2
= f(x, y + 1) + f(x, y − 1)− 2f(x, y)
(2.16)
Entre los filtros de realce encontramos el filtro Roberts y el filtro Sobel los cuales utilizan el
gradiente (no lineal), y el filtro Laplaciano el cual utiliza la segunda derivada. Para calcular el
gradiente de una imagen se utiliza la primer derivada, como se muestra en la ecuación 2.17.
∇f = grad(f) =
 gx
gy
 =
 ∂f∂x
∂f
∂y
 (2.17)
El gradiente nos da la dirección de la mayor tasa de cambio de f en el punto (x, y), y su
magnitud M(x, y) se puede calcular con la ecuación 2.18.
M(x, y) = mag(∇f) =
√
g2x + g
2
y (2.18)
En el caso del operador Roberts, se hace una aproximación al gradiente utilizando diferencias
cruzadas como se muestra en la ecuación 2.19, el cual produce un filtro de tamaño par (2× 2)
a diferencia del operador Sobel que usa un vecindario de (3 × 3), el cual también emplea una
aproximación al gradiente y le da mas importancia al punto medio. Las ecuaciones 2.20 y 2.21
CAPÍTULO 2. MARCO TEÓRICO 21
muestra como se aproxima el gradiente con el filtro Sobel. En la figura 2.11 se muestran los
coeficientes obtenidos para los operadores Roberts y Sobel a partir de sus ecuaciones.
gx = f(x+ 1, y + 1)− f(x, y), gy = f(x, y + 1)− f(x+ 1, y) (2.19)
gx =
∂f
∂x
= (f(x−1, y+1)+2f(x, y+1)+f(x+1, y+1))−(f(x−1, y−1)+2f(x, y−1)+f(x+1, y−1))
(2.20)
gy =
∂f
∂y
= (f(x+1, y−1)+2f(x+1, y)+f(x+1, y+1))−(f(x−1, y−1)+2f(x−1, y)+f(x−1, y+1))
(2.21)
-1 0
0 1
-10
1 0
(a) Filtro Roberts de realce.
0 0
-1-2-1
0
1 2 1
0 2
10-1
-2
-1 0 1
(b) Filtro Sobel de realce.
Figura 2.11: Filtros de realce.
Para obtener el Laplaciano de una función de dos variable, como es el caso de una imagen,
se utiliza la ecuación 2.22 y 2.23. Los coeficientes del filtro Laplaciano se muestran en la figura
2.12.
∇2f = ∂
2f
∂x2
+
∂2f
∂y2
∇2f = f(x, y − 1) + f(x− 1, y) + f(x+ 1, y) + f(x, y + 1)− 4f(x, y) (2.22)
∇2f =f(x− 1, y − 1) + f(x, y − 1) + f(x+ 1, y − 1) + f(x− 1, y) + f(x+ 1, y)
+ f(x− 1, y + 1) + f(x, y + 1) + f(x+ 1, y + 1)− 8f(x, y) (2.23)
CAPÍTULO 2. MARCO TEÓRICO 22
-4 1
010
1
0 1 0
(a) Filtro Laplaciano
sin diagonales.
-8 1
111
1
1 1 1
(b) Filtro Laplaciano
con diagonales.
Figura 2.12: Filtros Laplacianos.
2.2. Seguimiento de objetos
El seguimiento de objetos consiste en determinar la ubicación de objetos de interés en una
secuencia de imágenes. Se requiere que el seguimiento sea preciso para que sus aplicaciones
funcionen de manera correcta. Sin embargo, no es trivial desarrollar e implementar métodos
de seguimiento de objetos. Las dificultades se generan desde la adquisición de la imagen, en el
entorno, e incluso por el mismo objeto.
Los problemas en la adquisición de la imagen pueden ser debido a una baja resolución de
la cámara, las imágenes obtenidas sean borrosas, se introduzca ruido en la imagen, o que el
objeto salga del área de visión de la cámara. Las dificultades relacionadas al entorno pueden
ser causadas por cambios en la iluminación, poco contraste entre el objeto y el fondo, o porque
existen lugares donde el objeto se puede ocultar. Finalmente, el objeto puede cambiar de forma
o apariencia durante la secuencia, lo cual introduce más retos a la tarea de seguimiento.
Estas dificultades hacen que los métodos de seguimiento propuestos traten de simplificar
el problema haciendo suposiciones sobre caracteŕısticas de la secuencia de imágenes. Estas su-
posiciones pueden ser respecto a la cámara, las condiciones del entorno, o al movimiento y
caracteŕısticas del objeto. Entre los métodos más comunes de seguimiento de objetos están los
modelos basados en puntos, contornos, figuras geométricas y flujo óptico.
Los modelos basados en puntos representan al objeto con uno o varios puntos, y estiman el
desplazamiento del objeto en base a ellos. El método de Lucas-Kanade [6] considera dos funciones
f(x, y) y g(x, y), las cuales representan los valores de los pixeles en cualquier posición (x, y)
CAPÍTULO 2. MARCO TEÓRICO 23
dentro de dos imágenes. El objetivo es buscar un desplazamiento h que minimice la diferencia
entre las funciones f(x+hx, y+hy) y g(x, y) las cuales contienen la región de interés (el objeto a
seguir), la figura 2.13a muestra el desplazamiento en una dimensión y la figura 2.13b presenta su
representación en dos dimensiones. Para buscar este desplazamiento se utiliza el gradiente de la
imagen, el cual nos indica la dirección de cambio de la intensidad de los pixeles. La ecuación 2.24
muestra cómo se calcula el desplazamiento h para una dimensión. Este método funciona bien
con desplazamientos cortos, sin embargo, para desplazamientos largos se recomienda suavizar
la imagen con la desventaja de una menor eficacia.
h
G(x) - F(x)
G(x) F(x)
x
(a) Desplazamiento h en una dimensión.
f(x,y)
h
Región de interés
g(x,y)
(b) Desplazamiento de la región de interés.
Figura 2.13: Desplazamiento de la región de interés de acuerdo a Lucas-Kanade.
h =
∑
x F
′(x)[G(x)− F (x)]∑
x F
′(x)2
(2.24)
Shi-Tomasi [7] propone la utilización de puntos calculados a partir de los eigenvalores de la
imagen, y provee un método para medir la diferencia (“disimilitud”) entre las regiones de interés
original y estimada. A diferencia del detector de esquinas de Harris [8], el cual utiliza también
eigenvalores, el método de Shi-Tomasi propone considerar un valor mı́nimo en los cambios de
intensidad para que los puntos obtenidos se utilicen en el seguimiento.
En los métodos de flujo óptico, el movimiento aparente se calcula a partir del desplazamiento
de los patrones de intensidad de la imagen. Las discontinuidades en el flujo óptico ayudan a
segmentar regiones que pertenecen a diferentes objetos. Estos métodos tienen dificultades cuan-
CAPÍTULO 2. MARCO TEÓRICO 24
do los desplazamientos del objeto son grandes, se encuentran puntos que no cambian con sus
vecinos, o existen variaciones de luz que se interpretan de manera incorrecta como movimiento.
Debido a que el flujo óptico está basado comúnmente en el gradiente de la imagen, se utilizan
filtros pasa baja antes de hacer el seguimiento para evitar un cálculo incorrecto por las varia-
ciones de intensidad. El método de Horn [9], para reducir algunos de los problemas del flujo
óptico, considera que la intensidad de los pixeles dentro del objeto es constante, y que estos se
desplazan en la misma dirección.
Los métodos anteriores se basan en la estimación del movimiento y requieren saber la ubica-
ción del objeto en el cuadro anterior para continuar el seguimiento. Sin embargo, comúnmente
fallan cuando el objeto se oculta o sale del área de visión de la cámara, y aunque el objeto no
salga de vista, pueden divergir. Como alternativa se utiliza la detección de objetos.
Al utilizar detección de objetos en el seguimiento se hace la búsqueda del objeto en cada
imagen de la secuencia. A diferencia de los métodos de seguimiento tradicionales, no fallan
cuando el objeto no es visible en la imagen, al presentar desplazamientos muy grandes, y no
requieren la posición del objeto en la imagen previa. Sin embargo, requieren que la apariencia o
las caracteŕısticas delobjeto de interés se conozcan antes de empezar el seguimiento. Además,
debido a que el modelo permanece constante durante toda la secuencia, si el objeto cambia su
forma o apariencia suelen fallar.
El método “Tracking-Learning-Detection” (TLD) [3] propone utilizar seguimiento de obje-
tos basado en Lucas-Kanade junto con la detección de objetos en cascada [10] para cubrir las
desventajas de ambos, aplicando un modelo de aprendizaje para ir entrenando el detector con-
forme se obtienen más imágenes (en ĺınea). Su desventaja es la complejidad computacional del
detector; su autor reportó que el método trabaja en tiempo real únicamente en imágenes QVGA
y se recomienda buscar maneras de acelerar los algoritmos para poder mantener el tiempo de
procesamiento con imágenes más grandes.
2.3. Aceleración de algoritmos
La mayoŕıa de los algoritmos y operaciones en el procesamiento de imágenes consumen
mucho tiempo y son computacionalmente complejas. Por esta razón se buscan diferentes formas
CAPÍTULO 2. MARCO TEÓRICO 25
de acelerar los algoritmos para mejorar su tiempo de ejecución. Para poder mejorar la eficiencia
de un algoritmo se debe entender cómo se ejecutan las aplicaciones en una computadora.
Tradicionalmente los programas corren de manera serial. Un programa se divide en un con-
junto de instrucciones, y las instrucciones se ejecutan en un solo procesador, una operación por
cada ciclo de reloj. De modo que si queremos disminuir el tiempo de procesamiento se debe
incrementar la frecuencia del reloj, o buscar un algoritmo más eficiente para realizar la misma
tarea. No siempre existen algoritmos más eficientes que puedan resolver el problema, y se opta
por incrementar la frecuencia. Sin embargo, existe un ĺımite para aumentar la frecuencia del
reloj de los procesadores. Por esta razón, como alternativa, los fabricantes se han inclinado por
añadir más núcleos de procesamiento en el mismo chip. Para maximizar el uso de este tipo de
procesadores se deben diseñar programas que utilicen todos los núcleos, es decir, implementar
cómputo paralelo.
El cómputo paralelo utiliza múltiples elementos de procesamiento simultáneamente para
ejecutar un programa. La tarea a realizar se divide en partes que se puedan resolver concu-
rrentemente, y cada parte se divide a su vez en instrucciones de modo que cada elemento de
procesamiento pueda ejecutar las instrucciones de las diferentes partes al mismo tiempo. El
cómputo paralelo no solo nos permite ahorrar tiempo, sino que nos da la capacidad de resolver
problemas más grandes y complejos, los cuales seŕıan imprácticos tratar de solucionar con un
solo elemento de procesamiento.
La arquitectura de las computadoras paralelas mantiene el diseño básico de von Neumann.
Esta arquitectura se compone de cuatro componentes principales: memoria, unidad de control,
unidad aritmético lógica, y las entradas y salidas. La unidad de control y la unidad aritmético
lógica componen la unidad central de procesamiento (CPU). En la memoria se almacenan tanto
las instrucciones del programa como los datos que se usan. Las instrucciones son un tipo de
datos que le indican a la computadora qué operación realizar. Los datos son información que
utiliza el programa. La unidad de control obtiene instrucciones y datos de la memoria. Esta
coordina las operaciones que se tienen que realizar en la unidad aritmético lógica, y controla
las entradas y salidas. Las operaciones aritméticas básicas se realizan en la unidad aritmético
lógica. Finalmente las entradas y salidas se utilizan para comunicarse con el usuario.
CAPÍTULO 2. MARCO TEÓRICO 26
La diferencia entre las computadoras seriales y las paralelas es que, las últimas no están limi-
tadas a una sola CPU. Para clasificar el tipo de computadora podemos recurrir a la taxonomı́a
de Flynn, la cual se muestra en la figura 2.14. La taxonomı́a de Flynn se basa en el número de
instrucciones y datos concurrentes que puede procesar. Existen cuatro clasificaciones:
1. Una instrucción, un dato (SISD).
Son las únicas computadoras seriales en la clasificación. Ejecutan una sola instrucción y
un dato en cada ciclo de reloj. Aqúı se ubican los tipos de computadoras más antiguas
con un solo procesador o núcleo.
2. Una instrucción, múltiples datos (SIMD).
Todos los elementos de procesamiento ejecutan la misma instrucción sobre datos distintos.
Las unidades de procesamiento gráfico (GPUs) entran en esta categoŕıa.
3. Múltiples instrucciones, un dato (MISD).
En esta clasificación se trabaja el mismo dato con diferentes instrucciones. Estas compu-
tadoras no son comunes. Se puede utilizar donde se requiere redundancia y tolerancia a
errores.
4. Múltiples instrucciones, múltiples datos (MIMD).
Cada elemento de procesamiento puede ejecutar diferentes instrucciones sobre diferentes
datos. Este es el tipo de computadora paralela más común. Las computadoras conectadas
en red (clústeres) y computadoras con varios procesadores o núcleos entran aqúı.
Paralelizar aplicaciones secuenciales es dif́ıcil [11], no tan solo se necesita utilizar un equipo
con capacidad de cómputo paralelo, se requiere analizar el problema e identificar si es posible
diseñar o modificar un programa para que trabaje concurrentemente. A pesar de sus dificul-
tades, el computo paralelo tiene aplicaciones en la renderización de imágenes, codificación y
decodificación de v́ıdeo [12], simulaciones en f́ısica de part́ıculas [13] y cinética qúımica [14], la
transformada discreta de Fourier [15], y en operaciones criptográficas [16] por nombrar algunas.
Una alternativa a las plataformas tradicionales para el cómputo paralelo tales como las uni-
dades de procesamiento gráfico de propósito general (GPGPUs) y los procesadores multinúcleo
CAPÍTULO 2. MARCO TEÓRICO 27
Elemento de procesamiento
MIMDSIMD
SISD MISD
InstruccionesInstrucciones
D
at
os
D
at
os
D
at
os
D
at
os
InstruccionesInstrucciones
Figura 2.14: Taxonomı́a de Flynn.
son las FPGAs.
2.4. Field programmable gate array
Todos los dispositivos digitales se basan en una representación binaria de la información.
Todo se encuentra en uno de dos niveles lógicos, cero y uno. F́ısicamente esta representación
binaria se hace eligiendo dos niveles de voltaje: un nivel, definido como tierra, es el cero, y el
otro nivel, conocido como voltaje o Vcc, se utiliza como uno. Para emplear estos dos niveles
de voltajes en circuitos digitales se utilizan transistores. Los transistores se emplean como in-
terruptores, o como amplificadores. Su función como interruptores es de gran importancia en
los dispositivos digitales dado que todas las operaciones lógicas binarias se pueden realizar con
ellos. Esta caracteŕıstica fue lo que llevó al desarrollo de las compuertas lógicas digitales. Entre
CAPÍTULO 2. MARCO TEÓRICO 28
las compuertas lógicas básicas encontramos las puertas NOT (negación), OR (suma lógica) y
AND (producto lógico); la puerta XOR (OR-EXCLUSIVA) se forma a partir de las básicas, y,
las puertas NAND, NOR y XNOR son el complemento de la AND, OR y XOR respectivamen-
te. Adicionalmente podemos considerar el BUFFER (variable lógica) como otra compuerta la
cual realiza la función booleana de igualdad. Cada compuerta lógica tiene una tabla de verdad
asociada, la cual relaciona los valores de la salida con el valor de las entradas. En la figura 2.15
podemos ver el śımbolo de las puertas lógicas básicas, su función lógica y sus tablas de verdad.
Las compuertas lógicas son la base de todos los dispositivos digitales.
XOR
OR
AND
NOT A O
B
A
O
B
A
O
BUFFER A O
A B O
0 0 0
0 1 0
1 0 0
1 1 1 
A B O
0 0 0
0 1 1
1 0 1
1 1 1 
A B O
0 0 0
0 1 1
1 0 1
1 1 0 
A O
0 1
1 0
A O
0 0
1 1
Nombre Simbolo Función lógica Tabla de verdad
O = AB
O = A + B
O = A + B
O = A
O
O = A
B
A
O
Figura2.15: Compuertas lógicas.
Las FPGAs son un arreglo de compuertas lógicas programables. Surgieron por la necesidad
de hacer modificaciones sobre las tarjetas de circuitos integrados después de haberse fabricado.
Los cambios se deb́ıan a errores en el diseño, actualización de los estándares, o modificaciones en
las especificaciones del sistema. Después de realizar las correcciones se deb́ıan volver a fabricar las
CAPÍTULO 2. MARCO TEÓRICO 29
tarjetas de circuitos, por lo que desarrollar sistemas espećıficos que cambiaban frecuentemente
dejó de ser práctico. Los procesadores programables, tales como microcontroladores, provéıan
cierta libertad para hacer cambios o correcciones en el sistema después de su producción. Sin
embargo, las conexiones entre los componentes permanećıan fijas. En la búsqueda de desarrollar
dispositivos con conexiones programables surgió el concepto de lógica programable en campo
(“Field programmable logic”) y más adelante las FPGAs.
Los microcontroladores son reconfigurables y compactos, sin embargo, se tiene un conjunto
definido de instrucciones por lo que el diseño de software se debe adaptar correspondientemente.
No aśı en una FPGA, donde se puede hacer cualquier diseño dentro de los ĺımites de su tamaño;
los limites dependen principalmente de la cantidad de elementos que contiene la FPGA para
configurar.
Los elementos básicos de las FPGAs son los bloques lógicos configurables (CLB). Los bloques
lógicos contienen multiplexores, flip flops, y tablas de búsqueda (LUT). Estos tres elementos
se basan en compuertas lógicas. Los multiplexores se pueden considerar como conmutadores,
tienen varias entradas de la cual se selecciona una para la salida. Los flip flops se utilizan como
elementos de memoria (registros) y almacenan un solo bit. Las tablas de búsqueda implementan
tablas de verdad para un conjunto de entradas; los valores de salida se guardan en registros
y el valor de salida se selecciona con multiplexores. Adicionalmente las FPGAs pueden contar
con bloques de memoria (BRAM) y elementos de procesamiento digital de señales (DSP). Los
bloques de memoria nos permiten guardar más cantidad de información que con tablas de
búsqueda o flip flops, pero su número se encuentra limitado en la FPGA. Los DSPs son bloques
lógicos dedicados para operaciones lógicas y aritméticas. Entre las operaciones que nos permiten
hacer los DSPs están la multiplicación y adición de números binarios directamente sin tener que
implementar diseños complejos. Todos los componentes de una FPGA tienen una interconexión
programable a través de interruptores. Estos recursos de interconexión ocupan gran parte de
la FPGA [17] y sirven también para comunicar con elementos fuera de la FPGA a través de
bloques de entradas y salidas (IOBs). La figura 2.16a nos muestra la estructura básica de una
FPGA, y la figura 2.16b .
En las FPGAs trabajamos con áreas de bloques lógicos y debido a la gran cantidad de
CAPÍTULO 2. MARCO TEÓRICO 30
Bloques lógicos con�gurables
Bloques de entradas y salidas
Recursos de interconexión
(a) Estructura de una FPGA.
in1
in2
sel
out
Multiplexor
clock
/write
d
q
Flip �op
LUT
0/1
0/1
sel
out
in1
in2
multiplexor
�ip �op
(b) Elementos básicos de los CLBs.
Figura 2.16: FPGAs y CLBs.
bloques que poseen y su capacidad de interconexión se pueden crear aplicaciones paralelas en
hardware.
Para programar una FPGA se utilizan comúnmente lenguajes de descripción de hardware
(HDL). Los dos lenguajes mas conocidos son VHDL(“VHSIC Hardware Description Langua-
ge”, donde VHSIC está por “Very High Speed Integrated Circuit”) y Verilog (de la unión de
“Verification” y “Logic”). Estos lenguajes se usan para representar la operación, estructura y
conexión de circuitos electrónicos digitales, describiendo como se manipulan y mueven los da-
tos entre los diferentes elementos. También se encuentran lenguajes con un nivel más alto de
abstracción conocidos como HLS (“High Level Synthesis”) donde se pueden utilizar lenguajes
de programación como C o C++ para describir los algoritmos que se desean implementar junto
con directivas (“pragma”) que indican como procesar ciertas partes del código, y esto se traduce
a un lenguaje HDL.
Caṕıtulo 3
Metodoloǵıa
3.1. Propuesta de solución
El primer paso consistió en seleccionar el método de seguimiento de objetos. Se eligió el
método de “Tracking-Learning-Detection” (TLD) de Z. Kalal. El método TLD tiene potencial
porque combina el seguimiento tradicional y la detección de objetos, los cuales usualmente se
emplean de manera independiente. Además, la detección de objetos puede ser utilizada sin un
modelo de objeto previo al seguimiento, debido a que cuenta con aprendizaje en ĺınea. La parte
de aprendizaje inicializa al detector creando un modelo del objeto en base a la primera imagen,
al cual va actualizando conforme se obtienen más cuadros. Sin embargo, su principal desventaja
es el alto costo computacional. El detector tiene que hacer una búsqueda en cada imagen de
la secuencia, por toda la imagen, para todas las apariencias del objeto observadas en cuadros
anteriores. Por esta razón no es eficiente al utilizar imágenes de gran resolución.
Para acelerar este método se debe analizar y entender las partes donde se consume el mayor
tiempo de procesamiento. Una ventaja de este método es que su autor desarrolló una implemen-
tación en MATLAB. A partir de esta implementación podemos hacer un perfil (“profiling”) del
programa midiendo el tiempo de ejecución de las diferentes rutinas, y de este modo determinar
las partes con potencial para realizar una aceleración. Se realizó el perfil del algoritmo y la figura
3.1 muestra los datos obtenidos. Las dos partes individuales que consumen el mayor tiempo de
procesamiento son el redimensionamiento de imágenes y el suavizado de la imagen, utilizando
12.64 % y 11.54 % del tiempo total respectivamente. La función de redimensionamiento ocupa
31
CAPÍTULO 3. METODOLOGÍA 32
67.26%
19.80%
12.45%
0.49% Método TLD
Mostrar imagen
Inicialización
Otros
(a) Porcentajes de tiempos de ejecución principales.
69.38%
17.16%
7.09%
3.30%
2.61%
0.46% Detección
Suavizar imagen
Seguimiento
Aprendizaje
Obtener imagen
Otros
(b) Porcentajes de tiempos de ejecución del método
TLD.
66.38%
27.09%
3.51%
2.03%
0.99% Evaluar patrones
Redimensionar imagen
Clasi�cador NN
Obtener patrones
Otros
(c) Porcentajes de tiempos de la detección de obje-
tos.
Figura 3.1: Perfil del programa del método de seguimiento TLD.
27.09 % de la tarea de detección, ver figura 3.1c, la cual a su vez toma 69.38 % del método TLD,
ver figura 3.1b, mientras que el suavizado de imágenes emplea 17.16 % del método TLD. Este
último hace uso del 67.26 % del tiempo total de ejecución, ver figura 3.1a, consiguiendo de esta
manera los porcentajes de ejecución de 12.64 % y 11.54 % antes mencionados.
La siguiente etapa fue elegir la plataforma para realizar la aceleración de los algoritmos. Se
eligió la tarjeta Zybo de la marca Xilinx debido a que contiene una FPGA y un microcontrolador,
además se consideró su portabilidad y precio. La ventaja de la tarjeta Zybo es que se pueden
dividir labores. Las tareas de comunicación y las partes secuenciales del método de seguimiento
pueden ser ejecutadas en el microcontrolador, y las partes de cómputo intensivo se pueden
CAPÍTULO 3. METODOLOGÍA 33
acelerar en la FPGA. Por tal razón se decidió hacer el desarrollo de software en lenguaje C, y
utilizar un lenguaje de descripción de hardware (HDL) o de śıntesis de alto nivel (HLS) para la
FPGA.
3.2. Desarrollo de software
Las secciones del desarrollo de software se concentraron en:
Leer y guardar una imagen.
Aplicar un filtro de convolución gaussiano.
Realizar redimensionamiento de la imagen.
Para leer y guardar la imagen se estudiaron los formatos más comunesde imágenes; jpeg
(“Joint Photographic Experst Group”), bmp (“Bitmap”), y png (“Portable Network Grap-
hics”). Debido a que la implementación en software se hizo en bajo nivel sin libreŕıas de visión
computacional, se optó por el formato bmp por ser el de menor complejidad.
Primero, se propusieron dos estructuras, img t y filter t, para almacenar la información
relacionada a las imágenes y a los filtros respectivamente durante la ejecución del programa.
Estas estructuras se muestran en el anexo A.2.
Las funciones img load bmp y img save bmp se desarrollaron para poder leer y guardar
imágenes en el formato de mapa de bits. Los anexos A.4 y A.5 están dedicados a la implementa-
ción de estás dos funciones. La lectura de un archivo bmp nos da el ancho y largo de la imagen,
el número de bits por pixel y un arreglo con los valores de los pixeles. El número de bits es
importante para distinguir entre imágenes a color e imágenes en escala de grises.
Las imágenes a color se convierten a escala de grises en la función img rgb to gray utilizando
la ecuación para la obtención de la señal luma, Y = 0.299R + 0.587G + 0.114B, descrita en el
caṕıtulo 1. En el anexo A.3 se encuentra el código de esta función. La conversión a escala de
grises es necesaria ya que estas imágenes requieren menos tiempo para procesarse, sin perder
información de regiones y esquinas durante la conversión.
Después de contar con la capacidad de leer y escribir imágenes, se abordó el problema del
filtro de convolución gaussiano, el cual se divide en dos partes. La primera consiste en obtener
CAPÍTULO 3. METODOLOGÍA 34
los coeficientes para el filtro o núcleo, la segunda trata directamente con la aplicación del filtro
lineal sobre la imagen.
Para calcular los coeficientes del núcleo se utiliza la función gaussiana. Las ecuaciones 3.1 y
3.2 muestran la función gaussiana G(x) y G(x, y) para una y dos dimensiones respectivamente
con media µ = 0 y varianza σ2.
G(x) =
1√
2πσ2
e−
x2
2σ2 (3.1)
G(x, y) =
1√
2πσ2
e−
x2+y2
2σ2 (3.2)
Las funciones gaussian filter 1D y gaussian filter 2D calculan los coeficientes para un
filtro a partir de la función gaussiana, con tamaño y desviación estándar σ como parámetros.
Estas funciones se describen en el anexo A.3.
Una vez obtenidos los coeficientes para el núcleo, se requiere aplicar el filtro lineal de convo-
lución. El filtrado lineal de convolución en una dimensión se define en la ecuación 3.3, mientras
que 3.4 muestra el filtrado en dos dimensiones.
y[n] = x[n] ∗ h[n] =
∞∑
k=−∞
x[k] · h[n− k] (3.3)
y[m,n] = x[m,n] ∗ h[m,n] =
∞∑
j=−∞
∞∑
i=−∞
x[i, j] · h[m− i, n− j] (3.4)
Donde x[m,n] es la imagen y h[m,n] es el filtro. Dado que la convolución es conmutativa,
la ecuación 3.4 se puede reescribir como 3.5.
y[m,n] = h[m,n] ∗ x[m,n] =
∞∑
j=−∞
∞∑
i=−∞
h[i, j] · x[m− i, n− j] (3.5)
Al estudiar el filtrado lineal de convolución se encontró que la operación de filtrado se puede
separar si un filtro de dos dimensiones se logra representar como el producto de dos filtros de
una dimensión. La separación de un filtro se muestra en la ecuación 3.6.
h[m,n] = h1[m] · h2[n] (3.6)
CAPÍTULO 3. METODOLOGÍA 35
Al sustituir la ecuación 3.6 en 3.5 y desarrollar obtenemos 3.7. En esta última ecuación se
está realizando el filtrado de la imagen x en una dimensión con el filtro h1, y con el resultado
se realiza de nuevo la operación con el filtro h2. De acuerdo a la ecuación 3.3, en 3.7 se realizan
dos operaciones de convolución lineal. Debido a que la convolución es asociativa, el orden de los
filtros no afecta al resultado.
y[m,n] = h[m,n] ∗ x[m,n] =
∞∑
j=−∞
∞∑
i=−∞
h[i, j] · x[m− i, n− j]
=
∞∑
j=−∞
∞∑
i=−∞
h1[i] · h2[j] · x[m− i, n− j]
=
∞∑
j=−∞
h2[j] ·
[
∞∑
i=−∞
h1[i] · x[m− i, n− j]
]
(3.7)
Al hacer esta separación se reduce la complejidad computacional del filtrado. De la ecuación
3.4 se determina que la operación de convolución toma mn multiplicaciones y sumas para cada
elemento x[i, j], mientras que en la ecuación 3.7 se reduce a m + n multiplicaciones y sumas
para cada elemento x[i, j]. En el programa se desarrollaron los dos tipos de convolución en las
funciones img convolution single pass y img convolution double pass. En el anexo A.3 se
encuentra el código de ambas funciones.
La tercera etapa del desarrollo fue implementar el redimensionamiento de imágenes. El
tamaño de una imagen se puede cambiar con diferentes métodos. Los tres métodos más comunes
son la interpolación bicúbica, bilineal, y por los vecinos más cercanos (“nearest-neighbors”). La
figura 3.2 muestra una comparación entre los tres métodos de interpolación.
El método de los vecinos más cercanos es el más rápido de los tres, pero no es tan exacto
como los otros dos. Para cada pixel de la imagen de salida se selecciona el más cercano de los
cuatro vecinos posibles en relación a su posición sobre la imagen original.
El método de interpolación bilineal es el producto de dos funciones lineales. En la ecuación
3.8 se muestra cómo se calcula la interpolación bilineal. Este método entrega mejores resulta-
dos a comparación del método de los vecinos más cercanos, sin embargo, son necesarias más
CAPÍTULO 3. METODOLOGÍA 36
Lineal Cúbica
2D vecinos
más cercanos
Bilineal Bicúbica
1D vecinos
más cercanos
Figura 3.2: Comparación de métodos de interpolación.
operaciones.
f(x, y) =
1∑
i=0
1∑
j=0
aijx
iyi = a00 + a10x+ a01y + a1xy (3.8)
donde,
a00 = f(0, 0),
a10 = f(1, 0)− f(0, 0),
a01 = f(0, 1)− f(0, 0),
a11 = f(1, 1) + f(0, 0)− f(1, 0)− f(0, 1)
Finalmente, el método de interpolación bicúbica [18] es el de mayor complejidad computacio-
nal, pero reconstruye con mayor exactitud la imagen original. Este método requiere 16 vecinos
para calcular un pixel de salida, a diferencia de los dos métodos anteriores que solo requieren 4.
La forma de realizar la interpolación cúbica se muestra en la ecuación 3.9, esta se debe aplicar
horizontal y verticalmente para calcular la interpolación bicúbica.
CAPÍTULO 3. METODOLOGÍA 37
f(x) = f(n+ u) = INT CUB(pn−1, pn, pn+1, pn+2)
=
1
2
[
1 u u2 u3
]

0 2 0 0
−1 0 1 0
2 −5 4 −1
−1 3 −3 1


pn−1
pn
pn+1
pn+2

f(x) =
1
2
((−pn−1+3pn−3pn+1+pn+2)u3+(2pn−1−5pn+4pn+1−pn+2)u2+(−pn−1+pn+1)u+2pn)
(3.9)
donde,
x = n+ u,∀ n ∈ Z
n = bxc
u = x− n = x− bxc, 0 ≤ u < 1
pn−1 = f(n− 1)
pn = f(n)
pn+1 = f(n+ 1)
pn+2 = f(n+ 2)
Los tres métodos de redimensionamiento se implementaron en el programa en las funciones
img resize bicubic, img resize bilinear, y img resize nearest, las cuales se encuentran
en el anexo A.3.
En la PC la lectura y escritura de archivos se da de manera natural debido a que cuenta
con un sistema operativo, el cual se encarga de comunicarse con el disco duro. Sin embargo,
en un microcontrolador se debe implementar y utilizar un sistema de archivos para trabajar
con medios de almacenamiento. Por lo que, al portar el código de la PC al microcontrolador de
la Zybo, se tuvo la necesidad de agregar la habilidad de lectura y escritura. En particular se
requiere utilizar una tarjeta micro SD (“Secure Digital”), en donde se van a leer y escribir las
CAPÍTULO 3. METODOLOGÍA 38
imágenes.
La mayoŕıa de las tarjetas de memoria de la familia SD se utilizan con el sistema de archivos
FAT (“File Allocation Table”). Las tarjetas no implementan un sistema de archivos por si
mismas, sino que soportan diferentes interfaces de comunicación. Comúnmente se utiliza la
interfaz SPI (“Serial Peripheral Interface bus”). La interfaz de comunicación SPI es śıncrona,
de tipo maestro-esclavo; un solo maestro, con soporte para múltiples esclavos. Esta interfaz
cuenta con una señal para el reloj (SCLK, por “Serial Clock”), una para la transmisión de datos
(MOSI, por “Master Out, Slave In”), otra para la recepción de datos (MISO, por “Master In,Slave Out”), y una para indicar con qué dispositivo se desea comunicar (SS, por “Slave Select”).
La figura 3.3 muestra una conexión t́ıpica con esta interfaz.
SPI
Master
SCLK
MOSI
MISO
SS1
SS2
SS3
SPI
Slave
SCLK
MOSI
MISO
SS
SPI
Slave
SCLK
MOSI
MISO
SS
SPI
Slave
SCLK
MOSI
MISO
SS
Figura 3.3: Conexión con interfaz SPI.
El sistema de archivos FAT se construye sobre la interfaz de comunicación. Para reducir el
tiempo de desarrollo se buscó una implementación del sistema de archivos FAT. Se encontró un
módulo diseñado en C que implementa este sistema de archivos llamado FatFs. Sin embargo,
requiere de la interfaz de comunicación con los medios de almacenamiento. El kit de desarro-
llo de software (SDK) de Xilinx cuenta con una interfaz para tarjetas SD y sobre ella, una
versión del módulo FatFs. De este modo se continuó con la migración del código de la PC al
CAPÍTULO 3. METODOLOGÍA 39
microcontrolador. En la figura 3.4 se aprecia el proceso común para desarrollar aplicaciones en
microcontroladores o sistemas embebidos con el módulo FatFs.
Aplicación
del usuario Módulo FatFs Capa de comunicación con disco I/O Medio
Aplicación �.c
�.h diskio.h
integer.h�con�g.h
device.h
mmc.c spi.c
MMC/SD
SPI
spi_xchg()disk_read()f_open()
call
include
Figura 3.4: Sistemas de archivos en microcontroladores.
Dentro de las modificaciones que se realizaron están las funciones de lectura y escritura de
los archivos bmp, las cuales se adaptaron para utilizar las funciones del módulo FatFs. También
se agregó la función para comunicación con el módulo en la FPGA con el accesso a memoria
directo. La adaptación del código se encuentra en el anexo B, mientras que el funcionamiento
del acceso a memoria directo se describe la sección 3.3.
3.3. Desarrollo en FPGA
Se eligió hacer el desarrollo de los módulos utilizando el lenguaje VHDL debido a que permite
trabajar en un nivel de abstracción mayor que los diseños a nivel de compuertas lógicas, y con
un mayor control que con śıntesis de alto nivel. El desarrollo en la FPGA se dividió en cuatro
partes:
Comunicación con el microcontrolador.
Representación de números reales.
Implementación del filtro de convolución.
Implementación de la interpolación bicúbica.
CAPÍTULO 3. METODOLOGÍA 40
Existen diferentes maneras de comunicar la FPGA con el microcontrolador. Entre las di-
ferentes opciones se encuentran los protocolos de comunicación AXI4: AXI4-Full, AXI4-Lite y
AXI4-Stream. Estas interfaces provienen de la arquitectura de bus avanzada para microcon-
trolador (AMBA, por “Advanced Microcontroller Bus Architecture”) en su cuarta generación:
interfaz extensible avanzada (AXI4, por “Advanced eXtensible Interface”). La interfaz AXI4 es
un estándar abierto diseñado para conectar y administrar bloques dentro de diseños en sistemas
en chip (SoC, por “System on a chip”), al cual pertenece la tarjeta Zybo.
La comunicación con AXI4 se realiza entre maestro-esclavo, el maestro inicia una transacción
y el esclavo responde. Una transacción se refiere a la transferencia de datos de un punto a otro.
Para AXI4-Full y AXI4-Lite existen 5 canales que conectan al maestro con el esclavo: respuesta
de escritura (“write response channel”), escritura de dirección (“write address channel”), escri-
tura de datos (“write data channel”), lectura de dirección (“read address channel”), y lectura
de datos (“read address channel”). La figura 3.5a muestra los canales y las transacciones entre
maestro y esclavo con el protocolo AXI4-Full.
La interfaz AXI4-Lite es un subconjunto del protocolo AXI4-Full, creada para simplificar la
comunicación, de manera que el diseño y la validación de los módulos requirieran menos tiempo
para su desarrollo. La principal diferencia entre las dos interfaces es que en la AXI4-Lite las
transacciones tienen un tamaño de ráfaga (“burst”) de 1; solo se puede transferir 1 dato por
cada transacción. Mientras que en AXI4-Full se pueden mandar hasta 256 datos por transacción,
con el costo de una mayor complejidad para la interfaz. La diferencia entre la comunicación con
AXI4-Full y AXI4-Lite se puede apreciar en la figura 3.5.
Por otro lado, la interfaz AXI4-Stream solo cuenta con un canal que se utiliza para datos
(“data channel”). No cuenta con canal para indicar la dirección sobre la cual se van a escribir los
datos, ni canal para indicar el resultado de la escritura, ademas la comunicación solo se da desde
el maestro hacia el esclavo. Sin embargo, no tiene ĺımite para el tamaño de las transferencias.
La arquitectura del protocolo AXI4-Stream se muestra en la figura 3.5c.
De las tres interfaces AXI4 se eligió la interfaz AXI-Lite por su simplicidad.
El siguiente paso es representar números reales en la FPGA. Tanto el filtro gaussiano como la
interpolación bicúbica requieren utilizar números reales para calcular el resultado. Los números
reales se representan digitalmente a través números con punto flotante o punto fijo. El instituto
de ingenieros eléctricos y electrónicos (IEEE, por “Institute of Electrical and Electronics Engi-
CAPÍTULO 3. METODOLOGÍA 41
Master
interface
Slave
interface
Address
and
control
Read
data
Read
data
... Read
data
Read address channel
Read data channel
AXI4-Full Read
Write
response
Address
and
control
Master
interface
Slave
interface
Write
data
Write
data
... Write
data
Write data channel
Write address channel
Write response channel
AXI4-Full Write
(a) Transacciones con la interfaz AXI4-Full.
Master
interface
Slave
interface
Address
and
control
Read
data
Read address channel
Read data channel
AXI4-Lite Read
Write
response
Address
and
control
Master
interface
Slave
interface
Write
data
Write data channel
Write address channel
Write response channel
AXI4-Lite Write
(b) Transacciones con la interfaz AXI4-Lite.
Master
interface
Slave
interfaceData
...Data Data
Data channel
AXI4-Stream Data Transfer
(c) Transferencia de datos con el protocolo AXI4-
Stream.
Figura 3.5: Transacciones en las interfaces AXI4-Full y AXI4-Lite.
CAPÍTULO 3. METODOLOGÍA 42
neers”) especifican diferentes precisiones para números de punto flotante, basadas en la notación
cient́ıfica. Entre las más comunes está el formato de precisión sencilla (“Single-precision floating-
point format”) y el formato de precisión doble (“Double-precision floating-point format”). El
formato de precisión sencilla utiliza 32 bits: 1 bit para el signo, 8 bits para el exponente, y 23
bits para la mantisa; esto provee de 6 a 9 cifras significativas. Mientras que la precisión doble
utiliza 64 bits: 1 bit para el signo, 11 bits para el exponente, y 52 bits para la mantisa; lo cual
nos proporciona de 15 a 17 cifras significativas. Los números de punto flotante nos permiten re-
presentar un rango de números mayor que con punto fijo, a expensas de una mayor complejidad.
En los números de punto fijo, se debe conocer el rango y la precisión deseada para determinar el
número de bits necesarios y la ubicación de estos en relación al punto ráız (decimal o binario).
Los números enteros se pueden considerar un caso especial del formato con punto fijo, eligiendo
el punto en la posición cero. Para desarrollar las operaciones de filtrado y redimensionamiento
se eligió utilizar números con punto fijo, ya que se conoce de antemano los valores y la precisión
que se requieren, ademas de que su implementación es menos compleja.
El propósito de utilizar una FPGA para las operaciones en imágenes es crear aplicaciones
que trabajen concurrentemente los datos. Secuencialmente, el tiempo que se tarda en procesar
una imagen es aproximadamente igual al tiempo que se tarda en procesar un pixel multiplicado
por el número de pixeles. Si segmentamos la tarea (“pipelining”), no disminuimos el tiempo que
tarda en procesarse un pixel pero incrementamos el número de pixeles que se pueden procesar
concurrentemente.

Continuar navegando

Materiales relacionados