curvature op• Datenarten: points → normals
• Aufruf: import fullseye as fs; fs.ledger.estimate_normals(points, k=25) (die Implementierung direkt: import curvature3d; curvature3d.estimate_normals(points, k=25); aus dem Register: ops3d.get("estimate_normals"))
Punktwolkennormalen, einheitlich nach außen gerichtet (vom Nachbarschaftsschwerpunkt weg). → (N,3).
Ablauf (pro Punkt, Python-Schleife): Mit cKDTree werden die k+1 Nachbarn einschließlich des Punktes selbst bestimmt (k auf N-1 gekürzt), und der kleinste Eigenvektor der Streumatrix local.T @ local der Nachbarkoordinaten mit dem Abfragepunkt als Ursprung wird zur Normalen (Einheitslänge). Orientierung: "umkehren, wenn das Skalarprodukt mit dem Nachbarschaftsschwerpunkt positiv ist" = ausgerichtet auf die vom Nachbarschaftsschwerpunkt abgewandte Seite.
• Punkte mit weniger als 5 Nachbarn liefern den festen Wert (0, 0, 1) (nicht geschätzt).
• Die Orientierung ist eine lokale Heuristik: Bei geschlossenen konvexen Formen zeigt sie nach außen, aber auf offenen Flächen, dünnen Platten und in konkaven Bereichen kann die Orientierung benachbarter Punkte voneinander abweichen (globale Konsistenz ist nicht garantiert). Für eine globale Ausrichtung durch orient_normals schicken oder von Anfang an estimate_oriented_normals verwenden. Für ein organized Tiefenbild ist normals_from_depth schneller und zum Blickpunkt orientiert.
• Rückgabewert ist float64 (N,3). k Standard 25. Deterministisch.
• Intern läuft dieselbe Berechnung wie bei principal_curvatures (auch die Normalenschätzung führt den Quadrikfit aus), daher ist es bei vielen Punkten langsam.
• 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.
• cylinder_axis_metrology — py -3.11 examples_3d/cylinder_axis_metrology.py
• feature_register — py -3.11 examples_3d/feature_register.py
• oriented_normals — py -3.11 examples_3d/oriented_normals.py
normals als Eingabe)icp_point2plane · compute_fpfh · shot_descriptor · fuse_to_voxel · reflect · refract · normal_consistency · ransac_cylinder
curvature)principal_curvatures · mean_curvature · gaussian_curvature · shape_index
*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.