Práctica 2. Reconstrucción 3D: Obtención del Punto 3D

Teniendo ya ubicado cada punto de interés en ambas imágenes, podemos ya calcular las rectas de retroproyección de los dos puntos y obtener la posición 3D del punto, que será aquella donde ambas rectas se corten. No obstante, como suelen existir errores de calibración, no siempre se cruzarán las dos rectas, por se debe obtener el punto más cercano a ambas rectas y no la interseción como tal.

Para este cálculo se ha utilizado el algoritmo que referencia la compañera Jessica Fernández en su blog de la asignatura.

También se ha añadido la claúsula señalada por Julián Lamoso de no devolver aquellas distancias mayores de 1, consiguiendo con ello descartar puntos con correspondencias erróneas.

El resultado es bastante robusto (aunque como se puede ver hay algún error en alguno de los cálculos), pero existe un problema ìmportante de tiempos de ejecución del algoritmo. El cálculo de correspondencias de cada punto tarda en torno a un segundo de media, y para la ejecución del algoritmo con todos los puntos de interés obtenidos con Canny, la ejecución supera ampliamente la hora.

Todos los puntos

Para intentar bajar estos tiempos se ha añadido una condición para que sólo se traten la mitad de puntos de interés. El resultado es menos denso y detallado que tratando todos los puntos, pero se reducen de forma sensible los tiempos de ejecución totales de la reconstrucción 3D, aunque siguen siendo muy extensos: en torno a los 45 minutos.

Reconstrucción con la mitad de puntos

Como mejora se decide calcular primero los puntos, almacenarnos en una lista, y dibujarlos posteriormente todos de golpe en el 3DViewer. Según se aprecia, pasamos de tiempos de 45 minutos a en 15, por lo que se mejora altamente el algoritmo con este cambio.

No obstante, los tiempos siguen siendo muy altos, por lo que se deberían considerar otras mejoras como:

  • Hacer menos denso el resultado del cálculo de puntos de interes con Canny, perdiendo no obstante detalle en la reconstrucción.
  • Quitar iluminación, dejando una imagen a contraluz con la que sólo obtendríamos un contorno<(li>
  • Mejorar la búsqueda de parches actual. Aunque a la hora de recorrer la imagen derecha se tiene en cuenta la franja epipolar para optimizar la zona del cálculo de parches, el bucle en busca de esa franca recorre toda la imagen, una operación computacionalmente muy cara. Una mejora a tener en cuenta sería mejorar este recorrido de la franja epipolar.