Está en la página 1de 43

i

Contenido
1. Introducción .................................................................................................................................... 1
1.1. Estado del arte .......................................................................................................................... 2
1.1.1. Navegación autónoma ........................................................................................................ 2
1.1.2 profundidad a partir de movimiento .................................................................................. 4
1.2. Hipótesis ................................................................................................................................... 6
2. Objetivos ......................................................................................................................................... 6
2.1. General ..................................................................................................................................... 6
2.2. Específicos ............................................................................................................................... 6
3. Fundamento teórico ......................................................................................................................... 7
3.1 Navegación autónoma ............................................................................................................... 7
3.2 Procesamiento de imágenes ....................................................................................................... 7
3.3 Filtros ......................................................................................................................................... 8
3.4 Estereovisión ............................................................................................................................. 9
3.4.1 Geometría epipolar ............................................................................................................ 10
3.4.2 Rectificación ..................................................................................................................... 12
3.4.3 Técnicas basadas en correlación ....................................................................................... 12
3.4.4 Mapas de disparidad.......................................................................................................... 14
3.5 Flujo óptico ............................................................................................................................. 16
3.5.1 Foco de expansión............................................................................................................. 17
3.5.2 Tiempo de contacto .......................................................................................................... 17
3.5.3 Algoritmos de flujo óptico basados en correlación ........................................................... 18
3.5.4 Profundidad a partir del movimiento ................................................................................ 19
3.6 Arquitecturas reconfigurables para el procesamiento paralelo en sistemas embebidos .......... 20
3.6.1 Arquitectura FPGA ........................................................................................................... 20
3.6.1.1 VHDL ......................................................................................................................... 21
3.6.2. Arquitectura GPU ............................................................................................................ 23
3.6.2.1. CUDA ...................................................................................................................... 24
4. Materiales y métodos .................................................................................................................... 25
4.1. Adquisición de imágenes ........................................................................................................ 26
4.2. Preprocesamiento de imágenes ............................................................................................... 26
4.3. Flujo óptico ............................................................................................................................ 27
4.4. Profundidad a partir del movimiento ...................................................................................... 28
4.5. Procesamiento paralelo en GPU ............................................................................................. 29

ii
5. Resultados y Discusiones .............................................................................................................. 31
5.1. Estimación de profundidad ..................................................................................................... 31
5.2. Procesamiento en GPU ........................................................................................................... 33
5.3. Sistema embebido para pruebas.............................................................................................. 34
6. Conclusiones ................................................................................................................................. 35
7. Referencias biblográficas .............................................................................................................. 36

iii
1. Introducción
En zonas de desastre un robot autónomo es indispensables para la búsqueda y rescate.
Este permite el acceso a espacios reducidos o peligrosos (incluso ambos) para explorar el
terreno sin arriesgar la vida humana. En múltiples áreas se hace uso de robots autónomos,
siendo estos indispensables para determinadas tareas, desde el acceso a espacios reducidos
para explorar hasta la entrega y envío de paquetes. Debido a esto, múltiples trabajos utilizan
navegación autónoma [1, 2]. Existen diferentes enfoques para navegación autónoma. Una
alternativa utiliza sensores ultrasónicos [3], que mediante su modelado matemático extraen
información del ambiente. Desafortunadamente, estos dispositivos son sensibles a ruidos y
se limitan a medir un punto específico de la escena. Esto es una limitación importante, ya
que desconocer parcialmente o totalmente un ambiente puede causar colisiones. Existen
alternativas que utilizan algoritmos de aprendizaje [4, 5]. Dichos trabajos aprenden la
relación entre la información de profundidad de la escena y sus características a partir de una
imagen RGB. En la mayoría de los casos, estos suelen utilizar redes convolucionales a partir
de un enfoque supervisado, las que suelen proporcionar un alto rendimiento en escenarios
con cambios de iluminación, rotación y traslación. Sin embargo, estos trabajos necesitan
amplios conjuntos de datos y un gran poder computacional para realizar su entrenamiento.
Otra alternativa es la técnica localización y mapeo simultaneo (SLAM) [6, 7], que utiliza
métodos probabilísticos para construir un mapa del entorno y estimar la posición del robot,
los cuales se basan en filtros o métodos basados en correlación para estimar la posición del
robot y los puntos de referencia del entorno. Sin embargo, el coste computacional crece con
el número de objetos contenidos en el mapa. Este hecho limita su aplicación en tiempo real
a mapas formados en entornos desconocidos. También se usan sistemas estéreo [8, 9] que
simulan la visión humana con dos cámaras calibradas y separadas entre sí para proporcionar
dos imágenes diferentes en el mismo instante de tiempo. Lo anterior permite medir la
disparidad, para obtener la profundidad de la escena. Sin embargo, estos sistemas necesitan
imágenes de referencia de calidad para ofrecer un buen resultado. La falta de textura en las
superficies puede causar estimaciones erróneas. En trabajos recientes, existe un progreso
significativo en el uso de algoritmos de visión por computador que analiza el movimiento de
los pixeles en una secuencia de imágenes (flujo óptico) utilizando una cámara monocular
[10, 11, 12]. El uso de fotogramas mejora la precisión, reduce la influencia del ruido y permite
la extracción de información adicional en comparación con otras técnicas de visión. Esto es
útil para sistemas de navegación en tiempo real; sin embargo, para la estimación de
profundidad con una sola cámara en tiempo real el costo computacional y la complejidad
aumenta.
Motivado por los resultados de los sistemas monoculares y los potenciales beneficios que
proporciona en la obtención de información de profundidad, este trabajo se enfoca en la
navegación autónoma utilizando flujo óptico a partir de una sola cámara RGB en tiempo real.
Esto nos permite usar la información de profundidad del flujo óptico para la navegación y
manejar una configuración eficiente en el espacio para dispositivos embebidos. A diferencia
de trabajos previos, nosotros proponemos una metodología novedosa para la navegación
autónoma que combine los beneficios potenciales del procesamiento paralelo y el uso de
cámaras monoculares. Por lo anterior, se analizará el comportamiento del algoritmo
propuesto usando bases de datos estandarizadas y se comparará con otros algoritmos
similares para determinar la viabilidad de esta propuesta. En esta investigación reformulamos

1
el problema de la estimación de profundidad a partir de movimiento con una sola cámara
para facilitar una implementación en FPGA/CUDA adecuada para aplicaciones embebidas
para el procesamiento en tiempo real.

1.1. Estado del arte


En esta sección, proporcionamos una revisión del estado del arte acerca de los diferentes
enfoques para navegación autónoma y los enfoques para extracción de profundidad con una
sola cámara en movimiento analizando el desplazamiento de los píxeles (flujo óptico). Por
ello, se presentan dos subsecciones, una para navegación autónoma y otra para profundidad
desde el movimiento.

1.1.1. Navegación autónoma


En esta subsección presentamos metodologías para realizar navegación autónoma. Estas
metodologías son las siguientes: posicionamiento simultaneo (SLAM), visión
estereoscópica. Por otro lado, algunas metodologías utilizan algoritmos de aprendizaje. Los
enfoques presentados en [14,15], utilizan SLAM. Estos trabajos hacen uso de la información
de sus sensores para localizarse dentro del entorno y crear un mapa tridimensional. Aunque
SLAM contiene todo para una navegación autónoma, en entornos no controlados donde las
dimensiones del algoritmo incrementan considerablemente ya que incrementa los estados de
estimación al igual que la dimensión del entorno. Esta es una limitación importante ya que el
incremento de datos conlleva a un mayor costo computacional. Inicialmente, PTAM [16]
propuso utilizar el algoritmo de cinco puntos [17] para estimar y descomponer una matriz
fundamental en una transformación que relaciona ambos fotogramas clave de inicialización.
La transformación se utiliza entonces para triangular una supuesta escena inicial no plana La
inicialización de PTAM se cambió posteriormente a una estimación de Homografía [18],
donde se supone que la escena está compuesta por planos 2D. Dado que el proceso de
correspondencia 2D-2D se realiza mediante ZMSSD sin deformar las características, el
establecimiento de correspondencias correctas es susceptible tanto al desenfoque por
movimiento como a los cambios significativos en la apariencia de las características como
resultado de la cámara. de las características como resultado de las rotaciones de la cámara.
Por lo tanto, se requieren requisitos estrictos sobre el movimiento del usuario durante la
inicialización. El mapa inicial generado se escala, por ejemplo, la traslación estimada entre
los dos primeros fotogramas clave corresponde a 0,1 unidades, antes de que la estructura de
sólo BA tiene lugar. SVO [19] adoptó una Homografía para la inicialización con el mismo
procedimiento que PTAM. SVO extrae las características FAST y las rastrea utilizando KLT
[20] (Kanade-Lucas-Tomasi feature tracker) a través de los fotogramas entrantes. Para evitar
Para evitar la necesidad de una segunda entrada por parte del usuario, SVO controla la
mediana de la distancia de la línea base de las características, rastreadas entre el primer
fotograma clave y el fotograma actual; y siempre que este valor alcanza un determinado
umbral, se supone que hay suficiente paralaje, y la Homografía puede ser estimada. DT-
SLAM [21] no tiene una fase de inicialización explícita, sino que está integrada en su módulo
de seguimiento como un método esencial de estimación matricial. En el LSD-SLAM [22] y
después en DSO-SLAM [23], se inicializa aleatoriamente la profundidad de la escena desde
el primer punto de vista, ambos sistemas utilizan un método de inicialización que no requiere

2
la geometría de dos vistas, es decir, el paso de inicialización en LSD-SLAM y DSO-SLAM
tiene lugar en un único de interés (es decir, lugares de la imagen que tienen gradientes de
intensidad altos) en el primer fotograma clave. se les da un valor de profundidad aleatorio
con una gran varianza asociada. El resultado es un mapa 3D inicialmente malo. Los métodos
de estimación de la postura se invocan entonces para estimar la pose de los nuevos
fotogramas utilizando el mapa erróneo, lo que a su vez da lugar a estimaciones de pose
erróneas. Sin embargo, a medida que el sistema procesa más fotogramas de la misma escena
el mapa de profundidad originalmente erróneo converge a una solución estable. La
inicialización se considera completa cuando la varianza de profundidad de la escena inicial
converge a un mínimo. DPPTAM [24], toma el procedimiento de inicialización de LSD
SLAM, y por tanto también sufre el problema de la inicialización aleatoria de la profundidad,
donde hay que añadir varios fotogramas clave al sistema antes de alcanzar una configuración
estable. Por último, ORB-SLAM [25] se ocupa de las limitaciones derivadas de todos los
métodos anteriores calculando, en paralelo, tanto una matriz fundamental como una
homografía. Para seleccionar el modelo adecuado, cada modelo se penaliza según su error de
transferencia simétrica. Si el modelo elegido produce una mala calidad de seguimiento, y hay
muy pocas correspondencias de características en el siguiente fotograma, se descarta la
inicialización, y el sistema vuelve a empezar con un par de fotogramas diferente. En las
formulaciones monoculares-SLAM anteriores, los puntos del mapa tienen que crearse
triangulando puntos de características en diferentes fotogramas clave. Para ello, una solución
popular consiste en triangular puntos entre fotogramas clave adyacentes ya que el nivel de
paralaje es bajo y esto disminuye los requisitos computacionales. Sin embargo, trabajos
recientes [25, 26] han demostrado que triangular puntos de características entre N fotogramas
clave en el gráfico de visibilidad proporciona una mayor densidad de mapeo que el enfoque
basado en fotogramas adyacentes. Para la formulación matemática, es necesario hacer
corresponder puntos entre el fotograma clave actual y los N fotogramas clave vecinos.
Otra forma de implementar navegación autónoma es utilizando visión estereoscópica
como único sensor [27, 28, 29]. Estos sensores analizan dos imágenes tomadas por una
cámara izquierda y una cámara derecha. En estos trabajos se calcula la disparidad entre las
imágenes para la obtención de profundidad, posteriormente hacer reconstrucción 3D para la
navegación autónoma. Estos enfoques hacen uso de un solo sensor para la navegación
autónoma. Desafortunadamente, estás cámaras requieren calibraciones complejas que
necesitan una gran precisión. Esto es una limitación ya que un robot retroalimentado con una
cámara mal calibrada podría tener resultados erróneos en su navegación. En [30], se propone
una medida de similitud para la coincidencia estereoscópica. La fuerza de la relación de datos
de dos ventanas en la imagen izquierda y la imagen derecha se determina aplicando
operadores de agregación. Sin embargo, estas medidas no logran establecer la
correspondencia de los píxeles ocluidos. Para superar el rendimiento en los píxeles ocluidos
una modificación de la correlación cruzada normalizada ponderada basada en relaciones
difusas de datos difusos se utiliza para el proceso de coincidencia estéreo. En [31] presentan
una modificación del algoritmo de concordancia estéreo de Lucas Kanade [32]. Los autores
proponen el uso de una ventana de correlación equilibrada. Además, el uso de un nuevo factor
difuso en el cálculo de los valores de coincidencia iniciales que expresa la posibilidad de
coincidencia entre dos y una nueva función iterativa para el refinamiento de los valores de
coincidencia iniciales.

3
Otra alternativa utilizada se presenta en estos trabajos [33, 34, 35], se basa en algoritmos
de aprendizaje donde se realizan entrenamientos de grandes cantidades de datos con Redes
Neuronales Convolucionales (CNN). En la mayoría de los casos estás metodologías toman
una CNN previamente entrenada para extraer datos característicos de la imagen y estimar la
profundidad. El uso de CNN ayuda a la precisión y en cambios de iluminación. Sin embargo,
se necesitan grandes cantidades de datos para el entrenamiento de la red. Esto es una
limitación, ya que no existen muchos conjuntos de imágenes para navegación autónoma. Con
el rápido desarrollo de las redes neuronales profundas en los últimos tiempos, se han
propuesto métodos basados en el aprendizaje para resolver los problemas de odometría
visual. En [36] estiman la pose relativa de la cámara mediante el aprendizaje de una
representación visual estable. DeMoN [37], que resuelve por primera vez el problema de la
OV de forma integral, estimó el mapa de profundidad denso y las poses simultáneamente.
DeepTAM [38] amplía DTAM [39] mediante dos subredes separadas para la estimación del
movimiento de la cámara y de la profundidad simultáneamente. Los dos métodos anteriores
sugieren que el flujo óptico puede ser tratado como una entrada de los estimadores de pose
en lugar de procesar directamente imágenes en bruto. Aunque varios de los métodos
supervisados anteriores consiguen resultados prometedores, requieren enormes cantidades de
anotaciones de verdad. Para librarse de ello, se han propuesto métodos de aprendizaje auto
supervisado propuestos. En [40] propusieron aprender conjuntamente el movimiento de la
cámara y la profundidad a partir de vídeos monoculares. monocular. A continuación, varios
métodos [41, 42] integran restricciones suplementarias, logrando así resultados más
deseables. [43] adopta la regularización para reforzar la consistencia de la profundidad. SC-
SfMLearner [44] alivia el problema de inconsistencia de escala introduciendo la pérdida de
consistencia de la geometría a través de múltiples vistas. A diferencia de los métodos
anteriores, nosotros resolvemos directamente la pose relativa a partir de las correspondencias
del flujo óptico y empleamos la geometría multi vista.

1.1.2. Profundidad a partir de movimiento


En esta subsección presentamos enfoques con el uso de una sola cámara para estimación
de profundidad a partir del movimiento. Existen diferentes alternativas para realizar
navegación autónoma. Una es el uso de algoritmos de aprendizaje, otra alternativa extrae
información de la geometría visual y se conoce como odometría visual (OV).
Existen trabajos en OV basados en flujo óptico aplicados a vehículos terrestres en
distintas superficies, tales como césped, pavimento, hielo y alfombra [45]. Campbell propuso
criterios y un método experimental para evaluar rigurosamente los sistemas de OV en
entornos reales no estructurados mediante un robot en movimiento y la grabación simultánea
desde fuera del robot. Se dividieron los vectores de campo de flujo en tres grupos: cielo para
vectores por encima de la línea del horizonte, horizonte para vectores cercanos a la línea de
horizonte, y tierra para vectores por debajo de la línea de horizonte. Por otro lado, en [46] se
presenta un enfoque para estimar y controlar el movimiento de un cuadrirrotor a lo largo de
una trayectoria prescrita usando dos cámaras. Con el sistema estéreo se genera una imagen
panorámica utilizada para medir el Flujo Óptico (FO) y, posteriormente, se calcula el
movimiento del cuadrirrotor (egomotion). El FO se calcula en tiempo real (25Hz) usando un
método de block-matching piramidal. Cabe mencionar que la disposición de las cámaras es
tal que apuntan hacia el frente del vehículo aéreo y para el cálculo de la traslación descartaron

4
los vectores dirigidos al cielo debido a que estas regiones no se ven afectadas por la
traslación. En [47] se describe una aplicación de OV para vehículos aéreos en donde no se
requiere un modelo paramétrico. El método ahí usado consiste en un aprendizaje acerca de
la estructura de la imagen y la dinámica del movimiento a partir del movimiento de la cámara
empleando un proceso Gaussiano, el cual es capaz de calcular una función que relaciona el
FO con la translación y rotación relativa a partir de un entrenamiento supervisado. Es común
que surjan errores producidos por outliers cuando se hace el tracking de puntos, en especial
cuando se usa el FO. Para eliminarlos, en [48] se propone un sistema de estéreo y dos
histogramas. En la etapa de selección de puntos, debido a su simplicidad, se usa el detector
de Harris en la imagen de la cámara izquierda y, para realizar el seguimiento de estos puntos,
usaron el proceso de correlación cruzada. Se hacen los histogramas de las direcciones del FO
para cada conjunto de puntos, eliminando los puntos cuya dirección de FO se encuentra muy
alejada del promedio (outliers). En [49] se propone una estrategia para obtener la OV en un
sistema monocular empleando una Wavelet Hipercompleja (HCW) del FO para detectar
micro movimientos en la imagen, mientras que, con el algoritmo RANSAC estimaron el
movimiento de un vehículo terrestre. El FO que emplearon es derivado de fase e invariante
a la iluminación. Además, los vectores de FO se estimaron mediante una minimización de
las diferencias de fase, con el fin de evitar la estimación de frecuencia. Otra estrategia
planteada con el mismo fin es la que se presenta en [50], en donde se emplea un UAV con
una cámara monocular para medir el FO. Para detectar los puntos de interés emplean el
método de Shi-Tomasi en OpenCV, mientras que el FO lo estiman con el método iterativo
piramidal de Lucas-Kanade.
Los enfoques que se presentan en [51, 52, 53] usan CNN para predecir estimaciones de
flujo óptico o profundidad. Utilizan un conjunto para entrenar una red, tomando las imágenes
como datos de entrada y la CNN clasifica y predice mapas de disparidad o mapas de
profundidad. En estos trabajos, la red identifica características de la imagen para determinar
el flujo óptico o profundidad a partir del movimiento ejercido por el robot. Sin embargo,
estos enfoques requieren de mucho tiempo de entrenamiento. Además, las imágenes
requieren ser etiquetadas para poder entrenarse. Por otro lado, el procesamiento de datos y el
manejo de grandes cantidades de información requieren mayor consumo computacional. Otra
alternativa utilizada se presenta en estos trabajos [54, 55], donde se estiman los parámetros
de movimiento visual de la imagen estimando el movimiento entre fotogramas consecutivos.
Estos, utilizan flujo óptico recuperado información de intensidad y color de una secuencia de
video. El uso de flujo óptico proporciona la información de profundidad para cada vector de
flujo óptico. Sin embargo, estos enfoques tienden a resultados con eficiencia baja debido a la
variación de profundidad. Este enfoque de emplear técnicas de flujo óptico en conjunto con
técnicas de aprendizaje profundo, como es el caso de Deep Learning, para la estimación de
profundidad en cámaras monoculares, cada vez más se convierte en un área en crecimiento
para ser utilizada en robots móviles y humanoides como en [56] donde emplean técnicas que
involucran el análisis del flujo óptico de una imagen monocular para la estimación de la
profundidad y velocidad de desplazamiento en un entorno, similar a [57] donde se propone
una arquitectura basada en CNN para la estimación de distancia de un objeto en una escena
3D mediante el uso de características visuales de flujo óptico, la red fue entrenada con
componentes de flujo óptico, que tiene señales de control para la evasión de obstáculos en
un robot móvil como salida del sistema.

5
En nuestro caso, a diferencia de trabajos relacionados, la metodología propuesta extrae
la profundidad de la escena mediante el flujo óptico que proporciona la secuencia de
imágenes de un cámara monocular basado en estéreo visión. Para eso, proponemos la
extracción de información geométrica de cada fotograma y determinar el movimiento de los
pixeles obteniendo estimaciones de profundidad con una sola cámara. Se usa un algoritmo
de flujo óptico basado en la correlación por sumatoria de diferencias absolutas (SAD),
calculando el desplazamiento de los pixeles entre dos fotogramas consecutivos. Por último,
asumimos que la disparidad es directamente proporcional a la profundidad de la escena, es
decir, los objetos lejanos tienen un valor de desplazamiento pequeño y los objetos cercanos
tienen un valor de desplazamiento alto.

1.2 Hipótesis
A partir del análisis de movimiento a través de una secuencia de imágenes, es posible
caracterizar las propiedades para estimar la profundidad acelerando el tiempo de
procesamiento paralelizando los algoritmos en un sistema embebido.
El uso de una secuencia de imágenes RGB, obtenida por una sola cámara permitirá la
obtención de mapas de profundidad densos capaces de proporcionar navegación autónoma
en tiempo real.

2. Objetivos
2.1. Objetivo general
• Desarrollar un algoritmo paralelo para la estimación de profundidad a partir de
flujo óptico mediante una sola cámara.

2.2. Objetivos específicos


• Revisión del estado del arte

• Implementar algoritmo para la estimación de flujo óptico

• Implementar algoritmo para la estimación de profundidad

• Desarrollar algoritmo paralelo para la estimación de profundidad compatible con


sistemas embebidos.

• Validar algoritmo de estimación de profundidad paralelo.

6
3. Fundamento Teórico
En este capítulo se abordan los conceptos generales sobre los temas relacionados con este
trabajo de investigación. Se presenta una explicación acerca de los algoritmos monoculares,
de estereovisión y flujo óptico para obtener la profundidad de una escena en una arquitectura
para el procesamiento paralelo en un sistema embebido.

3.1. Navegación autónoma


La visión por computador fue un tema bastante destacado durante la década de 1980 y la
primera mitad de 1990, y sus ventajas fueron inmediatamente aprovechadas para mejorar las
capacidades de navegación de los robots. A nivel de visión de robots móviles, el progreso
hecho en las últimas dos décadas ha estado en dos frentes separados: La navegación basada
en visión para robots de interiores y la navegación basada en visión para robots de exteriores.
En ambas áreas los avances han sido significativos [58].
El enfoque más utilizado en la literatura para estudiar la navegación autónoma consiste
en dividirla en tres problemas, que se expresan respectivamente con tres preguntas:
• Localización: ¿dónde estoy?
• Planificación de Tareas: ¿hacia dónde quiero ir?
• Planificación del Movimiento: ¿cómo puedo llegar allí?
El problema de la localización consiste en conocer en todo momento las coordenadas del
robot respecto a un cierto sistema fijo de referencia.
La planificación de tareas se encarga de decidir qué acciones y en qué orden se han de
realizar para completar una misión. Este es el razonamiento de más alto nivel exigido a un
robot. El objetivo de la planificación del movimiento es la generación automática de las
acciones necesarias para que el robot se desplace entre dos posiciones de su entorno de
trabajo evitando los obstáculos para no colisionar [59].

3.2. Procesamiento de imágenes


El campo del procesamiento digital de imágenes está construido sobre bases
matemáticas y probabilísticas, pero la intuición y análisis humanos juegan un importante
papel al momento de escoger una técnica u otra. Esta elección se basa usualmente en juicios
visuales subjetivos. Desarrollar un entendimiento básico de la percepción humana es
entonces pertinente [60].
Procesos de Bajo Nivel: Utilizan operaciones como el preprocesamiento de imagen para
reducir el ruido, mejora del contraste, y filtros de enfoque. Se caracterizan por que sus
entradas son imágenes y sus salidas también.
Procesos de Nivel Medio: Operaciones como segmentación y clasificación de objetos
individuales. Se caracterizan por que sus entradas son generalmente imágenes, pero sus

7
salidas son atributos extraídos de esas imágenes (contornos, bordes, identidad de objetos
individuales.
Procesos de Alto Nivel: Implica el obtener algún significado de un conjunto de objetos
reconocidos, análisis de imágenes y, finalmente, realizar las funciones cognitivas asociadas
con la vista.

3.3. Filtros
El proceso de filtrado es el conjunto de técnicas englobadas dentro del preprocesamiento
de imágenes cuyo objetivo fundamental es obtener, a partir de una imagen origen, otra final
cuyo resultado sea más adecuado para una aplicación específica mejorando ciertas
características de esta que posibilite efectuar operaciones del procesado sobre ella. Los
principales objetivos que se persiguen con la aplicación de filtros son: [61].

• Suavizar la imagen: Reducir la cantidad de variaciones de intensidad entre pixeles


vecinos.
• Eliminar ruido: Eliminar aquellos pixeles cuyo nivel de intensidad es muy diferente
al de sus vecinos y cuyo origen puede estar tanto en el proceso de adquisición de la
imagen como en el de transmisión.
• Realzar bordes: Destacar los bordes que se localizan en una imagen.
• Detectar bordes: Detectar los pixeles donde se produce un cambio brusco en la
función intensidad.

El proceso de filtrado puede llevarse a cabo sobre los dominios de frecuencia basándose
en la transformada de Fourier o dominios de espacio analizando directamente los pixeles de
una imagen.
Una imagen puede ser interpretada como función bidimensional z = I (x, y), donde x e y
son coordenadas espaciales, y z el valor de intensidad de cada píxel. Una imagen a en
escala de grises viene dada a partir de una matriz gray = I (x,y). Cada entrada de la matriz
es un píxel y el número de ellos será el valor de resolución de la imagen. El filtrado de
imágenes consiste en la modificación de las matrices [62]. El procedimiento más utilizado
es la convolución de matrices, donde se multiplica un kernel especifico por una ventana de
vecinos alrededor del píxel al cual se le atribuye la sumatoria de loa multiplicación, como
se muestra en la figura 1.

8
Fig. 3.1. Convolución de matrices [62].

3.4. Estereovisión
La visión estereoscópica es un proceso que consistente en obtener una vista
tridimensional de objetos percibidos mediante cámaras binocular. Con estas dos imágenes
obtenidas por una cámara izquierda y una cámara derecha, las cuales son diferentes debido a
la separación entre las cámaras. La disparidad o paralaje entre estas imágenes se utiliza para
estimar la profundidad.
La extracción de la estructura tridimensional de una escena a partir de imágenes
estereoscópicas es un problema que ha sido estudiado ampliamente en las últimas décadas
por la comunidad de visión por computador. Los primeros trabajos estaban enfocados hacia
los fundamentos de la correspondencia entre las imágenes y la geometría de la estereoscopía.
La investigación ha madurado significativamente a través del tiempo y son muchos los
avances que siguen produciéndose en estereovisión computacional, lo que ha permitido que
la estereoscopía pueda ser aplicada a nuevos problemas.
Parámetros intrínsecos, son los parámetros propios de la cámara:
• Distancia Focal: Es la distancia entre el plano de imagen y la lente de la cámara.
• Punto central: Son las coordinadas en píxeles del punto central de la imagen, es decir,
el punto que define el eje óptico en el plano de imagen.
• La distorsión radial de la lente
• Tamaño efectivo del píxel en milímetros.
Parámetros extrínsecos, son los que definen la relación espacial entre la cámara y el
mundo real:
• Parámetros de rotación: relacionan la orientación de la cámara respecto al sistema de
coordenadas del mundo real.
• Parámetros de Translación: relacionan la posición de la cámara respecto al sistema de
coordenadas del mundo real.

9
Fig. 3.2. Representación de la visión estéreo con una cámara izquierda y una derecha, donde se
proyectan dos imágenes diferentes observando un punto en el espacio que se posiciona en un lugar
diferente en cada imagen.

Los pasos de todo sistema de visión estéreo para su funcionamiento son:


Calibración:
• Corrección geométrica.
• Transformación de la imagen.
Correspondencia:
• Correlación.
• Obtención del máximo y de la disparidad.
• Filtrado de la imagen de disparidades

3.4.1. Geometría epipolar


La geometría de diferentes vistas, tiene relación entre las múltiples cámaras, un punto en
3D y las proyecciones de ese punto en cada uno de los planos de cada imagen proporcionada
por cada cámara, esto se denomina geometría epipolar de un par estéreo.
La geometría epipolar implica que dos cámaras observen el mismo punto 3D, cuya
proyección en cada uno de los planos de la imagen tiene un punto P. La separación entre sí
de los centros de las cámaras se denomina plano epipolar.

10
Utilizando cualquier plano epipolar como base, todos los puntos de la escena que
pertenecen a este plano tendrán su imagen en cada una de las líneas epipolares de las dos
imágenes. Esto implica que cualquiera de los píxeles de una línea epipolar, sea derecha o
izquierda, tendrá su correspondiente dentro de la línea epipolar correspondiente en la otra
imagen.
P es un punto en el mundo real, p1 y p2 son las respectivas proyecciones en la imagen
izquierda y la imagen derecha. La posición de p1 en la imagen izquierda no resuelve
unívocamente la posición de P, ya que en el proceso de proyección se ha perdido la
información de profundidad. Si a partir de p1 se desea conocer la ubicación de p2, es
necesario proyectar en la imagen derecha los posibles puntos que puede formar p1. Se
observa que p2 es uno de estos puntos proyectados; sin embargo, teniendo solo p1 no se
puede saber la ubicación exacta de p2, únicamente se puede afirmar que p2 pertenece a la
proyección de la recta m1 C1 realizada por el segundo centro óptico C2 en la imagen derecha.
La proyección de esta recta se denomina línea epipolar y se puede apreciar en la Fig. 3.3.
La restricción epipolar es, entonces, una condición necesaria, mas no suficiente. A pesar
de ello, es de utilidad saber que el punto correspondiente a p1, en la imagen derecha, está
sobre una línea y no en cualquier parte de la imagen. Esto reduce la dimensionalidad del
problema de búsqueda de puntos correspondientes, ya que en lugar de buscar en toda una
imagen (2D) se hace en una línea (1D).

Fig. 3.3. Geometría epipolar de dos vistas

11
3.4.2. Rectificación
Una vez conocida la geometría epipolar existe otra transformación de la imagen que
permite facilitar más la búsqueda de correspondencias entre dos imágenes, se trata de la
rectificación. Básicamente rectificar significa transformar mediante software las imágenes
obtenidas, conociendo los parámetros tanto intrínsecos como extrínsecos de las cámaras, de
manera que las líneas epipolares de ambas imágenes queden alineadas horizontalmente. Con
esto se consigue que los puntos p1 y p2 tengan la misma posición en el eje “y” en sus
respectivas imágenes. En la siguiente figura se ve claramente el objetivo de la rectificación
Estos pasos son necesarios debido a la imposibilidad de tener una configuración de ambas
cámaras totalmente alineadas, de manera que gracias a la rectificación se permite cambiar las
imágenes para que estén formadas como si las cámaras tuvieran una configuración ideal. Tras
la rectificación se puede considerar que los ejes ópticos son paralelos y que se encuentran en
el infinito.

Fig. 3.4. Rectificación de imágenes

3.4.3. Técnicas basadas en correlación


En las técnicas de estereovisión basadas en el área se busca correlación cruzada entre
patrones de intensidad en la vecindad local o vecindario de un píxel en una imagen, con
patrones también de intensidad en una vecindad correspondiente a un píxel en la otra imagen

12
del par estereoscópico. Por tanto, las técnicas basadas en el área utilizan la intensidad de los
píxeles como característica esencial.
Dado un píxel de la imagen izquierda y una ventana alrededor suyo, se busca encontrar
una ventana sobre la imagen derecha que sea la más parecida a la primera, según un criterio
de similitud dado. Al encontrar la ventana de mayor similitud se dice que el píxel central
derecho se corresponde con el píxel central de la ventana izquierda. La disparidad del punto
será la diferencia entre las coordenadas x de ambos puntos. Además, permite crear mapas de
disparidad densos obteniendo las disparidades para cada punto en la escena.
Una vez se ha calculado la correspondencia para cada píxel con todos los de la otra
imagen, se procede al cálculo del punto que mejor se asemeja de las comparaciones entre
ventanas. Para ello, si se ha utilizado el método SSD (suma de diferencias cuadradas) o SAD
(suma de diferencias absolutas), se buscará el punto de menor valor del mismo. A
continuación, se enumeran varios métodos en los cuales, los valores I1 e I2 hacen referencia
al nivel de gris de cada cámara, y los sumatorios indican que se recorre la ventana de
búsqueda.

• Suma de diferencias absolutas

𝑆𝐴𝐷 = ∑ |𝐼1 (𝑖, 𝑗) − 𝐼2 (𝑖 + 𝑥, 𝑗 + 𝑦)|


𝑖,𝑗

• Suma de diferencias cuadradas

𝑆𝑆𝐷 = ∑ |𝐼1 (𝑖, 𝑗) − 𝐼2 (𝑖 + 𝑥 + 𝑗 + 𝑦)2 |


𝑖,𝑗

• Suma normalizada de diferencias cuadradas


∑𝑖,𝑗 𝐼1 (𝑖, 𝑗) − 𝐼2 (𝑖 + 𝑥, 𝑗 + 𝑦)2
𝑁𝑆𝑆𝐷 =
√∑𝑖,𝑗 𝐼1 (𝑖, 𝑗)2 ∑𝑖,𝑗 𝐼2 (𝑖 + 𝑥, 𝑗 + 𝑦)2

• Correlación normalizada
∑𝑖,𝑗 𝐼1 (𝑖, 𝑗) ∗ 𝐼2 (𝑖 + 𝑥, 𝑗 + 𝑦)2
𝑁𝐶𝐶 =
√∑𝑖,𝑗 𝐼1 (𝑖, 𝑗)2 ∑𝑖,𝑗 𝐼2 (𝑖 + 𝑥, 𝑗 + 𝑦)2

13
3.4.4. Mapas de disparidad
Existen cuatro pasos básicos que suelen seguir todos los algoritmos estéreo para
conseguir un mapa denso de disparidad:
• Cálculo de costes de emparejamiento
• Agregación de costes
• Computo de disparidad y optimización
• Mejora del mapa de disparidad
El primer punto es común a los diferentes métodos para el cálculo de mapas densos de
disparidad, y compara valores de píxeles entre dos imágenes y mide cómo de probable es que
ambos píxeles sean correspondientes. En el segundo punto es donde existen diferencias entre
los métodos locales y globales. En un método local normalmente se suman, con un valor de
escala o no, los costes calculados previamente dentro de una ventana alrededor de cada pixel.
Este cálculo puede realizarse en dos dimensiones para una disparidad fija, aunque también
pueden usarse funciones tridimensionales en el que la tercera variable es la disparidad. En
los métodos locales para la agregación de costes es muy importante la ventana que se elija
para realizarlo, existiendo diferentes posibilidades. En este método la suposición de
uniformidad está incluida en el propio método. Finalmente, el cálculo de la disparidad se
realiza escogiendo para cada pixel la disparidad que suponga menor coste.
Un mapa de disparidades es una imagen, donde la intensidad de tono en cada píxel indica
la distancia horizontal a la que se encuentra el píxel correspondiente de una imagen en la
otra. A cada píxel (x, y) en el mapa de disparidad se le asigna el valor de disparidad d, donde
se encontró el mejor valor de correspondencia expresado en unidades de distancia (píxeles).
De esta manera dicho mapa contendrá el valor de disparidad para cada píxel, en la cual se
encontró la mejor correlación con la ventana de píxeles buscada. A la hora de representar
dichos valores en la imagen, se normaliza de [0 255] para ayudar a percibir mejor las
diferencias entre los distintos niveles de gris.

14
Fig. 3.5. Mapa de disparidad con respecto a dos imágenes

15
3.5. Flujo óptico
El problema de la estimación de flujo óptico ha sido ampliamente estudiado y muchos
métodos han sido propuestos [63, 64], propusieron uno de los primeros métodos que se basó
en un patrón espacio temporal de la intensidad de una imagen, a partir de este trabajo muchos
otros fueron propuestos y su principal objetivo ha sido obtener un flujo óptico denso y con
un error muy bajo.
Cuando se extrae información de una secuencia de imágenes, es posible recuperar el
campo de movimiento. La variación espacial y temporal del patrón de brillo de la imagen, es
una aproximación del campo de movimiento denominado flujo óptico. Cuando las
variaciones del patrón de brillo correspondan a características estructurales de las superficies,
tanto el campo de movimiento como el flujo óptico son considerados iguales [65].
Evaluar el movimiento entre dos imágenes consecutivas (o una secuencia de imágenes)
es posible sin ningún conocimiento previo sobre el contenido de las imágenes. Por lo general,
el movimiento mismo indica que algo está pasando. Esta tarea tiene dos componentes
principales: la identificación y el modelado. La identificación es encontrar el objeto u objetos
de interés a lo largo de toda la secuencia de video. Las técnicas para esta tarea son los
histogramas de color y el análisis de momentos. El seguimiento de objetos que aún no han
sido identificados es un problema relacionado, en el cual es más interesante entender el
movimiento que se está dando en la secuencia de imágenes que el hecho mismo de identificar
al objeto. Podemos asociar a cada píxel en la imagen una cierta velocidad o,
equivalentemente, un desplazamiento que representa la distancia que un píxel se ha movido
entre una imagen previa y la actual. Dicha construcción es conocida generalmente como flujo
óptico denso (dense optical flow), asocia una velocidad a cada píxel en una imagen.
El flujo óptico contiene información sobre la disposición de las superficies, la dirección
del punto de observación llamado Foco de Expansión (FOE), el Tiempo de contacto (TTC)
y la profundidad.

Fig. 3.6. Secuencia de tres imágenes, donde el flujo óptico es representado por el contorno de los pixeles
entre el cuadro 0 y 1 así como el cuadro 1 y 2.

16
Los métodos diferenciales pertenecen a las técnicas más usadas para estimación del
flujo óptico en secuencias de imágenes, están basados en el cálculo de derivadas espaciales
y temporales, es decir, la obtención del gradiente espacio temporal. Los métodos
diferenciales pueden ser clasificados en métodos locales, los cuales optimizan el uso de
intensidades de los pixeles, y métodos globales, los cuales que intentan minimizar la
energía funcional [66].
Los métodos locales pueden tener mayor robustez respecto al ruido, pero no dan
campos densos de flujo, en cambio los métodos globales con el 100% de densidad de flujo,
aunque son muy propensos a ser sensibles al ruido [67].

3.5.1. Foco de expansión (FOE)


Los vectores más cercanos al FOE correspondientes al ambiente tendrán una magnitud
menor mientras que aquellos más alejados de este punto serán mayores. Para poder
compararlos, se utilizará el concepto de Vanishing Point mostrado en la Fig. 3.7. Este punto
coincidirá con el FOE, se encuentra al frente del vehículo, teóricamente, en el infinito. Una
vez proporcionados los vectores, se mide la magnitud de estos y se obtiene la odometría.
Para el movimiento de traslación de la cámara, el movimiento de la imagen en todas
partes se aleja de un punto singular correspondiente a la proyección del vector de traslación
sobre el plano de la imagen. Este punto, llamado Foco de Expansión (FOE), se calcula
basándose en el principio que los vectores de flujo están orientados en direcciones específicas
en relación con el FOE.

Fig. 3.7. Foco de expansión

3.5.2. Tiempo de contacto


El tiempo de contacto (TTC) puede calcularse a partir del flujo óptico que se extrae de
las secuencias de imágenes monoculares adquiridas durante el movimiento.

17
La velocidad de los vectores de la imagen que se muestra en la Fig. 2.5, puede describirse
como una función de los parámetros de la cámara y dividirse en dos términos que dependen
de los componentes de rotación (Vt) y de traslación (Vr) de la de la velocidad de la cámara
(V), respectivamente. La parte rotacional del campo de flujo puede calcularse a partir de los
datos propioceptivos (por ejemplo, la rotación de la cámara) y la distancia focal. Una vez
calculado el flujo óptico global, (Vt) se determina restando (Vr) de (V).

3.5.3. Algoritmos de flujo óptico basados en correlación


Los métodos basados en la correlación realizan la búsqueda de correspondencias
utilizando ventanas o patrones alrededor de cada píxel. La idea de estos métodos es que es
mucho más fácil encontrar las correspondencias entre los píxeles a través de la comparación
de regiones entre las imágenes por maximización de alguna medida de similitud. Una ventaja
que tienen estos métodos es que al usar mayor información la búsqueda de las
correspondencias es más efectiva.
La búsqueda consiste en encontrar el mejor equivalente para el píxel bajo consideración
entre algunos píxeles candidatos en la segunda imagen, los píxeles candidatos son
determinados usando una búsqueda imponiendo una limitación en el desplazamiento
máximo. La región cubierta por los píxeles candidatos es llamada ventana de búsqueda.

Fig. 3.8. Correlación de dos imágenes secuenciales donde se toma un bloque de correspondencia en el
fotograma t-1 de referencia, así en el fotograma t se busca el bloque de correspondencia anterior
encontrando un vector de desplazamiento.

18
3.5.4. Profundidad a partir del movimiento
El proceso de reconstrucción de una escena representada por un conjunto de imágenes
2D recibe el nombre de Estructura a partir del Movimiento (SfM: Structure from Motion).
Es una técnica que proviene del mundo de la visión artificial y permite realizar modelos 3D
a partir de colecciones de imágenes no estructuradas tomadas mediante una cámara
convencional cualquiera, por lo que resulta una estrategia más versátil.
Actualmente la fotogrametría y SFM entremezclan en los diversos programas que
soportan este tipo de tareas. En el campo de visión artificial, SFM se refiere al proceso de
encontrar la estructura tridimensional mediante el análisis del movimiento de un objeto a lo
largo del tiempo. En este proceso nos encontramos con un problema similar al de encontrar
la estructura a partir de la visión estéreo, ya que en ambos casos es necesario encontrar la
correspondencia entre las imágenes 2D y la reconstrucción del objeto 3D. Sin embargo, para
recuperar la profundidad en la escena es necesario tener suposiciones sobre la escena y sus
imágenes 2D. En el caso de la geometría epipolar, se asume que la escena es rígida y que el
error de la geometría epipolar es cercano a cero.
La única suposición es que el entorno dentro de la escena es rígido, entonces, dado el
seguimiento de píxeles para dos fotogramas consecutivos establecemos la hipótesis de que la
profundidad en la escena es proporcional a los desplazamientos de los píxeles en 2D
(seguimiento de píxeles) entre los fotogramas. Es decir, los objetos lejanos deben estar
asociados a un desplazamiento bajo mientras que los objetos más cercanos se asocian a
valores de desplazamiento altos, como se muestra en la Fig. 3.9.

Fig. 3.9. Profundidad a partir del movimiento donde es posible analizar desplazamiento en el x y en el
eje y al haber una secuencia de video.

19
3.6. Arquitectura reconfigurable para el procesamiento paralelo en sistemas embebidos
El cómputo reconfigurable es una estructura de organización para la implementación de
cómputo, la cual combina la programabilidad post-fábrica de los procesadores con el estilo
computacional especial utilizado en los diseños de hardware. Los sistemas reconfigurables
son sistemas de cómputo que controlan una unidad de procesamiento de hardware con un
procesador programable de software.
El beneficio clave de los dispositivos reconfigurables es que introducen una clase de
dispositivos programables post-fábrica, los cuales soportan cómputos especiales, y ventajas
como el paralelismo permitiendo realizar múltiples operaciones por ciclo de reloj. Al utilizar
de manera instantánea los requerimientos suficientes y necesarios para el procesamiento de
una tarea dada, obteniendo una alta especialización, reduciendo recursos, tiempos de
ejecución y consumo de potencia.

3.6.1. Arquitectura FPGA


Los dispositivos Field Programmable Gate Arrays, en español Arreglos de Compuertas
Programable en el Campo, tal como su nombre lo indica son un arreglo matricial de bloques
lógicos programables en cualquier espacio físico. Un FPGA es un dispositivo que un
diseñador de sistemas digitales puede programar, después que estar soldado en el circuito
impreso, para que funcione de un modo determinado. Los FPGAs son fabricados con
conexiones y lógica programables. El diseñador desarrolla su sistema digital usando
herramientas tipo EDA (Electronics Design Automation), sean dibujos esquemáticos o
lenguaje de descripción de hardware (como VHDL), para poder plasmar el sistema en lógica
digital.
Los FPGAs son dispositivos orientados a satisfacer una muy amplia gama de
aplicaciones, desde simple lógica combinacional hasta sistemas con microprocesador
embebido, transmisión tipo Ethernet, transmisión de datos series a 3.5Gb/s, todo con el
mismo dispositivo. Por ello los FPGAs tienen características diversas, pero se podría decir
que las principales son las siguientes:
• Gran cantidad de terminales de E/S. Desde 100 hasta unos 1400 terminales de E/S
• Buffers de E/S programables: control de sesgo, control de corriente, configuración
del estándar de E/S, pull-up y pull-down configurables.
• Gran cantidad de Flips-Flops, los dispositivos más grandes tienen unos 40.000 FFs.
• Gran cantidad de Tablas de Búsqueda (Look-Up Tables), ~100.000.
• Bloques de Memoria (BRAM) de doble puerto, puerto simple, de hasta 18Mbits,
configurables como RAM, ROM, FIFO y otras configuraciones.
• Bloques dedicados de Multiplicación
• Transceptores para transmisión serie de muy alta velocidad, entre 1.5 a- 10.0Gb/s
• -Procesador en hardware embebido, tal como el Power-PC, ARM9
• Procesadores descriptos en software, HDL, tales como el 8051, ARM3
• Controladores de reloj tipo Delay Lock Loop (DLL) y Phase
• Lock Loop (PLLs) de hasta 550MHz. De 2 a 8 controladores por dispositivo

20
• Control de impedancia programable por cada terminal de E/S
• Interface DDR/DDR2 SDRAM soportando interfaces de hasta 800 Mb/s
• Interfaz con estándares de E/S tipo diferencial tales como LVDS, SSTL diferencial,
etc.

3.6.1.1. VHDL
VHDL es un lenguaje de descripción de circuitos electrónicos digitales que utiliza
distintos niveles de abstracción. El significado de las siglas VHDL es VHSIC (Very High
Speed Integrated Circuits) Hardware Description Language. Esto significa que VHDL
permite acelerar el proceso de diseño.
En particular VHDL permite tanto una descripción de la estructura del circuito
(descripción a partir de subcircuitos más sencillos), como la especificación de la
funcionalidad de un circuito utilizando formas familiares a los lenguajes de programación.
Los circuitos descritos en VHDL pueden ser simulados utilizando herramientas de
simulación que reproducen el funcionamiento del circuito descrito. Para la realización de la
simulación existe un estándar aprobado por el ieee, en el cual se explican todas las
expresiones propias de VHDL y cómo se simulan. Además, existen herramientas que
transforman una descripción VHDL en un circuito real (a este proceso se le denomina
síntesis). La sintaxis para síntesis y su implementación final, aunque sigue unas normas
generales, depende en gran medida de la herramienta de síntesis seleccionada.
VHDL tiene 3 elementos, que se utilizan para modelar el sistema digital, los cuales se
muestran a continuación.
• Entidad y Arquitectura: La entidad consta de declaración de los vectores del módulo.
En otras palabras, podemos decir que se trata de identificador Vectorial del sistema. Los
puertos pueden ser de entrada in, salida out, entrada-salida inout o buffer.

21
Fig. 3.10. Representación de la Entidad y Arquitectura dentro de un chip en VHDL

• Estilos de modelado: VHDL tiene varias instrucciones concurrentes y un mecanismo


específico para agrupar un conjunto de instrucciones secuenciales para simular funcionalidad
concurrente, las cuales de acuerdo a su forma de utilización establecen tres tipos diferentes
de descripción arquitectónica, como la descripción estructural o diseño estructural, que se
define así a todo diseño que utiliza componentes, pues define la estructura específica de
interconexión de señales y entidades que explica la entidad. Se utiliza la instrucción
concurrente elemental de VHDL que es la instrucción componente. También está la
descripción de flujo de datos o diseño de flujo de datos, esta descripción se puede realizar
por el uso de otro tipo de instrucciones concurrentes, que le permiten a VHDL describir un
circuito lógico en términos del flujo de la información y operaciones activadas en el circuito.
Por último, la descripción basada en comportamiento o diseño de comportamiento, esta
forma permite describir un circuito lógico en términos del comportamiento del mismo, para
lo cual necesitamos conocer algunos elementos adicionales de VHDL que veremos a
continuación. Es importando indicar que en VHDL la forma más clara de describir un
comportamiento es a través del “proceso”. Para ello debemos definir un proceso como un
conjunto de instrucciones secuenciales que se ejecutan en paralelo con otros procesos e
instrucciones concurrentes. Utilizando un proceso se puede especificar una compleja
interacción de señales y eventos, concretándose un circuito combinacional ó secuencial que
realiza la operación modelada.

• Paquetes: Se refiere a un archivo que contiene definiciones de objetos que pueden ser
usados en otros programas. Un paquete incluye declaraciones de señal, tipo, constante,
función, procedimiento y componentes. Y se definen señales globales disponibles para
cualquier entidad que haga referencia al mismo, y saber los tipos y constantes definidos

22
conocidos en cualquier archivo que los mencione, así como funciones y procedimientos
pueden ser llamados en archivos que utilicen el paquete. También los componentes pueden
ser ejemplificados en arquitecturas que hacen uso del paquete.

3.6.2. Arquitectura GPU


Los dispositivos GPU modernos tienen su origen en la arquitectura del procesador
vectorial, que permite la ejecución simultánea de operaciones matemáticas sobre datos
múltiples. En contraste, los procesadores de los CPU convencionales no pueden manejar más
de una operación al mismo tiempo.
Por lo general, un procesador convencional tiene que buscar la siguiente instrucción que
va a ejecutar, lo que consume tiempo y genera cierta latencia durante la ejecución de las
instrucciones. Para reducir la latencia, los procesadores modernos ejecutan un conjunto de
instrucciones en forma paralela, lo que se conoce como “entubamiento de instrucciones”
(pipelining), con esta técnica de entubamiento de instrucciones, la decodificación de la
siguiente instrucción inicia antes de que se haya concluido la ejecución de la primera. De tal
manera que el decodificador de instrucciones es constantemente utilizado y, con ello,
disminuye la latencia. En estas condiciones, el tiempo de ejecución para un conjunto de
instrucciones es menor que en un procesador convencional, aumentando así el rendimiento
total del procesador.

23
3.6.2.1. CUDA
En programación paralela utilizando CUDA se mezcla en una misma solución conceptos
que se ejecutan en la CPU con los que se ejecutan en la GPU. En el primero se realizará el
control y llamada de funciones que bien pueden ejecutarse en la CPU, como tradicionalmente
se hace, o en la GPU. En el procesador gráfico se ejecutarán los procesos que se pretende
paralelizar.
La herramienta CUDA permite que los programadores escriban el código paralelo,
usando lenguaje C estándar más algunas extensiones de NVIDIA. La herramienta CUDA
permite organizar el paralelismo en un sistema jerárquico de tres niveles: rejilla, bloque, e
hilo. El proceso comienza cuando el procesador anfitrión (CPU anfitrión) invoca una función
para el dispositivo GPU, llamada kernel, luego de lo cual se crea una rejilla (o arreglo) con
bloques de múltiples hilos, para distribuirla en algún multiprocesador disponible.
En CUDA, kernels son funciones escritas en C que se ejecutan en la GPU, y que lo harán
de forma paralela mediante los llamados threads (hilos), ejecutando cada hilo el mismo
código en paralelo con el resto de hilos que se inicializan. El componente que indica el índice
de cada hilo, threadIdx en realidad es un vector que puede tener hasta 3 elementos. Estos tres
componentes se nombran así: threadIdx.x, threadiIdx.y y threaIdx.z.
Los hilos pertenecen a su vez a bloques, y los bloques se agrupan también en redes de
bloques. Al igual que para los hilos, los bloques también tienen un índice para conocer qué
hilo de qué bloque se está ejecutando y para ello se usa otro vector con 3 componentes:
blockIdx.x, blockIdx.y, y blockIdx.z. Los hilos pueden manejar datos de diferentes espacios
de memoria. Cada hilo tiene su memoria local, por ejemplo, cualquier variable que se declare
en un kernel dado. Cada bloque de hilos puede tener memoria compartida, a la que pueden
acceder todos los hilos de ese bloque.
Cada bloque está compuesto a su vez por unos núcleos de cómputo llamados “núcleos
CUDA” o Streaming Processors (SP), que son los encargados de ejecutar las instrucciones.
El kernel se ejecuta de forma paralela dentro de la GPU como un conjunto de hilos (threads)
y que el programador organiza dentro de una jerarquía en la que pueden agruparse en bloques
(blocks), y que a su vez se pueden distribuir formando una rejilla, tal como se muestra en la
Fig. 3.11. Así pues, un bloque de hilos es un conjunto de hilos concurrentes que pueden
cooperar entre ellos a través de mecanismos de sincronización y compartir accesos a un
espacio de memoria exclusivo de cada bloque. Y una rejilla es un conjunto de bloques que
pueden ser ejecutados independientemente y que pueden ser lanzados en paralelo.

24
Fig. 3.11. La figura ilustra la jerarquía para el uso de GPU, donde cada elemento dentro de la rejilla es
un bloque que contiene una cantidad determinada de hilos (SP) repartidos en filas y columnas.

4. Materiales y métodos
En esta sección se describen los materiales y los métodos que se utilizaron para llevar a
cabo la estimación de la profundidad. Se describe el método de flujo óptico y el método de
estimación de profundidad. Estos algoritmos se implementan en procesamiento paralelo para
sistemas embebidos. Se propone el uso de una sola cámara para estimar el flujo óptico
proporcionado por el movimiento del robot implementando el método de correlación con una
integración piramidal de Lucas Kanade. La disparidad obtenida de los píxeles es proporcional
a la profundidad de la escena, es decir, los objetos cercanos tienen un desplazamiento mayor
que los objetos lejanos. En la Fig.4.1 se muestra la arquitectura del sistema.

Fig. 4.1. Arquitectura del sistema

25
4.1. Adquisición de imágenes
En la primera etapa consideramos la imagen de entrada como I tomando dos fotogramas
consecutivos en diferentes instantes de tiempo del dataset Kitti, que simula el recorrido de
un automóvil. Estás imágenes se comparan entre sí para encontrar la correspondencia de
píxeles, para eso, el primer fotograma se determina como It (x,y), mientras el segundo
fotograma es It+1 (x,y).

Fig. 4.2. Adquisición de imágenes secuenciales.

4.2. Preprocesamiento de imágenes


El preprocesamiento consta de un cambio a monocromático de cada una de las imágenes,
una vez hecho esto, se hace una reducción piramidal de dos niveles, quedando así tres
imágenes de diferentes resoluciones a las cuales se le aplica una convolución para el
suavizado.
La imagen con un nivel de reducción piramidal se denomina IL. Sea L un conjunto finito
que representa el nivel de reducción piramidal L = {1, 2, ..., m}, donde m representa el nivel
de resolución mínimo de cada imagen I. Comenzamos tomando como referencia la imagen
de mayor resolución I donde se define como nx y ny el tamaño de la anchura y la altura de la
resolución original. Construimos recursivamente I1 a partir de I, y luego I2 a partir de I1.
Ahora definimos las ecuaciones de cada resolución, como se muestra en la Ecu. 1 y Ecu. 2.

26
𝐼 (𝑛𝑥,𝑛𝑦)
𝐼1 = 2
(1

𝐼1 (𝑛𝑥 1 ,𝑛𝑦 1 )
𝐼2 = (2
2

A cada reducción piramidal de IL, se le aplica un filtro gaussiano con un kernel K de 3x3,
como se muestra en la Ecu. 3. Conv es el resultado del suavizado, i y j representan la posición
de cada píxel dentro de la imagen de IL. Se utiliza una ventana de 3x3 píxeles (a y b), la cual
se multiplica con el kernel.

𝐿 𝐿
𝐶𝑜𝑛𝑣𝑖,𝑗 = (𝐼 𝐿 ∗ 𝐾)𝑖,𝑗 = ∑3𝑎=1 ∑3𝑏=1(𝐼𝑖+𝑎,𝑗+𝑏 ∗ 𝐾𝑎,𝑏 ) (3

4.3. Flujo óptico


Para llevar a cabo los experimentos, elegimos un método conocido para estimar el flujo
óptico, el cual se basa en la correlación de un píxel central dentro de una ventana de búsqueda
haciendo una iteración piramidal del método de Lucas-Kanade. Dado un punto u en la imagen
It (x,y),, se encuentra su ubicación correspondiente en la imagen It+1 (x,y),; El flujo óptico se
calcula en el nivel más profundo de la pirámide nivel de la pirámide Lm, propagando el
resultado de flujo óptico en cada resolución de la pirámide hasta la resolución original para
estimar el resultado del desplazamiento de los píxeles dL = [dxL, dyL].
La Ecu. 4 expresa el cálculo del flujo óptico en el nivel más profundo I2. Los subíndices
i y j representan el camino a través de la imagen I siendo la coordenada de cada píxel. A esto,
se le añade una ventana de correlación [tx, ty] = 10 alrededor del píxel central en cada una
de las imágenes, además se añade una ventana de búsqueda [sx, sy] en la imagen It+1 (x,y)
para encontrar el píxel de la imagen de referencia It (x,y).

2 𝑠𝑥,𝑠𝑦=4;𝑡𝑥,𝑡𝑦=10 2
𝑜𝑓𝑖,𝑗 = ∑𝑠𝑥,𝑠𝑦=−4;𝑡𝑥,𝑡𝑦=−10 |𝐼𝑡2 (𝑖 + 𝑡𝑥, 𝑗 + 𝑡𝑦) − 𝐼𝑡+1 (𝑖 + 𝑡𝑥 + 𝑠𝑥, 𝑗 + 𝑡𝑦 + 𝑠𝑦)| (4

La ecuación anterior nos proporciona los vectores de desplazamiento dx2 y dy2 que se
utilizan para la Ecu. 5. Ahora el flujo óptico se calcula en el nivel I1 de la pirámide, tomando
en cuenta los desplazamientos de los píxeles en of2. Este procedimiento continúa hasta que
se alcanza la resolución original.

1 𝑠𝑥,𝑠𝑦=4;𝑡𝑥,𝑡𝑦=10 1
𝑜𝑓𝑖,𝑗 = ∑𝑠𝑥,𝑠𝑦=−4;𝑡𝑥,𝑡𝑦=−10 |𝐼𝑡1 (𝑖 + 𝑡𝑥, 𝑗 + 𝑡𝑦) − 𝐼𝑡+1 (𝑖 + 𝑡𝑥 + 𝑠𝑥 + 𝑑𝑥 2 , 𝑗 + 𝑡𝑦 +
𝑠𝑦 + 𝑑𝑦 2 )| (5

27
En la Ecu. 6 calculamos el flujo óptico en el nivel con la mayor resolución I, tomando el
resultado propagado de los vectores de desplazamiento de la Ecu. 5, para obtener el vector
de desplazamiento de los píxeles de manera general.

0 𝑠𝑥,𝑠𝑦=4;𝑡𝑥,𝑡𝑦=10
𝑜𝑓𝑖,𝑗 = ∑𝑠𝑥,𝑠𝑦=−4;𝑡𝑥,𝑡𝑦=−10 |𝐼𝑡 (𝑖 + 𝑡𝑥, 𝑗 + 𝑡𝑦) − 𝐼𝑡+1 (𝑖 + 𝑡𝑥 + 𝑠𝑥 + 𝑑𝑥1 , 𝑗 + 𝑡𝑦 + 𝑠𝑦 +
𝑑𝑦 1 )| (6

La implementación de reducción piramidal consta que cada vector de flujo óptico residual
dL puede mantenerse muy pequeño mientras se calcula un gran vector de desplazamiento de
píxeles d. Esto permite grandes movimientos de píxeles manteniendo el tamaño de la ventana
de búsqueda relativamente pequeño.

4.4. Profundidad a partir del movimiento


Para estimar la información de profundidad de la escena, se usan dispositivos como,
sensores LIDAR, cámaras estereoscópicas o cámaras RGB que pueden ofrecer mapas de
profundidad en tiempo real. Sin embargo, estos sensores aumentan el tamaño y el coste de
los sistemas hardware en un prototipo y están limitados a escenarios de interior, en los que
la distribución de los objetos y la iluminación controlada garantizan la correcta propagación
de la luz estructurada. Con el fin de alcanzar un alto rendimiento para aplicaciones embebidas
y una alta robustez para escenarios de interior/exterior, en este trabajo, introducimos una
transformación de la profundidad a partir de vectores de desplazamiento en el tiempo,
inspirada en la geometría epipolar recuperando la profundidad en la escena, para eso, es
necesario tener suposiciones sobre la escena y sus imágenes 2D. En el caso de la geometría
epipolar, se asume que la escena es rígida y que el error de la geometría epipolar es cercano
a cero.
En nuestro caso, dado el seguimiento de píxeles para dos fotogramas consecutivos
establecemos que la profundidad en la escena es proporcional a los desplazamientos de los
píxeles en 2D entre los fotogramas. Es decir, los objetos lejanos están asociados a un
desplazamiento pequeño mientras que los objetos más cercanos se asocian a valores de
desplazamiento altos.
Siendo dx (x, y), dy (x, y) el seguimiento de píxeles en el tiempo t. La profundidad D (x,
y) en la escena se calcula mediante la Ecu. 5.7, donde el componente Z es proporcional a la
norma de los componentes X, Y. Entonces, para una sola cámara en movimiento, la
profundidad en la escena z es proporcional a la norma de las componentes x, y de la etapa de
seguimiento de píxeles. Observando los resultados, obtuvimos resultados más favorables
utilizando los desplazamientos en x, por ello, nuestro resultado de profundidad es con
respecto a los desplazamientos en el eje x elevado al cuadrado.

2
𝐷 (𝑥, 𝑦) = 𝑑𝑥 (𝑥, 𝑦), 𝑑𝑦 (𝑥, 𝑦) = 𝑑𝑥 (7

28
a) Profundidad a partir de estereovisión, donde una imagen izquierda y una imagen derecha
obtienen el mapa de disparidades que es proporcional a la profundidad.

b) Profundidad a partir de movimiento con una sola cámara, mediante fotogramas consecutivos,
la profundidad es proporcional a la velocidad de los píxeles en el tiempo.
Fig. 4.3 a) Sistema estéreo para extraer la profundidad con una cámara izquierda y una derecha, b)
Sistema monocular para extraer profundidad a partir del movimiento.

4.5. Procesamiento paralelo en GPU


En la práctica, los resultados de la simulación no son factibles y adecuados para cualquier
aplicación del mundo real, ya que nuestro algoritmo se implementa para el procesamiento
paralelo utilizando arquitecturas de hardware, como FPGA o CUDA. Por lo tanto, el objetivo
de esta sección es obtener el algoritmo propuesto y compararlos con el estado actual de la
técnica; demostrando la eficacia del enfoque propuesto con respecto a la precisión de la
localización y la densidad de mapeo.

29
En la Fig. 5.8 se muestra una descripción general de la arquitectura en GPU desarrollada,
El preprocesamiento, flujo óptico y profundidad a partir del movimiento se paralelizan y
calculan en el hardware dedicado a la GPU. Para estos experimentos, implementamos nuestro
algoritmo en una CPU de laboratorio con una tarjeta gráfica GPU NVIDIA 1050Ti (GPU)
con 768 núcleos CUDA.

Fig. 4.4. Implementación de la GPU.

En todos los casos el nivel máximo de paralelización se define como N = b (Y/√T) c ∗ b


(X/√T) c; donde X, Y es la resolución de la imagen de entrada y T es el máximo de hilos por
bloque dentro de la GPU. Así mismo, las coordenadas de la imagen 2D (x, y) se mapean en
una sola dimensión (K), adecuada para las implementaciones CUDA. Para ello definimos v
(K) = v (x + X ∗ y) como el mapeo en una sola dimensión K para unas dimensiones de entrada
X, Y; donde X es la resolución horizontal 2D y son coordenadas espaciales 2D.
Con la ayuda de Matlab se hacen extensión en C que permiten definir funciones
especiales llamadas kernels, que se designan a nuestra GPU de laboratorio para que las
ejecute uno de sus múltiples núcleos, obteniendo un paralelismo masivo. Dentro de esas
funciones puede consultarse el identificador del hilo y del bloque en tiempo de ejecución,
esto permite calcular los datos con los cuales trabajará dicho hilo. Nuestra implementación en la
GPU consiste en cinco kernels CUDA que se ejecutan de forma secuencial, como se muestra
en la Fig. 10. La escala de grises y la reducción piramidal forman parte de la etapa de
preprocesamiento, mientras que el conjunto de bloques SAD conforman el flujo óptico
obteniendo el resultado final en el bloque SAD of0, tomando en cuenta el valor del
desplazamiento de los píxeles en los bloques anteriores.

30
Fig. 4.5. Implementación de la GPU para la etapa de extracción de mapa de profundidad.
Ejecutamos nuestros cinco kernels CUDA que se ejecutan de forma secuencial. Cada kernel paraleliza
una parte diferente de la formulación de la extracción de características.

5. Resultados y Discusión
5.1. Estimación de profundidad

RMSE = 68.18 %

RMSE = 63.23 %

RMSE = 62.70 %

31
RMSE = 55.05 %

RMSE = 55.19 %

RMSE = 62.82 %
a) Input b) GroundTruth c) Nuestro resultado
Fig. 5.1. Resultados obtenidos.

En la Figura 3, mostramos los resultados cualitativos de profundidad evaluados con


el conjunto de datos Kitti [68] con imágenes de 1241x376 de resolución. La profundidad o
distancia de los objetos observados se muestra en escala de grises. Los objetos cercanos se
representan en tonos blancos, mientras que los objetos lejanos en tonos oscuros. Como puede
observarse de forma global, en el centro de la imagen, se observa tonos oscuros, indicando
que en esa parte de la escena los objetos se encuentran a una distancia grande comparada con
los objetos marcados en tonos claros en las orillas izquierda y derecha donde los objetos están
cercanos a la cámara. Aun cuando se observan algunos errores de cálculo, se observa que los
resultados cualitativos tienen una buena respuesta en la detección de objetos alrededor del
entorno a partir de la profundidad obtenida.
En la Tabla 1, hacemos comparaciones cuantitativas entre nuestro algoritmo y el
estado actual de la técnica. Calculamos el error con el conjunto de datos KITTI. Nuestro
algoritmo supera a [74], todos los demás tienen un mejor resultado en términos de precisión.

32
Tabla 1. Comparación de eficiencia con otros trabajos

Trabajos Error RMSE

[69] 61.62%

[70] 52.61%

[71] 50.48%

[72] 6.91%

[73] 5.94%

Nuestro trabajo 53.52%

5.2. Procesamiento en GPU


Nuestro algoritmo se implementa en una GPU y proporciona una alta velocidad en tiempo
real en comparación a trabajos anteriores. En la tabla 1, comparamos la velocidad de
procesamiento en CPU y GPU. Con nuestro resultado, es posible navegar en tiempo real, ya
que nuestro algoritmo es aplicable a un sistema embebido de bajo costo (Jetson Nano,
FPGA). En cuanto a la velocidad de procesamiento, logramos un aumento de la velocidad en
comparación con todos los trabajos relacionados mostrados en la tabla 1 que alcanza los 136
fps.
Además, en la tabla 5.3 se hace la comparación con trabajos relacionados hechos con
cámaras estéreo, reduciendo el tiempo de procesamiento en tiempo real y los fotogramas por
segundo (fps), se presentan en la tabla 1, donde se muestra la diferencia de velocidad en el
procesamiento en CPU a GPU y de los fotogramas procesados en un segundo.
En la tabla 2, se muestra la velocidad en comparación con trabajos relacionado
obteniendo mayor cantidad de fps. Esto quiere decir que nuestro algoritmo proporciona lo
suficiente para navegación autónoma en términos de velocidad y como vemos los resultados
cualitativos son coherentes.

Tabla 2. Comparación de la velocidad de procesamiento con CPU y GPU

Proceso Tiempo de ejecución Velocidad de


procesamiento

CPU 52 seg. 0.0061 fps

GPU 0.0018 seg. 136 fps


Fuente: Elaboración propia

33
Tabla 3. Comparación de la velocidad de procesamiento con otros trabajos

Trabajos Tiempo de ejecución

[69]] 0.71 seg.

[70] 0.01 seg.

[71] 50 min.

[72] 135 seg.

[73] 0.25 seg.

Nuestro trabajo 0.0018 seg.


Fuente: Elaboración propia

5.3. Sistema embebido para pruebas


En Fig. 5.2 se muestra el prototipo que se utilizará para realizar las pruebas necesarias en
la implementación del algoritmo propuesto de seguimiento de paredes. El robot deberá evitar
coaliciones al detectar un objeto frente a él utilizando la información de profundidad de la
escena.

Fig. 5.2. Prototipo robot autónomo.

En la Figura 5.3, se muestra la detección de objetos cercanos como los píxeles blancos
dentro de la región de búsqueda marcada con el recuadro rojo. El robot debe validar cada
fotograma secuencialmente para continuar en línea recta o girar en una dirección hasta
encontrar la región de búsqueda libre, es decir, los píxeles negros, y continuar explorando.
Se pueden observar zonas con profundidades diferentes en las zonas analizadas, por lo que
el algoritmo deberá ser acompañado de un método de normalización, así como de la etapa de
control correspondiente a fin de que sea completamente funcional. Actualmente estamos
trabajando en estos detalles técnicos, los cuales serán presentados en la tesis correspondiente
a este proyecto. Para que el robot sea funcional, es necesario una etapa de preprocesamiento

34
para estimar la profundidad a partir del movimiento. Una vez hecho esto, se procede a la
toma de decisión evitando coaliciones.

Fig. 5.3. Resultados obtenidos.

6. Conclusiones
En este trabajo, nosotros introducimos una metodología para estimación de profundidad
a partir del movimiento con una sola cámara. Esta estrategia combina el procesamiento
paralelo y la extracción geométrica que proporciona las imágenes capturadas. Para eso, el
primer paso es obtener las imágenes secuencialmente y aplicar reducción piramidal gaussiana
con dos niveles. En segundo lugar, se determina el flujo óptico en cada nivel de la pirámide.

35
En tercero, usamos el flujo óptico obtenido en la pirámide de mayor resolución para obtener
la profundidad de la escena.
El flujo óptico es fundamental ya que es proporcional a la profundidad. Para la evaluación
de profundidad usamos el dataset kitti, donde nuestros resultados cualitativos se comparan
con el ground truth de profundidad.
Finalmente, podemos concluir que nuestra metodología estima la profundidad con una
sola cámara obteniendo resultados a una alta velocidad de procesamiento en tiempo real
capaces de ser aplicados a un robot autónomo.

7. Referencias
1. Carlos A. Velásquez Hernández, J.J.C.C., Nieto, E.C.: Implementación de sistema de
navegación autónomo en robot móvil experimental para reconstrucción y exploración de
entornos desconocidos. IV Congreso Internacional de Ingeniería mecatrónica y
Automatización – CIIMA 2015. pp. 72–84.
2. Johan Steve Riascos Segura Yeison Alejandro Cardona
Gallego. Determinación de la cinemática de objetos móviles bajo condiciones controladas
mediante imágenes empelando técnicas de flujo óptico. Universidad Tecnológica de Pereira
(2015).
3. Gerardo G. Acosta, Bruno V. Menna, Roberto J. de la Vega, Luis M. Arrien, Hugo J.
Curti, Sebastián A. Villa.: MACÁBOT: Prototipo de vehículo autónomo de superficie
(ASV). Revista Tecnología y Ciencia. 2017.
4. Nahuamel S. Denis, Ortega A. Rivaldo y Arangure T. Ernesto: Robot autónomo que
esquiva objetos mediante un sensor ultrasónico. Computer Science (2020)
5. Ramírez, G.: Método de aprendizaje simple para navegación de minirobots
m ́oviles rodantes pp. 60–66 (2003).
6. Morris William D ́ıaz Saravia, J.M.T.p.: Diseño de prototipo de vehículo
autónomo utilizando redes neuronales p. 62 (2019).
7. Fernando A. Auat Cheein, Celso De la Cruz, Ricardo Carelli, Teodiano F. Bastos
Filho: Navegación autónoma asistida basada en SLAM para una silla de ruedas robotizada
en entornos restringidos. Revista Iberoamericana de automática e Informática
industrial (2011).
8. Rioux, A., S.W.: Autonomous slam based humanoid navigation in a cluttered
environment while transporting a heavy load. Robotics and Autonomous Systems, pp. 50–
62 (2018).
9. Ioannis Kostavelis, Evangelos Boukas, L.N., Gasteratos, A.: Stereo-based
Visual Odometry for Autonomous Robot Navigation 2015.
10. Martínez, J.M.S., Ruíz, F.E.: Mapeado 3D con robots autónomos mediante
visión estéreo (2005).
11. G. Sanahuja a, A. Valera b, *, A.J. Sánchez b, C. Ricolfe-Viala b, M. Vallés b, L.
Marín b.: Control Embebido de Robots M ́oviles con Recursos Limitados Basado en Flujo
Óptico. Revista Iberoamericana de Automática e Informática industrial 8 pp. 250–257
(2011).

36
12. Hann Woei Ho, G.C.d.C., Chu, Q.: Distance and velocity estimation using optical
flow from a monocular camera. International Journal of Micro
AirVehicles (2017).
13. Meng, X.Y., Sun, B.Y.: Monocular Visual Odometry based on joint unsupervised
learning of depth and optical flow with geometric constraints 2021.
14. Garzón, D.A.C., de la Rosa, M.F.: Implementación de SLAM con multi-
robot. Departamento de Ingeniería de Sistemas y Computación 2012.
15. Amaya, G.A.A., Builes, J.A.J.: SLAM Monocular en Tiempo Real. Doctorado en
Ingeniería - Sistemas e Informática pp. 125. (2019).
16. G. Klein and D. Murray, “Parallel tracking and mapping for small ar workspaces”, In
Proceedings of the 6th IEEE and ACM International Symposium on Mixed and Augmented
Reality, ISMAR 2007, Nara, Japan, Nov. 2007, pp. 225–234.
17. D. Nistér. “An efficient solution to the five-point relative pose problem”, IEEE
transactions on pattern analysis and machine intelligence, vol. 26(6), pp. 756–770, 2004.
18. O. D. Faugeras and F. Lustman, “Motion and structure from motion in a piecewise
planar environment”, International Journal of Pattern Recognition and Artificial Intelligence,
vol. 2(3), pp. 485–508, 1988.
19. C. Pirchheim, D. Schmalstieg, and G. Reitmayr, “Handling pure camera rotation in
keyframe-based SLAM”, In Proceedings of the 12th IEEE and ACM International
Symposium on Mixed and Augmented Reality, ISMAR 2013, Adelaide, Australia, Oct.
2013, pp. 229–238.
20. C. Tomasi and T. Kanade, “Detection and tracking of point features”, Technical
Report CMU-CS-91-132, 1991.
21. C. D. Herrera, K. Kim, J. Kannala, K. Pulli, and J. Heikkil¨a, “DT-SLAM: Deferred
Triangulation for robust SLAM”, In Proceedings of the 2nd International Conference on 3D
Vision, 3DV 2014, Tokyo, Japan, Dec. 2014, pp. 609–616.
22. J. Engel, T. Sch¨ops, and D. Cremers, “LSD-SLAM: Large-Scale Direct
monocularSLAM”, In Proceedings of the 2014 European Conference on Computer Vision,
ECCV 2014, Zurich, Switzerland, Sep. 2013, pp. 834–849.
23. J. Engel, V. Koltun, and D. Cremers, “Direct sparse odometry”, IEEE transactions on
pattern analysis and machine intelligence, vol. 40(3), pp. 611–625, 2018.
24. A. Concha-Belenguer and J. Civera-Sancho, “DPPTAM: Dense Piecewise Planar
Tracking And Mapping from a monocular sequence”, In Proceedings of the 2015 IEEE
International Conference on Intelligent Robots and Systems, IROS 2015, Hamburg,
Germany, Sep. 2015, pp. 1–8.
25. R. Mur-Artal, J. M. Martinez-Montiel, and J. D. Tardos, “ORB-SLAM: a versatile
and accurate monocular-SLAM system”, IEEE Transactions on Robotics, vol. 31(5), pp.
1147–1163, 2015.
26. Abiel Aguilar-González. (2019). Monocular-SLAM dense mapping algorithm and
hardware architecture for FPGA acceleration. INAOE, Computer science department Luis
Enrique Erro #1 Sta. Ma. Tonantzintla, Puebla, Mexico.: INAOE.
27. Rui Fan, Li Wang, M.J.B.I.P.: Computer stereo vision for autonomous driving.
European Union’s Horizon 2020 research and innovation pp. 30. (2020).
28. Gennery, D.B.: A stereo vision system for an autonomous vehicle. 5th international
joint conference on Artificial intelligence 2, 576–582. (1977).

37
29. Hu, S.P.G.: Stereo vision-based localization of a robot using partial depth
estimation and particle filter. The International Federation of Automatic Control pp. 7272–
7277 (2014).
30. A. Klaus, M. Sormann, and K. Karner. “Segment-based stereo matching using belief
propagation and a self-adapting dissimilarity measure”, 2006.
31. S. R. Bista, P. R. Giordano, and F. Chaumette, “Appearance-based indoor navigation
by using line segments”, IEEE Robotics and Automation Letters, vol. 1(1), pp.423–430,
2016.
32. J. Biswas and M. Veloso, “Depth camera based indoor mobile robot localization and
navigation”, In Proceedings of the 2012 IEEE International Conference on Robotics and
Automation, ICRA 2012, Saint Paul, MN, USA, Jun. 2012, pp. 1697–1702.
33. Hazem Rashed, Ahmad El S., Senthil and M. ElHelw, V. R&D Cairo, Egypt, Valeo
Vision Systems, Nile University, Cairo, Egypt.: Motion and depth augmented semantic
segmentation for autonomous navigation. Conference on Computer Vision and Pattern
Recognition (CVPR) Workshops pp. 7 (2019).
34. Victor V. G., F.M.N., Sanfelín A.: Lidar-based scene understanding for autonomous
driving using deep learning. Robótica e Informática Industrial, CSIC-UPC, pp. 113. (2020).
35. Huang, Y., Chen, Y.: Autonomous driving with deep learning: A survey of
state-of-art technologies. Computer Vision and Pattern Recognition 3, pp.33 (2020).
36. Agrawal, P., J. Carreira, and J. Malik, Learning to See by Moving. 2015.
37. Ummenhofer, B., et al. DeMoN: Depth and Motion Network for Learning Monocular
Stereo. in IEEE Conference on Computer Vision & Pattern Recognition. 2017.
38. Zhou, H., B. Ummenhofer, and T. Brox, DeepTAM: Deep Tracking and Mapping.
2018.
39. Newcombe, R.A., S.J. Lovegrove, and A.J. Davison. DTAM: Dense tracking and
mapping in real time. in 2011 International Conference on Comp
40. Zhou, T., et al., Unsupervised Learning of Depth and Ego-Motion from Video. arXiv,
2017.
41. Yin, Z., J. Shi, and Ieee, GeoNet: Unsupervised Learning of Dense Depth, Optical
Flow and Camera Pose, in 2018 Ieee/Cvf Conference on Computer Vision and Pattern
Recognition. 2018. p. 1983-1992.
42. Yin, Z., J. Shi, and Ieee, GeoNet: Unsupervised Learning of Dense Depth, Optical
Flow and Camera Pose, in 2018 Ieee/Cvf Conference on Computer Vision and Pattern
Recognition. 2018. p. 1983-1992
43. Mahjourian, R., M. Wicke, and A. Angelova. Unsupervised Learning of Depth and
Ego-Motion from Monocular Video Using 3D Geometric Constraints. in 2018 IEEE/CVF
Conference on Computer Vision and Pattern Recognition. 2018.
44. Bian, J.-W., et al., Unsupervised Scale-consistent Depth and Ego-motion Learning
from Monocular Video, in Advances in Neural Information Processing Systems 32, H.
Wallach, et al., Editors. 2019.
45. Campbell, J., Sukthankar, R., Nourbakhsh, I. Techniques for Evaluating Optical Flow
for Visual Odometry in Extreme Terrain. Intelligent Robots and Systems, 2004. (IROS
2004). Proceedings. 2004 IEEE/RSJ Int. Conf. on (Volume: 4).
46. Strydom, R., Thurrowgood, S., Srinivasan, V. Visual Odometry: Autonomous UAV
Navigation using Optic Flow and Stereo. Proceedings of the 2014 Australasian Conference
on Roboticsand Automation. ACRA2014: Australasian Conference on Robotics and
Automation, Melbourne VIC, Australia, (). 2-4 December 2014.
38
47. Guizilini, V. and Ramos, F. Visual Odometry Learning for Unmanned Aerial
Vehicles. 2011 IEEE International Conference on Robotics and Automation. Shanghai
International Conference Center
48. Santana, P. and Correia, L. Improving Visual Odometry by Removing Outliers in
Optic Flow. Proc. of the 8th Conf. on Autonomous Robot Systems and Competitions, pp.
117–122, 2008.
49. Wang, C., Zhao, C. and Yang, J. Monocular odometry in country roads based on
phase-derived optical flow and 4-DOF ego-motion model. Industrial Robot. An International
Journal, Vol. 38 Iss: 5, pp.509 – 520.
50. More, V., Kumar, H., Kaingade, S., Gaidhani, P. and Gupta, N. Visual Odometry
using Optic Flow for Unmanned Aerial Vehicles. Cognitive Computing and Information
Processing (CCIP), 2015 International Conference on.
51. Oswualdo Alquisiris-Quecha, J.M.C.: Depth estimation using optical flow
and CNN for the NAO robot. Computer Science Department, Mexico, pp. 49–58 (2019)
52. Ponce, H., B.J.M.A.E.: Distance estimation using a bio-inspired optical flow
strategy applied to neuro-robotics. International Joint Conference on Neural Networks
(IJCNN) pp. 1–7 (2018).
53. Ho, H.W., d.C.G.C.Q.: Distance and velocity estimation using optical flow
from a monocular camera. International Journal of Micro Air Vehicles pp. 198–208 (2017).
54. Souhila, K., Karim, A.: Optical flow-based robot obstacle avoidance. Inter-
national Journal of Advanced Robotic Systems 4, 13–16 (2007).
55. Mohamad T. Alkowatly, V.M.B., Holderbaum, W.: Estimation of visual
motion parameters used for bio-inspired navigation. Journal of Image and
Graphics 1(3), 120–124 (2013).
56. Ho, H.W., de Croon, G.C., Chu, Q.: Distance and velocity estimation using optical
flow from a monocular camera. International Journal of Micro Air Vehicles 9(3), 198–208
(2017)
57. Ponce, H., Brieva, J., Moya-Albor, E.: Distance estimation using a bio-inspired
optical flow strategy applied to neuro-robotics. In: 2018 International Joint Con ference on
Neural Networks (IJCNN). pp. 1–7. IEEE (2018).
58. DeSOUZA, G. and KAK, A. (2002), Vision for mobile robot
navigation: A survey. En: IEEE Transactions on pattern analysis and machine intelligence,
Vol. 24, No. 2, p. 237-267.
59. Alberto Mauricio Arias Correa.: Navegación de robot móvil
en interiores utilizando flujo óptico a partir de imágenes panorámicas. Universidad Nacional
de Colombia sede Medellín, facultad de minas, escuela de sistemas Medellín: Facultad de
minas (2009).}
60. José Ramón Mejía Vilet. (2005). Procesamiento Digital de
Imágenes. San Luis Potosí: Área de Computación e Informática.
61. Ramírez, A., 2004. Tesis de licenciatura con el nombre
“Diseño de Filtros Digitales Aplicados a Antenas Inteligentes”. Universidad Autónoma de
Baja California. 101 p.
62. F. Giménez-Palomares, J. A. Monsoriu, E.A.M.: Aplicación
de la convolución de matrices al filtrado de imágenes. Modelling in Science Education
and Learning 9(2), 97–108 (2016)
63. B. K. Horn, B. G. Schunck, Determining optical flow,
Artificial Intelligence 17 (1-3) (1981) 185 – 203. DOI:10.1016/0004-3702(81)90024-2.
39
64. Luiso, Javier: Tecnología intel sse aplicada al cálculo de
flujo óptico, Serie Documentos de Trabajo, No. 639, Universidad del Centro de Estudios
Macroeconómicos de Argentina (UCEMA), Buenos Aires 2018.
65. Verri, A Y Poggio, T (1989). Motion field and optical flow:
qualitative properties. IEEE Transactions on pattern analysis and machine intelligence,
vol.11, No.5, May, pp.490-498.
66. Barranco Medina María Fernanda. En Detección de
movimiento mediante el uso de flujo óptico (80). México, D.F.: Instituto Politécnico
Nacional. (2015).
67. Andrés Bruhn, Joachim Welckert, Cristoph Schnorr.
Combining the Advantages of Local and Global Optical Flow Methods.
68. Geiger, A.; Lenz, P.; Stiller, C.; Urtasun, R., 2013. Vision
meets robotics: The KITTI dataset. Int. J. Robot. Res. 32, 1231–1237
69. Ladicky, L., Sturgess, P., Rusell, C., Sengupta, S., Bastanlar,
Y., Clocksin, W. & Torr, P. H. S. (2012). Joint Optimization for Object Class Segmentation
and Dense Stereo Reconstruction. International Journal of Computer Vision, 100(2), 122-
133.
70. Ladicky, L., Sturgess, P., Rusell, C., Sengupta, S., Bastanlar,
Y., Clocksin, W. & Torr, P. H. S. (2012). Joint Optimization for Object Class Segmentation
and Dense Stereo Reconstruction. International Journal of Computer Vision, 100(2), 122-
133.
71. Ladicky, L., Sturgess, P., Rusell, C., Sengupta, S., Bastanlar,
Y., Clocksin, W. & Torr, P. H. S. (2010). Joint Optimization for Object Class Segmentation
and Dense Stereo Reconstruction. In: BMVC.
72. Nguyen, V. D., Nguyen, H. V., & Jeon, J. W. (2017). Robust
Stereo Data Cost With a Learning Strategy. IEEE Transactions on Intelligent Transportation
Systems, 18(2), 248-258.
73. Lee, Y., Park, M. G., Hwang, Y., Shin, Y., & Kyung, C. M.
(2018). Memory-Efficient Parametric Semiglobal Matching. IEEE Signal Processing Letters,
25(2), 194-198.
74. Geiger, A.; Lenz, P.; Stiller, C.; Urtasun, R., 2013. Vision
meets robotics: The KITTI dataset. Int. J. Robot. Res. 32, 1231–1237.

40

También podría gustarte