IGN LiDAR HD Processing Library
Version 2.4.2+ | Python 3.8+ | MIT License
Transform French IGN LiDAR HD point clouds into ML-ready datasets for building classification. Features GPU acceleration, rich geometric features (all 35-45+ computed features now exported), RGB/NIR augmentation, intelligent skip system, and memory-optimized configurations for all system specs.
π Quick Startβ
# Install
pip install ign-lidar-hd
# Download sample data
ign-lidar-hd download --bbox 2.3,48.8,2.4,48.9 --output data/ --max-tiles 5
# Process with default settings
ign-lidar-hd process input_dir=data/ output_dir=patches/
For GPU acceleration (12-20x speedup), see the GPU Setup Guide.
β¨ Key Featuresβ
- πΊοΈ IGN Integration - Direct download from IGN WFS service
- π¨ Multi-modal Data - Geometry + RGB + Infrared (NDVI-ready)
- ποΈ Building Classification - LOD2/LOD3/Full schemas (12-43+ features)
- π Complete Features - All 35-45+ computed geometric features now exported to disk
- π Feature Tracking - Metadata includes feature names and counts for reproducibility
- π GPU Acceleration - 12-20x speedup with RAPIDS cuML
- β‘ Intelligent Skip - ~1800x faster on re-runs, automatic recovery
- βοΈ YAML Configuration - Reproducible workflows with example configs
π Processing Modesβ
Choose the right mode for your workflow:
Patches Only (Default)β
ML-ready patches for training:
ign-lidar-hd process input_dir=data/ output_dir=patches/
Both Patches & Enriched LAZβ
Training + GIS visualization:
ign-lidar-hd process input_dir=data/ output_dir=both/ output.processing_mode=both
Enriched LAZ Onlyβ
Fast GIS workflow:
ign-lidar-hd process input_dir=data/ output_dir=enriched/ output.processing_mode=enriched_only
For ML applications, patches provide cleaner geometric features than LAZ tiles (no boundary artifacts).
π Configuration Examplesβ
Production-ready configs in the examples/
directory:
# GPU-accelerated processing
ign-lidar-hd process --config-file examples/config_gpu_processing.yaml \
input_dir=data/raw output_dir=data/enriched
# ML training with augmentation
ign-lidar-hd process --config-file examples/config_training_dataset.yaml \
input_dir=data/raw output_dir=data/patches
# Preview configuration
ign-lidar-hd process --config-file examples/config_training_dataset.yaml --show-config
See example configs directory for complete workflows.
π¦ Output Formatsβ
- NPZ - NumPy format (recommended for ML)
- HDF5 - Hierarchical data format
- PyTorch -
.pt
files for PyTorch training - LAZ - Point cloud visualization (CloudCompare, QGIS)
- Multi-format - Combine formats:
npz,laz
,hdf5,torch
π― What's Newβ
v2.4.2 (2025-10-12) - Latest Releaseβ
- οΏ½ Full GPU Acceleration: Complete GPU implementation for all advanced features in "full" mode
- β‘ 5-10x Speedup: Massive performance boost for large point clouds (>10M points) with GPU
- π― GPU-Accelerated Features: Eigenvalue, architectural, and density features now on GPU
- π Seamless Fallback: Automatic GPU/CPU switching with zero API changes
- β Same Quality: Identical output quality, same interface, better performance
Read the full release notes β
Previous Releasesβ
v2.4.1 - Full feature mode fix (all 30 features)
v2.4.0 - Enhanced feature validation, production-ready ML stability
v2.3.0 - Processing modes, YAML configs, intelligent skip system
v2.0.0 - Modular architecture, boundary-aware features
οΏ½ Common Workflowsβ
Download and Processβ
# Download tiles for a region
ign-lidar-hd download --bbox 2.3,48.8,2.4,48.9 --output data/ --max-tiles 10
# Process with GPU acceleration
ign-lidar-hd process input_dir=data/ output_dir=patches/ processor.use_gpu=true
LOD3 with RGB and NDVIβ
ign-lidar-hd process \
input_dir=data/ \
output_dir=patches/ \
processor.lod_level=LOD3 \
features.use_rgb=true \
features.compute_ndvi=true
Python APIβ
from ign_lidar import LiDARProcessor, IGNLiDARDownloader
# Download tiles
downloader = IGNLiDARDownloader("downloads/")
tiles = downloader.download_by_bbox(bbox=(2.3, 48.8, 2.4, 48.9), max_tiles=5)
# Process with custom settings
processor = LiDARProcessor(lod_level="LOD3", use_gpu=True)
patches = processor.process_directory("data/", "patches/", num_workers=4)
# PyTorch integration
from torch.utils.data import DataLoader
from ign_lidar import LiDARPatchDataset
dataset = LiDARPatchDataset("patches/")
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)
π¦ Output Structureβ
NPZ File Contents:
{
'points': np.ndarray, # [N, 3] XYZ coordinates
'normals': np.ndarray, # [N, 3] surface normals
'curvature': np.ndarray, # [N] principal curvature
'labels': np.ndarray, # [N] building class labels
# Optional: RGB, infrared, geometric features
}
Directory Structure:
output_dir/
βββ tile1_patch_0001.npz
βββ tile1_patch_0002.npz
βββ tile1_enriched.laz # if processing_mode="both"
βββ metadata.json
οΏ½ Learn Moreβ
Getting Startedβ
Advanced Featuresβ
Referenceβ
π€ Supportβ
- π Report Issues
- π‘ Feature Requests
- π Documentation
π Licenseβ
MIT License - See LICENSE for details.