register_cross — 3D fusion op

• Data kinds: any × any → pose

• Call: import fullseye as fs; fs.ledger.register_cross(src, src_kind, dst, dst_kind, method='fpfh', samples=15000, **kw) (to call the implementation directly, import fuse3d; fuse3d.register_cross(src, src_kind, dst, dst_kind, method='fpfh', samples=15000, **kw); from the registry, ops3d.get("register_cross"))

Usage

Rigid registration between structures of different kinds. Convert both to point clouds → a registrar (fpfh = large rotations / icp = needs a coarse init).

Example: register_cross((verts,faces),"mesh", scan_pts,"points") aligns CAD↔scan. Returns (R, t).

Procedure: to_points(src, src_kind, samples, **kw) and to_points(dst, dst_kind, samples, **kw) turn both into point clouds, and method selects the registration routine.

• "fpfh" (default): calls feat_fpfh.register_fpfh(ps, pd) with default parameters (FPFH descriptor + RANSAC, no initial pose needed, handles large rotation and partial overlap).

• "icp": match3d.icp_point2point_3d(ps, pd, iters=50) (nearest-neighbour correspondence + Kabsch). No initial-pose argument is passed, so it assumes src is close to dst (roughly aligned).

• Anything else raises ValueError.

Returns: (R, t) — R is a (3, 3) and t a (3,) numpy array (a torch tensor is converted to a CPU numpy array before returning). The convention is dst ≈ src @ R.T + t.

Notes:

• **kw is passed identically to both to_points calls (you cannot give fx, fy, cx, cy of "depth" or iso of "voxel" to only one side).

• samples is the sample count for "mesh" (default 15000). The count and shape of point clouds are not checked.

• Differences in coordinate systems (see to_points: voxel is a (z, y, x) index, depth is camera (x, y, z)) are not absorbed.

• To tighten the accuracy, call icp_point2point_3d directly with the fpfh result as the initial value.

Background guides (the physics and conventions behind this op)

• depth_sensors — Depth sensors — ranging principles, real-device figures, how dropouts appear

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)

• transforms_repr — py -3.11 examples_3d/transforms_repr.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 (fusion)

fuse_to_voxel


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