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:
No hay comentarios:
Publicar un comentario