https://github.com/v-roman-v/dynfilter3d
Dynamic object filtering for 3D LiDAR point clouds using spatiotemporal geometry.
https://github.com/v-roman-v/dynfilter3d
3d-geometry dynamic-object-detection dynamic-object-filtering dynamic-objects lidar pcl point-cloud python robotics tool
Last synced: 6 days ago
JSON representation
Dynamic object filtering for 3D LiDAR point clouds using spatiotemporal geometry.
- Host: GitHub
- URL: https://github.com/v-roman-v/dynfilter3d
- Owner: V-Roman-V
- License: mit
- Created: 2025-12-10T13:57:07.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2025-12-10T14:51:36.000Z (5 months ago)
- Last Synced: 2025-12-10T23:30:31.222Z (5 months ago)
- Topics: 3d-geometry, dynamic-object-detection, dynamic-object-filtering, dynamic-objects, lidar, pcl, point-cloud, python, robotics, tool
- Homepage:
- Size: 3.91 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
DynFilter3D
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.
## Introduction
`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
### Motivation
- Provide a simple, easy-to-use library/framework for dynamic filtering.
- Separate logic from ROS dependency.
- Add utilities for visualization, benchmarking, and dataset testing.
## Features
- 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).
---
## Quick Start (example usage)
```python
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.
## Installation (from source)
```bash
git clone https://github.com//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.
## Command Line Interface (planned)
```bash
dynfilter3d \
--input "sequence/*.pcd" \
--output "filtered/" \
--config config/default.yaml
```
## Datasets
The 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.
---
## License
MIT License — a permissive, open-source license allowing commercial and academic use.
## Acknowledgement
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}
}
```