Dynamic object filtering for 3D LiDAR point clouds using spatiotemporal geometry
Status: Work in progress. The API may change without notice.
TODO: Add a teaser image or short demo video illustrating the algorithm.
dynfilter3d is a clean, from-scratch Python/C++ toolkit for identifying and filtering dynamic points in LiDAR range data using spatiotemporal information such as surface normals and short-term motion cues.
The design of this project is inspired by the method described in:
Falque, R., Le Gentil, C., & Sukkar, F.
Dynamic Object Detection in Range Data using Spatiotemporal Normals.
Australasian Conference on Robotics and Automation (ACRA), 2023.
https://github.com/UTS-RI/dynamic_object_detection
- Provide a simple, easy-to-use library/framework for dynamic filtering.
- Separate logic from ROS dependency.
- Add utilities for visualization, benchmarking, and dataset testing.
- Lightweight C++17 core for fast geometric processing.
- Python bindings via
nanobind. - Dynamic point detection using spatiotemporal normals.
- High-level Python API for both offline and streaming use.
- Optional visualization utilities (via
open3d). - Examples on open datasets (e.g. KITTI).
import numpy as np
import dynfilter3d as df
# Load a small sequence of LiDAR scans
scans = [
np.load("scan_000.npy"),
np.load("scan_001.npy"),
np.load("scan_002.npy"),
]
# Create detector
f = df.DynamicFilter3D(window_size=3, min_neighbors=8)
# Estimate temporal surface statistics
f.fit_sequence(scans)
# Filter dynamic points in the last scan
mask = f.get_static_points(idx=-1)
static_points = scans[-1][mask]
print("Static points:", static_points.shape[0])The API is still evolving, but this illustrates the intended workflow.
git clone https://github.com/<your-username>/dynfilter3d.git
cd dynfilter3d
python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -e .This builds the native C++ extension and installs the Python package.
dynfilter3d \
--input "sequence/*.pcd" \
--output "filtered/" \
--config config/default.yamlThe package supports LiDAR point clouds in .pcd, .bin, .npy, and custom formats.
Example scripts will be provided for:
- KITTI odometry,
- open-source urban LiDAR datasets,
- synthetic demo point clouds.
MIT License — a permissive, open-source license allowing commercial and academic use.
This project is inspired by the original method:
@inproceedings{falque2023dynamic,
title={Dynamic Object Detection in Range data using Spatiotemporal Normals},
author={Raphael Falque and Cedric Le Gentil and Fouad Sukkar},
booktitle={Australasian Conference on Robotics and Automation, ACRA},
year={2023}
}