Preserve point-level structure
Start from consecutive point clouds without collapsing the scene into objects.
A deterministic, geometry-aware method that estimates per-point motion from consecutive LiDAR scans without segmentation or clustering.
Synthetic scenario · Urban junction
Begin with two scans, inspect the initial point matching, then advance the complete source cloud along the final motion field.
Two fingers to rotate · pinch to zoom
DirectFlowMatch uses the acquisition geometry of consecutive LiDAR scans to organize the search for correspondences, reject implausible candidates, and recover a velocity for each matched point.
A direct time-of-flight LiDAR scan captures the shape of a scene but does not provide the native Doppler measurement. Motion therefore has to be recovered across frames while accounting for sparsity, partial observations, and acquisition geometry.
Start from consecutive point clouds without collapsing the scene into objects.
Use angular neighborhoods and physically meaningful motion bounds.
Convert matched displacements into per-point motion estimates.
The standard route to scene flow runs through segmentation and clustering: group the cloud into objects, match clusters between frames, read motion off the correspondence. I tried to make that work before building anything new.
I evaluated both DBSCAN and HDBSCAN and tuned each across its hyperparameter space — epsilon and minimum points for DBSCAN, minimum cluster size and minimum samples for HDBSCAN. Every configuration traded one failure mode for another. Clusters fragmented between consecutive frames, merged, or dropped below the density threshold and vanished entirely. Frame-to-frame correspondences built on top of that were not stable enough to derive velocity labels from.
The open question was whether this was a tuning problem or a data problem. To settle it, I ran the same clustering configurations against nuScenes and Waymo, whose reference LiDARs are considerably denser. The methods behaved as published there. On sparser, less uniformly sampled data they did not.
Align consecutive point clouds into a common geometric frame, compensating for ego motion, without collapsing the scene into objects or voxel occupancy.
Use the acquisition geometry to restrict correspondence search to angularly local candidates, bounded by physically plausible vehicle motion over the frame interval.
Match forward and reverse, then compare. Correspondences that disagree between the two directions are locally ambiguous and are treated as such rather than accepted.
Where several source points claim the same target, resolve by matching cost. Points with consistent supporting evidence for motion are prevented from collapsing toward a static-scene explanation.
Select the stable correspondence for each point and divide displacement by the frame interval to recover per-point velocity.
The method was evaluated on the public nuScenes dataset; the reported figures come from those runs. The scenario below is synthetic — a quieter junction, generated for this site — so the step from the initial correspondence field to the complete DirectFlowMatch result stays easy to inspect without redistributing dataset geometry.
Synthetic scenario · Quiet T-junction
Compare the input scans, the initial matching field, and the complete DirectFlowMatch result. Rotate, zoom, and change point size while reviewing the scene in XYZ.
Two fingers to rotate · pinch to zoom
The algorithm was originally developed against automotive direct time-of-flight LiDAR data during my thesis, then re-evaluated on public nuScenes data for the results shown above.
The method provides geometry-derived motion for radar supervision and validation, and for downstream tasks that require motion estimates from consecutive dToF LiDAR scans.