rigid_flow — 3D scene_flow3d op

• Data kinds: points × points → pose

• Call: import fullseye as fs; fs.ledger.rigid_flow(pts0, pts1, max_iter: 'int' = 20) -> 'dict' (to call the implementation directly, import scene_flow3d; scene_flow3d.rigid_flow(pts0, pts1, max_iter: 'int' = 20) -> 'dict'; from the registry, ops3d.get("rigid_flow"))

• Return value through the ledger: fullseye.ledger.rigid_flow(...) returns only the declared out type pose (the underlying function also returns auxiliary values). When you need what was dropped, use fullseye.ledger.rigid_flow.raw(...) or call scene_flow3d.rigid_flow directly.

Usage

Estimate the single rigid motion that explains pts0 -> pts1, via nearest-neighbour correspondences and Kabsch (ICP-like).

Starting from the identity transform, at each iteration takes nearest-neighbour correspondences from the point cloud at the current pose to pts1, solves (R, t) in closed form with registration.kabsch, and accumulates. Stops when the correspondence indices match the previous iteration (= convergence) or at max_iter. The convergence test depends only on the stability of the indices, so it is scale-invariant (no absolute epsilon is used).

Args:

pts0: (N, 3) point cloud at time 0 (N >= 3, to determine the rotation uniquely).

pts1: (M, 3) point cloud at time 1 (M >= 1, need not match N).

max_iter: upper limit on ICP iterations.

Returns:

dict: {"R": (3,3) rotation, "t": (3,) translation, "rmse": point-to-nearest-neighbour RMS distance after alignment}. R is a true rotation (det=+1). rmse is the measured value (nothing faked).

Raises:

ValueError: invalid shape, pts0 < 3 points, or pts1 empty.

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)

• scene_flow_rigid — py -3.11 examples_3d/scene_flow_rigid.py

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

fuse_to_voxel · pose_error · bundle_adjust · mean_reprojection_error · optimize_pose_graph · relative_pose · mean_edge_error · rotation_translation_error

Same category (scene_flow3d)

nearest_neighbor_flow · smooth_flow


*Provenance: scene_flow3d.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.