surface_normals — 3D photometric op

• Datenarten: image2d → normalmap

• Aufruf: import fullseye as fs; fs.ledger.surface_normals(z) (die Implementierung direkt: import photometric; photometric.surface_normals(z); aus dem Register: ops3d.get("surface_normals"))

Verwendung

Höhenfeld z (HxW) → Einheitsnormalen (H,W,3). n ∝ (−dz/dx, −dz/dy, 1). Die Vorwärtsumwandlung Tiefe → Normale.

Bestimmt mit den zentralen Differenzen von np.gradient (am Rand einseitig) dz/dy in Zeilenrichtung und dz/dx in Spaltenrichtung und normiert n = (-dz/dx, -dz/dy, 1) auf Länge 1 (+1e-12 vermeidet Division durch null). Der Gitterabstand gilt als 1 Pixel; weicht die Einheit von z von Pixeln ab (mm usw.), muss vorher in z / Pixelabstand umgerechnet werden, sonst fallen die Neigungen stärker/schwächer aus als in Wirklichkeit. Die z-Komponente der Normalen ist stets positiv (zur Kamera gerichtet). Rückgabewert ist float32 (H,W,3); die 3. Achse enthält die Komponenten (x, y, z), x entlang der Spalten, y entlang der Zeilen. Es gibt keine Eingabeprüfung; alles außer 2-D scheitert beim Entpacken in np.gradient. Es ist die Umkehrung von integrate_normals und nutzt dieselbe Normalenkonvention wie die Ausgabe von photometric_stereo, daher kann es direkt an render_lambertian übergeben werden, um ein Schattierungsbild zu synthetisieren.

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.

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

• photometric_stereo — py -3.11 examples_3d/photometric_stereo.py

Typkompatible Folge-Operatoren (nehmen normalmap als Eingabe)

fuse_to_voxel · render_shaded · phong_shade · matcap_shade · brdf_lommel_seeliger · brdf_hapke · bump_normals_fbm · integrate_normals

Gleiche Kategorie (photometric)

photometric_stereo · integrate_normals · render_lambertian


*Provenance: photometric.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.