Ir al contenido principal

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 con menor MSE será el selecionado como punto homólogo.

Una vez tenemos el mismo punto localizado en ambas imágenes, podemos obtener el punto 3D calculando el lugar donde se corten ambos rayos de retroproyección. Para esta tarea he decidido emplear el mismo código que algunos de mis compañeros:



La función lineLineIntersect recibe como argumentos cuatro puntos, dos por cada rayo de retroproyección. En caso de que los rayos no se corten exactemente la función devuelve el punto intermedio de la distancia entre las dos rectas. Sin embargo, si las distancia entre las dos rectas es mayor que uno se considera que el matching no es correcto y devueve un None. Este detalle es muy importante, porque en caso de mal emparejamiento la distancia entre las rectas superará el umbral y el punto será descartado.

Finalmente, gracias a la función 'drawPoint' y el visor que incorpora la práctica podemos dibujar los puntos resultantes en un mundo 3D para comprobar el resultado

Comentarios

Entradas populares de este blog

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.