Semana 17. Alineación Semántica datos Lidar
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. La versión anterior de este programa recibía como entrada dos imágenes segmentadas, una RGB y el pinhole de la nube de puntos segmentada. Para poder realizar pruebas de manera más eficaz se han modificado los archivos de entrada, ya que, realizar uno a uno todos los pinholes en un script externo y luego ejecutarlo en este sería una pérdida de recursos elevada. La nueva versión del programa Align_patch recibe como parámetros de entrada la imagen original capturada por la cámara, su correspondiente segmentación semántica en formato RGB, la nube de puntos LiDAR en coordenadas 3D, las etiquetas semánticas asociadas a cada punto, y los parámetros de calibración inicial extrínseca e intrínseca que permiten proyectar la nube sobre el plano imagen.
A partir de estos datos, el programa realiza una proyección de la nube de puntos mediante un modelo de cámara pinhole, generando una representación rasterizada en 2D (patch) donde cada punto conserva su clase semántica. A continuación, este patch se va trasladando y rotando dentro de un esquema de optimización coarse-to-fine, en el que se buscan pequeñas correciones respecto a la calibración inicial. Se ha reducido el número de ángulos que se prueban en comparación a los ángulos probados en las imágenes sintéticas, ya que, partimos de una calibración inicial buena y por lo tanto no es necesaria la prueba de un número muy elevado de ángulos.
coarse_angles = list(range(-20, 21, 10))
Previamente, se ha realizado una adaptación de la ontología del dataset mediante un remapeo de clases, seleccionando un subconjunto relevante para el alineamiento (entre ellas: dirt, grass, tree, sky, asphalt, building, person, water, puddle, fence, mud y bush), y asegurando consistencia entre la segmentación de imagen y las etiquetas LiDAR.
Estas correcciones se estiman maximizando una función de similitud basada en el solape semántico multiclase entre el patch proyectado y la segmentación de la imagen. Para ello, se emplea una métrica de IoU ponderado por clase, donde los pesos se ajustan dinámicamente en función de la distribución de clases presentes en el patch. Es importante destacar que este proceso de optimización no se realiza directamente sobre los parámetros extrínsecos tridimensionales (R, t), sino sobre una transformación bidimensional en el plano de la imagen, consistente en una rotación y una traslación del patch proyectado. Como resultado, el sistema proporciona la mejor hipótesis de alineamiento en términos de rotación y desplazamiento en el plano imagen, junto con una representación visual final en la que la nube de puntos proyectada se superpone sobre la imagen original, facilitando la evaluación cualitativa del alineamiento obtenido.
Con el objetivo de validar el comportamiento del método más allá de casos puntuales, se ha realizado una evaluación sobre un conjunto de 167 escenas del dataset de RELLIS. Este análisis global permite pasar de una validación cualitativa basada en ejemplos aislados a una evidencia más sólida sobre la robustez del enfoque propuesto. En nuestro caso, dado que se trata de un entorno no estructurado, caracterizado por una alta variabilidad en la escena (vegetación, terreno irregular, presencia de agua y/o barro), resulta especialmente relevante analizar el rendimiento del método de forma sistemática. Esto permite identificar en qué situaciones el alineamiento semántico se mantiene estable y en cuáles aparecen limitaciones, así como estudiar el papel que desempeñan distintas clases semánticas en la calidad del ajuste. De este modo, el análisis sobre el dataset completo proporciona una visión más representativa del comportamiento del sistema en condiciones reales de operación.
Aquí algunos resultados de diferentes escenas del dataset:
Escena 00000-000058

Escena 00000-000156

Escena 00001-000270

Escena 00002-004143

Para continuar con la validación del método se ha probado también con el dataset de GOOSE, un total de 96 escenas diferentes. Se ha cambiado la ontology para que corresponda con el dataset. Dado que este dataset presenta una calibración inicial menos precisa, los efectos del algoritmo resultan más notorios, mostrando mayores desplazamientos respecto a las escenas de RELLIS. Los resultados se recogen aquí.
Aquí algunos resultados del método:
Escena 1

Escena 2

Escena 3

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