miércoles, 27 de mayo de 2015

Fallos en la reconstrucción

Como se observa en la siguiente imagen, en la reconstrucción se cometen algunos fallos a la hora de calcular los puntos 3D del mundo. Los más evidentes son los que están señalados en la imagen:

Después de realizar diferentes pruebas, se ha comprobado que esos puntos erróneos no se producen porque los rayos de retroproyección se encuentren muy alejados unos de otros, sino que son debidos a una mala correspondencia de los puntos. Si nos fijamos en las zonas donde se realiza la correspondencia, se observa que todos los puntos del borde son exactamente iguales, por lo que es imposible realizar una correspondencia correcta.

Por lo tanto, según se van recorriendo los píxeles del borde en la imagen izquierda, siempre le hace corresponder el mismo punto en la imagen derecha, lo que produce esos puntos incorrectos.


lunes, 4 de mayo de 2015

Pica 0

En este último paso de nuestro algoritmo se ha implementado la automatización de seleccionar los puntos de interés en la imagen izquierda y la correspondencia en la otra imagen.

Lo primero que se ha hecho después de hablar con algunos compañeros es modificar los archivos xml de calibración de las cámaras y el pioneer.h para utilizar las imágenes con una resolución de 640 x 480 para evitar estar cambiando de resolución constantemente.

Tomando como punto de partida el código del pica 1 se ha implementado lo siguiente:

- Se ha aplicado el filtro de Canny tanto a la imagen izquierda como a la imagen derecha que se obtienen de las cámaras.

- Se recorre la imagen izquierda y se toman como puntos de interés los píxeles que se encuentran en blanco, que son los puntos de borde de los objetos.

- Tomamos un parche de tamaño 11 x 11 centrado en el píxel del punto que se borde para compararlo posteriormente con los parches de la imagen derecha.

- Una vez seleccionado un punto de la imagen izquierda, se genera el rayo de retroproyección que pasa por ese pixel.

- Se cogen dos puntos del rayo de retroproyección y se proyectan sobre la imagen derecha.

- Estos dos puntos se encuentran en la línea epipolar. Utilizando la ecuación punto pendiente de la recta se calcula dicha línea.

 - Se recorre la línea epipolar teniendo en cuenta solo los puntos que también son borde en esta imagen. Para cada punto que es borde se extrae un parche de 11 x 11 y se compara con el parche de la imagen izquierda utilizando la suma de diferencias cuadradas.

- En caso de que ningún parche de la imagen derecha supere un cierto umbral, ese punto de descarta y no se generará en 3D.

- Para el píxel de la imagen derecha que más de parezca al patrón, se genera el rayo de retroproyección.

- Por último, se calcula el punto de ambos rayos en el que la distancia entre ellos sea mínima. Obtenidos estos puntos, se calcula el punto medio y ese será nuestro punto 3D.

En el siguiente video se muestra la velocidad y la calidad de la reconstrucción obtenida: