orient_normals — 3D normals_orient op

• Datenarten: points × normals → normals

• Aufruf: import fullseye as fs; fs.ledger.orient_normals(points, normals, k: 'int' = 20, seed_dir=None) -> 'np.ndarray' (die Implementierung direkt: import normals_orient; normals_orient.orient_normals(points, normals, k: 'int' = 20, seed_dir=None) -> 'np.ndarray'; aus dem Register: ops3d.get("orient_normals"))

Verwendung

Orientiert die Normalen global konsistent nach Hoppes Methode (MST-Propagation). → (N,3).

Baut auf dem kNN-Graphen einen minimalen Spannbaum mit Gewichten 1 - |n_i·n_j| (je besser die Tangentialebenen übereinstimmen, desto günstiger) und macht jede Komponente intern konsistent, indem der Baum vom Saatpunkt aus per BFS durchlaufen und Kinder mit zum Elternknoten entgegengesetztem Vorzeichen umgedreht werden. Der Saatpunkt ist bei Angabe von seed_dir der in dieser Richtung am weitesten herausragende Punkt, sonst der äußerste Punkt (am weitesten vom Schwerpunkt). Ist der Graph getrennt, wird pro Zusammenhangskomponente unabhängig ein Saatpunkt gewählt und ausgebreitet (die relative Orientierung zwischen Komponenten ist nicht garantiert).

Wird seed_dir übergeben, werden nach der internen Konsistenzbildung durch Ausbreitung die Projektionen aller Punkte der Komponente aggregiert, um das globale Vorzeichen an seed_dir anzugleichen (es hängt nicht vom |cos| eines einzelnen Saatpunkts ab, daher wird das Vorzeichen auch dann sicher bestimmt, wenn die Normale des Saatpunkts zu seed_dir nahezu orthogonal ist — finding [5]). Eine echte Entartung, bei der seed_dir zu allen Normalen einer Komponente (nahezu) orthogonal ist und das Vorzeichen nicht bestimmt werden kann, ist fail-closed (ValueError). Bei geschlossenen Flächen (z. B. einer Kugel), bei denen seed_dir im Mittel orthogonal zu den Normalen ist, ist das globale Vorzeichen nicht eindeutig, daher wird die Orientierung bezogen auf den am weitesten herausragenden Punkt (= nach außen) beibehalten. Ohne seed_dir vom Schwerpunkt nach außen.

Args:

points: (N,3)-Punktwolke.

normals: (N,3)-Normalen mit unbestimmter Orientierung (intern auf Einheitslänge normiert).

k: Anzahl der Nachbarn des kNN-Graphen.

seed_dir: globale Referenzorientierung (3,). Bei None wird vom Schwerpunkt nach außen als Referenz verwendet.

Returns:

(N,3)-Einheitsnormalen mit global konsistentem Vorzeichen.

Raises:

ValueError: wenn seed_dir null ist oder (in einer Zusammenhangskomponente) zu allen Normalen orthogonal ist, sodass

das globale Vorzeichen nicht gesteuert werden kann (fail-closed).

Hintergrundwissen (Physik und Konventionen hinter diesem Operator)

• blender_interop — Zusammen mit Blender — Form bauen, mit fullseye messen (Fallstricke: Achsen, Einheiten, Referenzdaten)

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)

• oriented_normals — py -3.11 examples_3d/oriented_normals.py

Typkompatible Folge-Operatoren (nehmen normals als Eingabe)

icp_point2plane · compute_fpfh · shot_descriptor · fuse_to_voxel · reflect · refract · normal_consistency · ransac_cylinder

Gleiche Kategorie (normals_orient)

estimate_oriented_normals


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