1 minute read

Esta semana he desarrollado un simulador de impacto de rayos cósmicos en nubes de puntos LiDAR. El objetivo principal es generar desplazamientos aleatorios en los puntos y modificando sus intensidades de manera controlada. También he probado a reducir la densidad de las nubes al minimo para observar el funcionamiento de la segmentación geométrica.

Implementación Rayo Cósmico

La función principal queda así:

def apply_cosmic_ray(points: np.ndarray, remissions: np.ndarray, 
                      impact_probability: float) -> Tuple[np.ndarray, np.ndarray]:
    print("\n=== IMPACTO DE RAYO CÓSMICO EN PROGRESO ===")
    if impact_probability <= 0 or impact_probability > 1:
        raise ValueError("La probabilidad de impacto debe estar entre 0 y 1")

    num_points = len(points)
    num_impacted = int(num_points * impact_probability)

    print(f"Afectando {num_impacted} de {num_points} puntos...")
    rng = np.random.default_rng()
    impacted_indices = rng.choice(num_points, size=num_impacted, replace=False)

    displaced_points = points.copy()
    displaced_remissions = remissions.copy()

    displacement = rng.uniform(-2.0, 2.0, size=(num_impacted, 3))
    intensity_scale = rng.uniform(0.1, 3.0, size=num_impacted)

    displaced_points[impacted_indices] += displacement
    displaced_remissions[impacted_indices] *= intensity_scale
    displaced_remissions = np.clip(displaced_remissions, 0.0, 255.0)

    print("Impacto completado con desplazamientos y cambios de remisión.")
    return displaced_points, displaced_remissions

De tal manera que indicamos la probabilidad de afectar a los puntos y los rangos en los que los valores se desplazaran si un punto es afectado por el rayo.

Izquierda nube original, Derecha nube afectada por rayo cósmico.

Forzar submuestreo

En el siguiente video se muestran los resultados de la segmentacion geometrica al forzar la reduccion de la densidad de la s nubes:

Efecto de reducir la densidad de la nube mediante submuestreo aleatorio.
Efecto de reducir la densidad de la nube mediante submuestreo aleatorio.