miércoles, 25 de mayo de 2016

Mejorando la reconstrucción

A partir del último punto en el cual se quedó la reconstrucción se han hecho varios avances, para empezar, se muestra la reconstrucción en color.

Se ha cambiado el umbral. En la siguiente imagen se puede ver la reconstrucción en color sin un umbral:


Uno de los umbrales con los que se ha probado se obtienen 5 mil correspondencias de 7mil puntos que tienen los bordes y se obtienen los siguientes resultados:



 

No se llega a preciar bien la reconstrucción, pero si que se nota que hay menos puntos que son ruido como los que salían del foco. A continuación se va a mostrar la reconstrucción con los puntos en negro porque creo que se aprecia mejor.



En conclusión, se en comparación con el post anterior la reconstrucción se hace en los ejes correctamente y no al revés, además de la reconstrucción en color.





martes, 24 de mayo de 2016

Continuamos con la reconstrucción

Para mejorar y que funcione se han hecho varios cambios en el código que se irán detallando uno a uno a continuación.

 Para empezar, el cálculo de puntos característicos se ha sustituido por utilizar los bordes de la imagen, ya que también son puntos característicos. Los motivos principales del cambio es que no se obtienen puntos característicos suficientes y que los puntos característicos de la imagen derecha no coincidían con los de la izquierda, por lo que se obtendría error al hacer la reconstrucción.

Los bordes se han calculado con canny y lo que se obtiene se puede ver en la siguiente imagen.

Que son un total de 7mil puntos en la imagen derecha y 7 mil puntos en la imagen izquierda.

Antes, para buscar correspondencias se utilizaba la ssd, pero probando, se ha decidido utilizar la función norm de opencv. Se obtienen al rededor de 7 mil correspondencias.

También se ha mejorado la búsqueda en la línea epipolar, el problema residía en que progeo nombra de manera diferente a python las filas y columnas en puntos.

Habiendo corregido estos y otros pequeños fallos se procede a hacer la reconstrucción, obteniéndose el siguiente resultado:



Como se puede ver en la imagen, la reconstrucción me sale del revés y no consigo obtener la combinación de [x,y,z] que consiga dibujarlos bien. También hay que cambiar el umbral en el calculo de puntos característicos ya que se muestran muchos puntos que son ruido y por último se va a tratar de mostrar los puntos en color.

Además de esas futuras mejoras, se va a modificar el umbralizado de canny para obtener más puntos bordes para hacer una reconstrucción más densa.

Continuamos trabajado.

jueves, 5 de mayo de 2016

Primer intento de reconstrucción.

Recordamos que la finalidad de esta práctica es realizar una reconstrucción 3D a partir de un escenario que es el siguiente:


Las decisiones y pasos que se han seguido para el desarrollo de la práctica son los siguientes:

1. Para ello, la primera decisión que se ha tomado es cómo obtener los puntos característicos de  la imagen. He decidido utilizar el algoritmo de FAST, por las ventajas que nos contaron en la charla de autolocalización. Los puntos característicos se obtienen del ambas imágenes, y son un total de 1242 puntos en la imagen izquierda y 1306 de la imagen derecha. En la siguiente figura está representado en el visor los puntos 2D que se captan de la imagen (siento que la imagen no se vea bien, pero no consigo llegar a manejar bien los movimientos de las vistas del visor). A primera vista parece que es una densidad suficiente de puntos.



2. El siguiente paso es buscar la correspondencia de un punto de la imagen izquierda entre los de la imagen derecha. Para ello se utiliza un tamaño de bloque de 22x22, es un tamaño grande, tarda más en computar pero es más preciso. Más adelante se reconsiderará el tamaño de la vecindad. Para restringir más la búsqueda se calcula la línea epipolar correspondiente en la imagen derecha del punto característico izquierdo, a la linea epipolar se le da un poco de holgura, buscando los puntos característicos en la franja epipolar. Para comparar los bloques se utiliza la suma de diferencias al cuadrado. Se guardan las correspondencias en una lista. En la siguiente imagen se van a representar las correspondencias obtenidas, es decir, los puntos característicos izquierdos a los cuales se les ha encontrado una correspondencia:


La imagen corresponde a la parte de los cubos, al mini-bowser y al puño del bowser. La imagen está un poco volteada porque no consigo manejar bien las vistas del visorn

3. Cuando se tienen todas las correspondencias, se procede a hacer la triangulación. Para ello se toma el punto característico de una imagen y la posición de esta y por otro lado, el otro punto característico correspondiente y la otra posición de esa cámara, a partir de la dos rectas que forman los puntos de cada cámara correspondientemente, se va a buscar el punto cuya distancia sea mínima entre las rectas, para ello se ha seguido esta expicación que he obtenido gracias a los compañeros. 

Los resultados que obtengo no son buenos, por no decir que no obtengo resultados. Por lo que hay que revisar:

- La parte de buscar correspondencias, ya que no se encuentran todas.
- Corregir la triangulación, ya que las que se han encontrado no son proyectadas.