medial_axis_points — 3D medial op

• Datenarten: voxel → points

• Aufruf: import fullseye as fs; fs.ledger.medial_axis_points(vol, min_radius=0.0) (die Implementierung direkt: import medial; medial.medial_axis_points(vol, min_radius=0.0); aus dem Register: ops3d.get("medial_axis_points"))

• Rückgabewert über das Register: fullseye.ledger.medial_axis_points(...) liefert nur den Wert des deklarierten Out-Typs points (die zugrunde liegende Funktion gibt zusätzlich Hilfsinformationen zurück). Wird das Verworfene gebraucht, nutze fullseye.ledger.medial_axis_points.raw(...) oder rufe medial.medial_axis_points direkt auf.

• Rückgabe der Funktion: (points, radii)

Verwendung

Macht aus den medialen Voxeln eine Punktmenge samt lokalem Radius (= dem EDT-Wert dieses Punktes). Liefert (points, radius).

Gibt die Medialpunkte, die in dicken Teilen flächig und in dünnen Teilen linienförmig verteilt sind, als (M,3)-Koordinaten (z,y,x) zusammen mit dem jeweiligen lokalen Radius (M,) zurück. Der Punkt mit dem größten Radius zeigt auf das "Innerste" der Form = ihr Zentrum.

Args:

vol: binäre Voxel (bool / 0-1, 3D).

min_radius: schließt Punkte mit Radius kleiner oder gleich diesem Wert aus (Rauschunterdrückung).

Returns:

points (float64, (M,3)): Medial-Voxelkoordinaten (z, y, x).

radius (float64, (M,)): EDT-Wert jedes Punkts (= lokaler Inkreisradius).

Ablauf: gibt np.argwhere der aus distance_ridge(vol, min_radius) gewonnenen ridge_mask zurück (Array-Indizes; Zeilen deterministisch in z-major lexikografischer Reihenfolge) sowie die edt-Werte an diesen Positionen. Koordinaten sind Voxelindizes, spacing wird nicht angewendet (werden physische Koordinaten benötigt, rechnet der Aufrufer points * (sz, sy, sx) und multipliziert den Radius ebenso mit dem isotropen spacing).

Argumente und Prüfung: vol ist 3-D (ungleich null = Vordergrund). Kein 3-D, leer oder NaN/Inf ergibt ValueError, min_radius < 0 ebenfalls ValueError. radius enthält nur Punkte mit > min_radius (Rand-Voxel haben eine EDT von höchstens 1, daher entfernt min_radius=1 das Rauschen der äußeren Hülle fast vollständig).

Randverhalten: Gibt es keinen Vordergrund oder liegen alle Punkte bei oder unter min_radius, ist points (0, 3) und radius (0,), jeweils leere Arrays (kein Fehler).

Einsatz: Radiusverteilung für medial_match, Brücke zu Punktwolken-Ops (smallest_sphere3 / fit_line3 usw.), und np.argmax(radius) liefert das Zentrum der größten Inkugel.

Referenzen (Beispieldaten, Literatur)

• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).

• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• medial_topology — py -3.11 examples_3d/medial_topology.py

Typkompatible Folge-Operatoren (nehmen points als Eingabe)

points_to_voxel · gaussians_to_voxel · estimate_point_normals · to_points · match_points_ncc · match_pca · moment_axes · icp_point2point_3d

Gleiche Kategorie (medial)

distance_ridge · skeletonize_vol · topology_signature · medial_match · skeleton_junctions3d · skeleton_endpoints3d · skeleton_prune3d · skeleton_branches3d


*Provenance: medial.py — 3D Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*

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