curvature_to_shape_index — REPRCONV curvature op

• Datenarten: curvature → pairs

• Aufruf: import fullseye as fs; fs.ledger.curvature_to_shape_index(curvature) (die Implementierung direkt: import reprconv; reprconv.curvature_to_shape_index(curvature); aus dem Register: opsreprconv.get("curvature_to_shape_index"))

Verwendung

Hauptkrümmungen (N,2) → Formindex und Gekrümmtheit als pairs (N,2). Der Ausgang aus curvature.

Das (S, C) von Koenderink & van Doorn, *Surface shape and curvature scales*, Image and Vision Computing 10(8) 1992:

S = (2/pi) * atan2(k1 + k2, k1 - k2) (k1 >= k2, S in [-1, 1])

C = sqrt((k1^2 + k2^2) / 2) (Stärke der Krümmung)

Der Kern ist, dass es mit atan2 statt mit einer Division geschrieben ist: Weder an einem Kugel-Nabelpunkt (k1 == k2) noch auf einer Ebene (k1 == k2 == 0) tritt eine Division durch null auf, und der Hin- und Rückweg mit shape_index_to_curvature ist im ganzen Bereich exakt (gemessen max|Δ| = 4.6e-16). Implementiert man das Lehrbuch- atan((k1+k2)/(k1-k2)) unverändert, entsteht an Nabelpunkten NaN, und dieses NaN wird nachgelagert zu "dunklen Pixeln".

S = -1 ist eine Schale, 0 ein Sattel, +1 eine Kappe. C ist das formunabhängige "wie stark es gekrümmt ist".

Nur die Information über die Eingabereihenfolge kommt nicht zurück: Auch in der Reihenfolge (k2, k1) übergeben, wird intern auf k1 >= k2 umsortiert, daher kommt ein Hin- und Rückweg immer absteigend zurück (eine Konvention der Orientierung, kein Werteverlust).

Args:

curvature: (N, 2) [k1, k2] oder ein Tupel aus 2 gleich langen 1-D-Arrays

(das ist die rohe Rückgabe von principal_curvatures).

Returns:

(N, 2) float64. Spalte 0 = S in [-1, 1], Spalte 1 = C >= 0.

Raises:

ValueError: ungültige Form / nicht endlich.

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.

• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.

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

• representation_roundtrip — py -3.11 examples/representation_roundtrip.py

Typkompatible Folge-Operatoren (nehmen pairs als Eingabe)

angles_to_normals · shape_index_to_curvature · pairs_to_signal · pairs_to_image2d · pairs_to_table · polar_to_cscalar

Gleiche Kategorie (curvature)

shape_index_to_curvature · curvature_to_table


*Provenance: reprconv.py — REPRCONV 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.