estimate_flow — 3D motion_segment op

• Data kinds: points × points → flow_scattered

• Call: import fullseye as fs; fs.ledger.estimate_flow(pts0, pts1) -> 'np.ndarray' (to call the implementation directly, import motion_seg3d; motion_seg3d.estimate_flow(pts0, pts1) -> 'np.ndarray'; from the registry, ops3d.get("estimate_flow"))

Usage

The 3-D displacement vector field (N, 3) from each point of pts0 to its nearest neighbour in pts1 (nearest-neighbour flow).

For each point p of pts0, finds the nearest neighbour q in pts1 with cKDTree and returns the displacement q - p. The element counts may differ (N != M). Only for small motions, where the displacement is well below the local point spacing, does it hit "point i's true correspondence" (the honest limit of nearest neighbour). It provides, for the inlier decisions of segment_rigid_motions, the observed flow.

Args:

pts0: (N, 3) point cloud at time 0.

pts1: (M, 3) point cloud at time 1.

Returns:

(N, 3) displacement vector field (same row order as pts0). An empty pts0 returns (0, 3).

Raises:

ValueError: bad shape, or pts0 is non-empty but pts1 is empty (no nearest neighbour exists).

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

Runnable examples (verified samples that actually call this op)

• motion_scene — py -3.11 examples_3d/motion_scene.py

Ops the type connects to (they accept flow_scattered as input)

fuse_to_voxel

Same category (motion_segment)

segment_rigid_motions · fit_rigid


*Provenance: motion_seg3d.py — 3D operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.