Ir al contenido principal

Reconstrucción3D: resultados

Tras describir cual ha sido el procedimiento que he seguido durante la práctica, es hora de analizar los resultos. Para visualizar mejor los puntos he decidido utilizar un visor de puntos 3D externo, Meshlab. He notado que a medida que se van pintando los puntos obtenidos en el visor que se adjunta con Gazebo el tiempo de ejecución aumento. Por ello he optado por ir almacenando los puntos en una lista para finalmente guardarlos en un fichero .obj. De esta manera, una vez finalizada la ejecución, es posible cargar el archivo en el visualizador y y observar el resultado de la reconstrucción.

Debido a un fallo de programación la reconstrucción salía con los contornos bien dibujados pero en un plano 2D dentro del mundo. Después de arreglar ese pequeño error en una condición, he podido representar los bordes de las figuras en tres dimensiones. Sin embargo, el resultado obtenido tampoco era del todo bueno. Era posible intuir alguna de las figuras pero realmente no estaba bien. Revisando el código me dí cuenta que el error se encontraba en el cálculo de la ecución de la línea epipola. Las variables no estaban restringidas a enteros, por lo que iba acumulando decimales a lo largo de las operaciones. Esto provocó que en ocasiones la epipolar se viese desplazada uno o dos pixeles hacia arriba, evitando así el correcto emparejamiento del los puntos. Simplemente haciendo un cast a entero en las distintas operaciones he podido conseguir corregir el error y obtener la epipolar adecuada.

A pesar de que el MSE no es la mejor métrica para emparejar parches, los resultados no son nada malos. He probado a realizar una comparación de histogramas, en RGB, pero la reconstrucción no era mucho mejor además de aumentar el tiempo de cómputo.




En las capturas de pantalla podemos ver el resultado de la reconstrucción. Los contornos de las figuras se pueden apreciar perfectamente, distinguiéndose unas de otras. Incluso es posible ver leer las letras inscritas en los cubos. Sin embargo, cuando giramos los puntos, estos aperecen divididos en planos 2D separados. Esto se produce por la baja resolución del software para medir la profundidad. Aunque parezca que el resultado es malo, realmente es algo que no se puede solucionar.



Comentarios

Entradas populares de este blog

Reconstruccion3D: emparejamiento de puntos y cálculo del punto 3D

Como se comentaba en la entrada anterior, una vez tenemos la línea epipolar calculada podemos buscar el punto homólogo correspondiente. Para ello es necesario establecer una métrica para comparar ambos puntos. Tomar simplemente los valores RGB de los puntos no parece la forma más fiable, puesto que puede ser que haya más de un punto similar. Lo ideal sería tomar una región o parche centrada en los puntos. De esta forma la comparación será mucho más fiable y discriminante a lo largo de la epipolar. Es necesario establecer una métrica para comparar ambos parches. Una de las más sencillas es el MSE (Mean Square Error), que promedia el resultado de restar los valores en escala de grises de cada uno de los elementos del parche. Existen otras métricas como comparar histogramas o la correlación, pero considero que es mejor comenzar con la más simple. Como se trata de una diferencia, hay que calcular el MSE entre todas las posibles combinaciones a lo largo de la epipolar. El punto...

FollowLine: primera aproximación

Para poner en práctica las ideas expuestas en la entrada anterior he realizado una primera aproximación al algoritmo de comportamiento. En el enunciado de la práctica se recomienda usar un controlador tipo PID para estimar el error, pero para este intento he decidido omitirlo. El objetivo es simplemente aprender a controlar el robot actuando en consecuencia al error cometido. He extraído tres puntos de control a diferentes alturas de la imagen referencia, con los que he dibujado la línea ideal de trayectoria en recta. En cada iteración calculo el punto medio del ancho de la línea y estimo la distancia con el punto de referencia, en principio solo para el punto a media altura. Según la magnitud del error he fijado una serie de reglas para establecer la velocidad de avance y de giro. Si el error es muy grande la velocidad de avance debe de ser pequeña y la de giro grande. Sin embargo, cuando el error es pequeño la velocidad de avance se puede aumentar al mismo tiempo que se disminuye la ...

Reconstruccion3D: Descripción y primeros pasos

En esta práctica se abordará el tema de la reconstrucción de puntos 3D a partir de dos cámaras calibradas. Para ello, gracias al entorno de Gazebo, contamos con un robot que incorpora un par estéreo calibrado del que se conoce su posición y separación. Al mundo de Grazebo se le han añadido una serie de objetos 3D de forma que las cámaras puedan captarlos para efectuar la reconstrucción. Así mismo, también tenemos a nuestra disposión un visor de puntos 3D a través del cual podremos ver el resultado. Al igual que en la práctica anterior, se parte de un script donde poder añadir código y una serie de librerías que facilitarán muchas operaciones. Para efectuar una reconstrucción es necesario conocer la posición que ocupa el punto 3D en las dos imágenes. Obviamente no se dispone de dicha información, por lo que hay que escoger un punto en una de las imágenes y buscar su homólogo en la otra. Es importante escoger bien los puntos, ya que cuanta más textura contengan más fácil será enc...