signed_surface_distance — SHAPESTAT deviation op

• Data kinds: points × points → signal

• Call: import fullseye as fs; fs.ledger.signed_surface_distance(query, surface, surface_normals=None, k: 'int' = 1) (to call the implementation directly, import shapestats; shapestats.signed_surface_distance(query, surface, surface_normals=None, k: 'int' = 1); from the registry, opsshapestat.get("signed_surface_distance"))

Usage

Signed distance from the query points to the surface. → (N,).

The sign is determined from the surface normal (outside is positive). For 1-D contours there is profileops.profile_deviation, but there was no 3-D equivalent -- that was the gap the PoC exposed on 2026-09-06.

If normals are omitted, they are estimated with normals_orient.estimate_oriented_normals -- unless oriented, the sign varies from point to point (plain PCA normals have an arbitrary sign, and on rotation 4 in 10 of them flip. The same gap pointcloud.fpfh stepped into).

k is the number of nearest neighbours used to decide the sign. With 1 you bet on the normal of the 1 nearest point, and on a noisy surface the sign jumps. With 2 or more, the sign is decided by the distance-weighted mean orientation (the distance itself remains that of the nearest neighbour).

Detailed usage guide

• shape_statistics family guide

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.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• poc_am_thermal_to_ct — py -3.11 examples/poc_am_thermal_to_ct.py

• shapestat_landmark_tour — py -3.11 examples/shapestat_landmark_tour.py

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

shape_reconstruct

Same category (deviation)

—


*Provenance: shapestats.py — SHAPESTAT 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.