PRÁCTICA 2. 3D RECONSTRUCTION. TRIANGULACIÓN

Con los emparejamientos de puntos ya realizados, podremos hacer la reconstrucción 3D.
Dicha reconstrucción consistirá en calcular los rayos de retroproyección de cada punto y con ellos el punto dondeintersectan.

Los rayos de retroproyección se obtienen:

1- Retroproyectamos los puntos al espacio 3D. Para ello pasamos los puntos al sistema de la cámara con:

pointInOpt=self.camRightP.graficToOptical(pointIn)                

Y los proyectamos en el espacio 3D: 

point3d=self.camRightP.backproject(pointIn)

2- Con los puntos en el espacio 3D y la posición de las cámaras podemos calcular los rayos de retroproyección , ya que será la recta que pase por el punto y la posición de la cámara.

3- Una vez tenemos los rayos, el punto 3D debería situarse donde intersectan ambos. Esto no suele ocurrir porque hay errores, por ello se busca el punto que minimiza la distancia entre ambas rectas. Para ello me he basado en la siguiente página:
P1 es la posición de la cámara izquierda. P3 la posición de la cámara derecha. P2 la posición del punto 3d detectado de la cámara izquierda. P4 el punto 3d correspondiente al homólogo.

Con los puntos pa y pb comentados en el enlace anterior se puede calcular nuestro punto tridimensional, ya que se encontrará entre ambos.

Con todo lo comentado en esta entrada y las anteriores ya podemos ver los resultados que se obtienen. En mi caso se obtiene algo como lo siguiente:


En el video se puede ver que tarda muchísimo en hacer la reconstrucción y por ello no se ha grabado completamente. A continuación se muestra una imagen del resultado:




Se puede observar que introduce algo de ruido debido a errores en el cálculo de los homólogos.

Comentarios

Entradas populares de este blog

PRÁCTICA 2. 3D RECONSTRUCTION. MEJORA

PRÁCTICA 2. 3D RECONSTRUCTION