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"))
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).
• 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.
• fpfh_correspondence — py -3.11 examples_3d/fpfh_correspondence.py
normals als Eingabe)icp_point2plane · compute_fpfh · shot_descriptor · fuse_to_voxel · reflect · refract · normal_consistency · ransac_cylinder
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.