curvature op• Datenarten: points → descriptor
• Aufruf: import fullseye as fs; fs.ledger.shape_index(points, k=25, normals=None) (die Implementierung direkt: import curvature3d; curvature3d.shape_index(points, k=25, normals=None); aus dem Register: ops3d.get("shape_index"))
Koenderinks Formindex s∈[-1,1] (konvexe Kugel +1, Zylinder +0,5, Sattel 0, konkave Kugel −1). → (N,).
Die Nabelpunkt/Ebene-Entscheidung ist relativ zur Krümmungsskala (kein absoluter Schwellwert). Sanfte konvexe/konkave Bereiche (auch bei winziger Krümmung) behalten ihr Vorzeichen = konkav/konvex, und nur Punkte, deren Krümmung relativ zur Krümmungsskala der gesamten Daten 0 ist, erhalten als Ebene s=0.
normals (orientierte Referenznormalen, (N,3)): ohne Angabe ist das Konkav/Konvex-Vorzeichen einer offenen Fläche unbestimmt (als konvexe Magnitude gemeldet). Werden orientierte Normalen übergeben, richtet sich das Ergebnis nach der globalen Orientierung und liefert das korrekte Vorzeichen (konkave Kugel = cup → -1).
Berechnung (pro Punkt, derselbe Fit wie bei principal_curvatures):
• Ebenentest: Ist die curvedness sqrt((k1² + k2²) / 2) kleiner als der Median der curvedness aller Punkte × 1e-3, dann s = 0. Ist der Median 0 (kein Krümmungssignal), sind alle Punkte 0.
• Nabelpunkttest: Wenn |k1 - k2| < 1e-2 × (|k1| + |k2|), dann s = sign(k1 + k2) (exakt ±1).
• Sonst: s = (2/π) · arctan((k1 + k2) / (k1 - k2)).
• Der Schwellwert ist nicht absolut, sondern relativ zur Krümmungsskala der gesamten Daten; daher ändert sich selbst bei gleicher Form, welche Punkte als eben gelten, je nachdem, wie sie mit anderen Punkten gemischt sind. Für die Klassifikation einer einzelnen Punktwolke gedacht.
• Punkte mit weniger als 5 Nachbarn erhalten k1 = k2 = 0 → Ebene (0). k wird auf N-1 gekürzt.
• normals muss (N,3) mit endlichen, von null verschiedenen Zeilen sein (ValueError). Ohne Angabe ist das Vorzeichen einer offenen Fläche unbestimmt (konvexe Seite).
• Die Stärke der Biegung ist nicht enthalten. Wird auch die Stärke benötigt, stapelt man die 2 Werte von principal_curvatures zu (N,2) und gibt sie an curvature_to_shape_index.
• blas_threads_and_memory — Warum Matrixzerlegungen langsam sind — BLAS-Threads, Caches, Speicherlayout
• 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.
• curvature_grasp — py -3.11 examples_3d/curvature_grasp.py
• itokawa_curvature — py -3.11 examples_3d/itokawa_curvature.py
descriptor als Eingabe)fuse_to_voxel · shape_distance
curvature)principal_curvatures · mean_curvature · gaussian_curvature · estimate_normals
*Provenance: curvature3d.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.