estimate_point_normals — 3D transform op

• Datenarten: points → normals

• Aufruf: import fullseye as fs; fs.ledger.estimate_point_normals(points, k=16, viewpoint=None) (die Implementierung direkt: import match3d; match3d.estimate_point_normals(points, k=16, viewpoint=None); aus dem Register: ops3d.get("estimate_point_normals"))

Verwendung

Punktmenge (N,3) → Einheitsnormalen (der kleinste Eigenvektor der lokalen k-Nachbarschaftskovarianz = PCA).

Erzeugt aus einer rohen Punktwolke die Normalen, die FPFH/SHOT/Punkt-zu-Ebene-ICP brauchen. Es gibt 2 Orientierungskonventionen:

viewpoint=None (Standard) = vom Schwerpunkt nach außen (für Rundum-Punktwolken geschlossener Objekte) / viewpoint angegeben = zum Blickpunkt (Sensor) hin (Hoppe 1992 / PCL-Konvention. Bei einem Scan aus einem einzigen Blickpunkt ist es physikalisch korrekt, dass die sichtbare Oberfläche zur Sensorseite zeigt. Gleiche Konvention wie pointcloud.estimate_normals). Die alte Version (bis 2026-08-30) nutzte auch mit angegebenem viewpoint das Vorzeichen "vom Blickpunkt weg", sodass beim eigentlichen Einsatzzweck, Scans aus einem einzigen Blickpunkt, alle Punkte umgedreht waren. Rückgabewert normals (N,3).

Ablauf: cKDTree liefert für jeden Punkt die k nächsten Nachbarn (einschließlich des Punkts selbst; bei k > N auf N gekürzt), und der kleinste Eigenvektor ihrer Kovarianz wird zur Normale. Rückgabewert (N,3) float64 Einheitsvektoren. viewpoint ist eine 3-dimensionale Koordinate (Sensorposition). Ist die Nachbarzahl min(k, N) kleiner als 3 (nur 1-2 Punkte oder k < 3), folgt ValueError —— mit weniger als 3 Punkten ist keine Ebene bestimmt (mit 1 Punkt lässt sich nicht einmal eine Kovarianz bilden; bis 2026-10-07 stürzte es mit einem internen einsum-Fehler ab). Liegt die Nachbarschaft auf einer Geraden, wird die Normale unbestimmt zurückgegeben (keine Prüfung). Ein kleines k ist rauschanfällig, ein großes rundet Ecken ab.

Nachgelagert: dst_normals von icp_point2plane, Normalen für render_shaded, normals_to_egi. Gleiche Konvention wie pointcloud.estimate_normals (Register (Ledger) estimate_normals).

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)

• fpfh_correspondence — py -3.11 examples_3d/fpfh_correspondence.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 (transform)

points_to_voxel · gaussians_to_voxel · mesh_to_voxel · mesh_to_points · depth_to_points · voxel_to_mips · voxel_to_mesh · tsdf_from_depth


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