Clasificación de suelo en CloudCompare con CSF

Cómo clasificar puntos de suelo en CloudCompare usando el plugin CSF: flujo paso a paso

Tienes una nube de puntos LiDAR de un terreno con vegetación y no sabes cómo separar el suelo de todo lo demás. Es uno de los problemas más frecuentes en procesamiento geomático: el escáner o el sensor UAV captura todo —árboles, arbustos, bardas, vehículos— y tú necesitas únicamente los puntos que tocan el piso para construir un MDT confiable.

En este post vas a aprender a resolver ese problema usando el plugin CSF (Cloth Simulation Filter) dentro de CloudCompare, sin pagar licencias adicionales ni migrar a software comercial. El flujo aplica tanto a nubes generadas con LiDAR UAV como a escáneres terrestres, y cubre desde la carga del archivo hasta la exportación de las clases resultantes. Si ya tienes tu nube lista, en menos de 30 minutos puedes tener el terreno clasificado.

Qué es el CSF y por qué funciona para separar el suelo

El Cloth Simulation Filter es un algoritmo desarrollado por Zhang et al. (2016) que simula dejar caer una tela rígida sobre la nube de puntos —vista de forma invertida— para que se adapte a la forma del terreno. Los puntos que quedan cerca de esa tela simulada se clasifican como suelo; los que quedan lejos (vegetación, estructuras, objetos) se clasifican como no-suelo.

La lógica es elegante: si inviertes la nube verticalmente, el terreno pasa a ser la superficie superior. Una tela que cae por gravedad simulada y se detiene sobre esos puntos describe bien la topografía real. La rigidez de la tela controla qué tan detallada es la separación: una tela muy rígida no sigue terrenos accidentados; una muy flexible puede «pegarse» a objetos que no son terreno.

El algoritmo está integrado en CloudCompare como plugin nativo desde la versión 2.11 y no requiere instalación separada en las versiones recientes.

Nota técnica: CSF clasifica en dos grupos: suelo y no-suelo. No asigna las clases ASPRS (clase 2 = suelo, clase 1 = no clasificado, etc.) de forma automática en el archivo LAS. Más adelante en este flujo se explica cómo exportar con la clasificación correcta.

Antes de empezar: qué necesitas tener listo

Formato y preprocesamiento del archivo

CloudCompare trabaja bien con archivos LAS y LAZ (LAZ es simplemente LAS comprimido; CloudCompare lo descomprime al vuelo sin pérdida de datos). También acepta PLY, E57, PTS y otros formatos, aunque para nubes LiDAR lo más común es LAS/LAZ.

Antes de clasificar, conviene hacer dos cosas:

  1. Verificar el sistema de referencia: para proyectos en México, lo estándar es trabajar en ITRF2008 época 2010.0 con proyección UTM. Nuevo León cae en la zona 14N. Asegúrate de que la nube tenga coordenadas planas o geodésicas correctas antes de procesar, porque el CSF trabaja en el espacio 3D de la nube tal como está cargada.

  2. Submuestrear si la nube es muy densa: nubes de más de 50 millones de puntos pueden saturar la RAM en equipos con menos de 32 GB. Puedes hacer un submuestreo espacial (mínima distancia entre puntos) en CloudCompare antes de clasificar, procesar, y luego trasladar la clasificación a la nube original si necesitas resolución completa.

Versión de CloudCompare

Usa la versión 2.12 o superior (la versión estable más reciente al momento de este post). Descárgala desde el sitio oficial: cloudcompare.org. El plugin CSF ya viene incluido; no necesitas compilar nada.

Flujo paso a paso: clasificación con CSF en CloudCompare

Paso 1 — Cargar la nube de puntos

Abre CloudCompare y arrastra el archivo LAS o LAZ directo a la ventana, o usa File > Open. Al cargar un archivo LAS, CloudCompare te preguntará qué campos cargar (intensidad, clasificación existente, RGB, número de retorno, etc.). Para clasificación de suelo, asegúrate de cargar al menos:

  • Z (coordenada vertical)
  • Classification (si ya tiene clasificación previa, para comparar)
  • Return Number y Number of Returns (opcionales pero útiles)

Activa la nube en el panel DB Tree (checkbox izquierdo) para verla en la ventana 3D.

Paso 2 — Acceder al plugin CSF

Ve al menú Plugins > CSF Filter. Si el menú no aparece, verifica que estés usando una versión con plugins activados (las builds oficiales los incluyen por defecto).

Se abre un panel con los siguientes parámetros principales:

Parámetro Descripción Valor de inicio sugerido
Scene type Tipo de terreno (inclinado, plano, con vegetación) Slope scene
Cloth resolution Resolución de la tela simulada (metros) 0.5–1.0 m
Max iterations Número de iteraciones de simulación 500
Classification threshold Distancia máxima al paño para ser «suelo» (metros) 0.5 m
Output cloud Genera nube de suelo, no-suelo, o ambas Ambas

Paso 3 — Ajustar parámetros según tu terreno

Este es el paso donde la mayoría comete errores por usar los valores por defecto sin pensar en el contexto:

Terreno plano o con pendiente suave (< 15 %)
Usa Cloth resolution: 0.5 m y Classification threshold: 0.3 m. Una tela fina captura bien los detalles sin pegar puntos de vegetación baja al suelo.

Terreno accidentado o con pendientes fuertes (> 15 %)
Aumenta Cloth resolution a 1.0–2.0 m. Con resolución muy fina en terreno accidentado la tela se «atasca» en las irregularidades y clasifica mal.

Vegetación densa baja (pastizal, matorral)
Aumenta Classification threshold a 0.5–0.6 m. Esto permite que puntos un poco alejados de la tela todavía sean considerados suelo, compensando la penetración incompleta del LiDAR.

Bosque denso
El CSF tiene limitaciones serias en dosel cerrado. Si el LiDAR no penetró suficiente, el algoritmo no tiene puntos de suelo reales con qué trabajar. En esos casos considera usar únicamente los últimos retornos antes de correr el CSF.

Paso 4 — Filtrar por último retorno antes de clasificar (opcional pero recomendado)

En nubes LiDAR multiretorno, el último retorno tiene mayor probabilidad de ser suelo. Para filtrar:

  1. Con la nube seleccionada, ve a Edit > Scalar Fields > Export coordinate to SF (si no tienes Return Number como campo escalar, primero impórtalo).
  2. Usa Edit > Filter by value sobre el campo Return Number igual a Number of Returns para quedarte solo con los últimos retornos.
  3. Corre el CSF sobre esa nube reducida.
  4. Usa la nube de suelo resultante como referencia para clasificar la nube completa por proximidad.

Este paso no es obligatorio, pero mejora significativamente la limpieza de la clasificación en zonas con vegetación.

Paso 5 — Ejecutar y revisar visualmente

Haz clic en OK para correr el algoritmo. Dependiendo del tamaño de la nube y tu hardware, el proceso toma entre segundos y varios minutos. Al terminar, CloudCompare genera dos nuevas nubes en el DB Tree:

  • [nombre]_GROUND — puntos clasificados como suelo
  • [nombre]_NONGROUND — todo lo demás

Activa solo la nube GROUND y revísala visualmente desde distintos ángulos. Busca:

  • ¿Aparecen puntos de techo de edificios incluidos? → Reduce Classification threshold
  • ¿Hay huecos grandes en zonas que deberían ser suelo? → Aumenta Cloth resolution o el umbral
  • ¿El borde de la nube tiene artefactos? → Normal; los bordes siempre tienen menor densidad

Itera los parámetros hasta que la nube GROUND sea visualmente limpia.

Paso 6 — Generar el MDT desde la nube de suelo

Con la nube GROUND seleccionada, ve a Rasterize (menú Raster > Rasterize):

  • Grid step: define la resolución del MDT. Para LiDAR UAV con densidad de 10–30 pts/m², un paso de 0.5 m es apropiado. Para LiDAR aerotransportado de baja densidad, usa 1.0–2.0 m.
  • Projection type: usa Average height para suelo, que es más robusto que el valor mínimo cuando hay puntos de ruido residuales.
  • Fill empty cells: activa la interpolación para rellenar celdas sin puntos (especialmente bajo vegetación densa).

Exporta el resultado como GeoTIFF para abrirlo en QGIS, Global Mapper o Civil 3D.

Paso 7 — Exportar la nube clasificada con clases ASPRS

Si necesitas entregar un archivo LAS con la clasificación formal (clase 2 = suelo, clase 1 = no clasificado), CloudCompare no asigna esos valores directamente desde el CSF. El flujo es:

  1. Selecciona la nube GROUND → Edit > Scalar Fields > Set SF value → asigna el valor 2
  2. Selecciona la nube NONGROUND → asigna el valor 1
  3. Une ambas nubes con Edit > Merge
  4. Exporta como LAS → en las opciones de exportación, mapea el scalar field al campo Classification

Con esto obtienes un archivo LAS estándar que puede abrirse en LAStools, QGIS, Global Mapper o cualquier software compatible con LAS 1.2/1.4.

Limitaciones del CSF que debes conocer

El CSF es una herramienta poderosa pero no es perfecta. Estas son las situaciones donde falla o da resultados inconsistentes:

  • Edificios con techos planos a baja altura: el algoritmo puede confundirlos con suelo si están cerca del umbral. Requiere limpieza manual posterior.
  • Taludes artificiales muy verticales: la tela simulada no sigue paredes verticales, por lo que los puntos en taludes empinados se clasifican como no-suelo aunque sean terreno real.
  • Nubes con ruido de agua: reflexiones sobre superficies de agua generan puntos erróneos debajo del nivel real del terreno que «jalan» la tela hacia abajo.
  • Dosel cerrado sin penetración LiDAR: si la nube no tiene retornos de suelo, el CSF no puede inventarlos.

Para proyectos donde la exactitud del MDT es crítica —control de volúmenes, diseño de plataformas, hidráulica— siempre valida el resultado contra puntos de control levantados con GNSS RTK o estación total. Un MDT clasificado automáticamente sin validación de campo es un MDT con incertidumbre desconocida.

Si trabajas con equipos GNSS de precisión para tu control de campo, en nuestra sección de receptores GNSS encontrarás opciones para levantamiento RTK y control geodésico.

Flujo alternativo: usar LAStools antes de CloudCompare

Si tienes acceso a LAStools (licencia o la versión de línea de comandos para archivos pequeños), el comando lasground es generalmente más robusto que el CSF para terrenos complejos, porque implementa un algoritmo distinto basado en triangulación progresiva. El flujo complementario sería:

  1. LAStools lasground → clasificación inicial de suelo/no-suelo con clases ASPRS
  2. CloudCompare → validación visual, corrección de errores, generación de MDT y análisis adicional

Ambas herramientas se complementan. Como se detalla en el post LAStools y CloudCompare: cómo procesar nubes de puntos LiDAR sin pagar una licencia, el flujo combinado es el estándar de facto para procesamiento LiDAR sin software comercial de alto costo.

Validación del MDT resultante

Una vez generado el MDT, la validación mínima incluye:

Comparación visual con ortofoto o imagen satelital: superpón el MDT sobre una imagen y verifica que las curvas de nivel generadas sigan la lógica del terreno visible.

Diferencia con un MDT de referencia: si tienes un MDT anterior de la misma zona, usa la herramienta M3C2 o Cloud-to-Raster Distance en CloudCompare para calcular diferencias. Diferencias mayores a 2–3 veces el GSD esperado indican errores de clasificación.

Control con puntos medidos en campo: levanta 20–30 puntos representativos con GNSS RTK o estación total en zonas de suelo descubierto, compara sus alturas ortométricas con los valores del MDT. El error cuadrático medio (RMSE) resultante define la exactitud posicional vertical del modelo.

Para proyectos con requerimientos de exactitud según normativa INEGI, consulta los rangos de tolerancia en la Norma Técnica de Información Geográfica de INEGI.

CloudCompare en contexto: cuándo es suficiente y cuándo necesitas más

CloudCompare es gratuito y muy capaz, pero tiene techo. Para proyectos con nubes de más de 200 millones de puntos, flujos de trabajo automatizados o entregas BIM, considera software como Leica Cyclone REGISTER 360, Trimble RealWorks o FARO Scene, que integran clasificación, registro y exportación en flujos más optimizados.

Para escáneres terrestres de alta densidad, el flujo de clasificación cambia: el CSF está diseñado principalmente para LiDAR aéreo (nadir). En nubes de escáner terrestre la clasificación automática de suelo es menos relevante; lo que importa más es la segmentación por clases de objeto. En el post Segmentación en CloudCompare: extrae elementos con precisión se detalla ese flujo específico.

Si estás evaluando incorporar LiDAR UAV a tus proyectos, en nuestra sección de drones puedes revisar las opciones disponibles para levantamiento topográfico con sensor LiDAR integrado.

Preguntas frecuentes

¿El plugin CSF viene instalado en CloudCompare o hay que descargarlo aparte?
En las versiones oficiales de CloudCompare (2.11 en adelante) el plugin CSF viene incluido por defecto. No necesitas compilar ni instalar nada adicional. Si no aparece en el menú Plugins, verifica que descargaste la versión con plugins activados desde cloudcompare.org, no una build de terceros.

¿Puedo usar CSF con nubes de escáner terrestre en lugar de LiDAR UAV?
Técnicamente sí, pero el algoritmo fue diseñado para nubes con perspectiva nadir (vista desde arriba). En nubes de escáner terrestre la distribución de puntos es radial y el concepto de «suelo debajo de la nube» no aplica de la misma manera. Los resultados suelen ser inconsistentes. Para escáneres terrestres es mejor usar segmentación manual o por cortes de altura.

¿Cuánto RAM necesito para clasificar con CSF en CloudCompare?
Depende del tamaño de la nube. Como referencia aproximada: 10 millones de puntos requieren alrededor de 2–4 GB de RAM disponible para el proceso. Para 50 millones de puntos, necesitas al menos 16 GB. Para nubes muy grandes, submuestrea primero o divide la nube en tiles.

¿El CSF asigna automáticamente las clases ASPRS (clase 2 = suelo)?
No directamente. El CSF separa la nube en dos grupos (suelo y no-suelo) pero no escribe los valores de clasificación ASPRS en el archivo LAS de forma automática. Debes asignar manualmente los valores de scalar field y mapearlos al campo Classification al exportar, como se describe en el Paso 7 de este flujo.

¿Qué diferencia hay entre el MDT generado desde CSF en CloudCompare y el que genera Agisoft Metashape?
Metashape genera el MDT a partir de la nube de puntos densa calculada por fotogrametría, usando su propio algoritmo de clasificación de suelo. CloudCompare con CSF trabaja sobre cualquier nube de puntos independientemente de su origen (LiDAR, fotogrametría, escáner). El resultado conceptual es el mismo —una superficie de terreno desnudo— pero la calidad depende de la densidad y calidad de la nube de entrada, no de la herramienta de clasificación.

¿Puedo automatizar el proceso CSF para varios archivos a la vez?
Sí. CloudCompare tiene un modo de línea de comandos (cloudcompare.exe -SILENT) que permite llamar plugins incluyendo el CSF con parámetros definidos. Esto permite crear scripts batch para procesar múltiples tiles de forma automatizada. La documentación del modo CLI está disponible en la wiki oficial de CloudCompare.

¿Qué hago si el CSF clasifica mal zonas de pendiente fuerte?
Primero intenta aumentar Cloth resolution para que la tela sea más gruesa y siga mejor los cambios bruscos de elevación. Si el problema persiste, una estrategia es dividir la nube por zonas (usando cortes con polígono en CloudCompare) y aplicar parámetros diferentes a cada zona según su tipo de terreno. También puedes hacer una corrección manual seleccionando puntos mal clasificados con la herramienta de selección y reasignándoles el valor de scalar field correcto.

Conclusión

La clasificación de suelo es el paso que determina la calidad de cualquier MDT. Hacerlo mal —por usar parámetros por defecto o no validar el resultado— se traduce en curvas de nivel incorrectas, volúmenes erróneos y decisiones de diseño basadas en datos que no representan el terreno real.

El plugin CSF en CloudCompare es una herramienta accesible y suficientemente robusta para la mayoría de los proyectos LiDAR UAV, siempre que ajustes los parámetros a tu contexto específico y valides el resultado con puntos de control medidos en campo. No es perfecta, pero combinada con un buen criterio técnico y una revisión visual rigurosa, produce MDTs confiables sin costo de licencia.

Si tienes dudas sobre qué equipo o sensor LiDAR se adapta mejor a tu tipo de proyecto, solicita una cotización y con gusto te orientamos según tus necesidades específicas de captura y procesamiento.

Equipos más vendidos

Artículos relacionados

No se encontraron resultados

La página solicitada no pudo encontrarse. Trate de perfeccionar su búsqueda o utilice la navegación para localizar la entrada.

1