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)
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.
• 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.
• medial_topology — py -3.11 examples_3d/medial_topology.py
points als Eingabe)points_to_voxel · gaussians_to_voxel · estimate_point_normals · to_points · match_points_ncc · match_pca · moment_axes · icp_point2point_3d
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.