moment_axes — 3D match_pose op

• Data kinds: points → axes

• Call: import fullseye as fs; fs.ledger.moment_axes(points, weights=None) (to call the implementation directly, import match3d; match3d.moment_axes(points, weights=None); from the registry, ops3d.get("moment_axes"))

Usage

The centroid and principal axes (the eigenvectors of the inertia tensor) of a point set or weighted points. The basis of pose estimation.

Returns (centroid(3,), axes(3,3) columns = principal axes, eigvals(3,)). Eigenvalues in descending order. Used to canonicalise rotation.

Definition: w is normalised to sum 1, centroid c = Σ w p, scatter matrix C = Σ w (p−c)(p−c)ᵀ (covariance. It shares eigenvectors with the inertia tensor tr(C)I − C, with the eigenvalue order reversed) is decomposed with eigh. axes[:, i] is the principal axis of the i-th largest eigenvalue (descending). Eigenvalues are variances (length²).

• The sign of the eigenvectors is arbitrary, and axes can be left-handed (det=−1) (match_pca flips the 3rd axis

to make it right-handed).

• weights has length N. A sum of 0 gives NaN via division by 0 (no exception). 0 points fails (there is no validation).

• If the principal axes are degenerate (a sphere, etc.), the axis directions are undefined.

Downstream: match_pca, obb (oriented bbox), rotation to a canonical pose.

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)

• itokawa_pose_canonical — py -3.11 examples_3d/itokawa_pose_canonical.py

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

fuse_to_voxel

Same category (match_pose)

match_phase_3d · match_pca · match_logpolar_z


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