direction op• Datenarten: normals → image2d
• Aufruf: import fullseye as fs; fs.ledger.normals_to_egi(normals, n_az=36, n_el=18) (die Implementierung direkt: import reprconv; reprconv.normals_to_egi(normals, n_az=36, n_el=18); aus dem Register: opsreprconv.get("normals_to_egi"))
Normalen (N,3) → das erweiterte Gauß-Bild, ein image2d mit (n_el, n_az).
Ein 2-D-Histogramm der Richtungen (Horn, *Extended Gaussian Images*, Proc. IEEE 72(12) 1984). Eine Karte von "wie viel Fläche in welche Richtung zeigt"; bei Objekten, in denen Ebenen dominieren, steht ein Gipfel in 1 Bin. Nicht umkehrbar -- es verwirft Richtungsauflösung bis zur Bin-Breite. Die verworfene Menge ist messbar: Der Winkel zwischen der Mittelrichtung des häufigsten Bins und der mittleren Eingangsrichtung ist der Quantisierungsfehler, beim Standard (36, 18) gemessen 3.7 Grad bei einer Bin-Breite von 10 Grad (selftest gibt ihn aus).
Die Elevations-Bins sind in sin(el) gleich (gleicher Raumwinkel). Gleiche Bins in Grad machen die Pole übermäßig fein und erzeugen einen falschen Gipfel, der "Flächen konzentrieren sich am Nordpol" behauptet.
★ Übergibt man eine Punktwolke von Positionen, gibt es keine Ausnahme. backends_typed.TYPE_TO_SORT faltet normals in points, daher unterscheiden weder der Evolver noch das Register die beiden. Dieses op sieht nur Richtungen an (es verwirft die Länge), also liefert es für (N,3)-Koordinaten plausibel ein Histogramm "der Richtung jedes Punkts vom Ursprung aus gesehen". Gemessen (2026-09-08, eine Kurve aus 200 Punkten vs. Normalen, die alle senkrecht nach oben zeigen): Die von null verschiedenen Bins ändern sich nur 1 → 12, das größte Bin 200 → 44, und die Summe ist in beiden Fällen 200. "Die Summe stimmt mit der Punktzahl überein, also ist es richtig" kann sie nicht unterscheiden. Mit fullseye.set_system("extra_checks", "on") werden Vektoren, die von der Einheitslänge abweichen, abgewiesen (siehe Raises unten).
Args:
normals: (N, 3).
n_az: Anzahl der Azimut-Bins (Standard 36 = 10-Grad-Schritte).
n_el: Anzahl der Elevations-Bins (Standard 18).
Returns:
(n_el, n_az) float64-Zählkarte (Zeilen = Elevation, Spalten = Azimut).
Raises:
ValueError: Bin-Anzahl unter 1 / über der Grenze / ungültige Eingabe.
ValueError: mit extra_checks='on', wenn Vektoren enthalten sind, deren Länge um mehr als 1e-6 von 1 abweicht
(fängt den Unfall ab, eine Punktwolke von Positionen als Normalen zu übergeben).
• 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.
• representation_conversion — py -3.11 examples/representation_conversion.py
image2d als Eingabe)direction)normals_to_angles · angles_to_normals
*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.