2 minute read

Esta semana he continuado con el programa para maximizar el solape entre dos imágenes, una segmentación RGB y una segmentación de nubes de puntos LiDAR. En esta versión hemos modificado el enfoque, ahora se realiza una transformación 3D completa, en la que se optimiza directamente la pose del sensor mediante la modificación de la rotación R y la traslación t, manteniendo fija la matriz intrínseca k. Es decir, se ajusta la posición y orientación del LiDAR respecto a la cámara.

Partimos de una calibración inicial, sobre la cual se aplican pequeñas variaciones en los parámetros de pose para explorar posibles mejoras en el alineamiento. Las variaciones de los parámetros de rotación y traslación se realizan mediante una búsqueda de rejilla. A partir de estos incrementos, se genera una pose candidata (R, t), que se evalúa siguiendo siempre la misma lógica: primero se proyectan los puntos 3D sobre el plano de la imagen, posteriormente se renderiza esta proyección en una imagen segmentada y finalmente se compara con la segmentación de la cámara utilizando una métrica que combina una IoU estricta con una variante más tolerante basada en dilatación, lo que permite adaptarse mejor a la naturaleza dispersa de los datos LiDAR. A esto se suma un sistema de ponderación por clases que evita que las clases dominantes distorsionen el resultado, y un filtrado de candidatos basado en el número mínimo de píxeles válidos, garantizando evaluaciones significativas

Se prueban un total de 729 combinaciones (3 valores por cada uno de los 6 parámetros). Para hacer viable este proceso computacionalmente la evaluación de las distintas poses se realiza en paralelo utilizando múltiples procesos, lo que nos permite explorar todo el grid de forma eficiente. En resumen, el problema se formula como una búsqueda en el espacio de poses donde cada candidato se evalúa en función de cuánto mejora el alineamiento semántico entre ambas fuentes de datos, permitiendo encontrar la transformación 3D que maximiza el solape entre LiDAR y cámara.

Los valores de búsqueda de rejilla usados en el coarse son:

roll_values_deg = (-2.0, 0.0, 2.0)
pitch_values_deg = (-2.0, 0.0, 2.0)
yaw_values_deg = (-5.0, 0.0, 5.0)

tx_values = (-0.2, 0.0, 0.2)
ty_values = (-0.2, 0.0, 0.2)
tz_values = (-0.2, 0.0, 0.2)

Los valores de la rejilla local (refine search):

roll_step_deg = 0.5
pitch_step_deg = 0.5
yaw_step_deg = 1.0

tx_step = 0.05
ty_step = 0.05
tz_step = 0.05

[center - step, center, center + step]

Se prueban un total de 729 combinaciones en ambas búsquedas.


Con este método se ha probado una parte del dataset de GOOSE, un total de 96 escenas diferentes. Aquí algunos resultados del método:

Escena 1

COMPARACION

Escena 2

COMPARACION

Escena 3

COMPARACION


Paralelamente he seguido con el etiquetado de basuras y con la redacción.