tb_estimate_normals — 2D typed op

• Datenarten: points → points

• Aufruf: fullseye.apply(img, "tb_estimate_normals", a=0.5, b=0.5) (das 2-D-Modell ist ein Bild plus zwei skalare Regler a,b∈[0,1])

tb_estimate_normals: input → output

*Die Abbildung ist die tatsächliche Ausgabe auf einer synthetischen 128×128-Eingabe. Links Eingabe, rechts Ausgabe. Punktwolken als Draufsicht-Streudiagramm (Helligkeit = z), 1-D-Reihen als Linie, Volumen als Maximum-Projektion entlang z, Videos als mittleres Bild, komplexe Bilder als Betrag; Rückgabewerte, die kein Bild ergeben, werden als Werte gezeigt.*

Regler a durchfahren (0,1 / 0,5 / 0,9, der andere Regler auf Standard):

▸ tb_estimate_normals: Regler a durchfahren (Doku-Website)

*Regler b ändert die Ausgabe nicht (gemessen: identisch bei 0,1 / 0,5 / 0,9).*

Stufen (die vorangehenden Ops → dieser Op, von links nach rechts):

▸ tb_estimate_normals: Stufen (Doku-Website)

Auf anderen Bildern (synthetische Szene / Foto / Münzen. Obere Reihe: Eingaben, untere Reihe: deren Ausgaben. Regler auf Standard):

▸ tb_estimate_normals: andere Eingaben (Doku-Website)

Verwendung

Punktwolken-Normalen, einheitlich nach außen ausgerichtet (vom lokalen Nachbarschaftsschwerpunkt weg). → (N,3).

Ablauf (je Punkt, Python-Schleife): cKDTree nimmt die k+1-Nachbarschaft einschließlich des Punktes selbst (k auf N-1 gekürzt), und der Eigenvektor zum kleinsten Eigenwert der Streumatrix local.T @ local der Nachbarkoordinaten mit dem Abfragepunkt als Ursprung wird die Normale (Einheitslänge). Die Orientierung lautet "umdrehen, wenn das Skalarprodukt mit dem Nachbarschaftsschwerpunkt positiv ist" = ausgerichtet auf die vom Nachbarschaftsschwerpunkt abgewandte Seite.

• Punkte mit weniger als 5 Nachbarn liefern den festen Wert (0, 0, 1) (nicht geschätzt).

• Die Orientierung ist eine lokale Heuristik: bei geschlossenen konvexen Formen nach außen, auf offenen Flächen, dünnen Platten und in Mulden können benachbarte Punkte sich aber widersprechen (globale Konsistenz ist nicht garantiert). Für globale Ausrichtung das Ergebnis durch orient_normals schicken oder von Anfang an estimate_oriented_normals verwenden. Bei einem organized Tiefenbild ist normals_from_depth zum Blickpunkt orientiert und schnell.

• Rückgabewert float64 (N,3). k Standard 25. Deterministisch.

• Intern läuft dieselbe Berechnung wie bei principal_curvatures (auch die Normalenschätzung läuft bis zum Quadrik-Fit), daher ist es bei vielen Punkten langsam.

Die in die 2-D-Evolutionsregistrierung überbrückte 3d-op estimate_normals. Die Implementierung ist dieselbe, nur die Aufrufkonvention ist an op(v, a, b) angepasst. a variiert k (Standard 25). b wird nicht verwendet.

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.

In Studio ausprobieren

Das Programm unten ist nachweislich lauffähig (gleiche Eingabe wie die Abbildung). In der Studio-Hilfe wird dieser Block zu Schaltflächen, die es sofort laden und ausführen.

img_to_points 0.50 0.50
tb_estimate_normals 0.50 0.50

▸ Diese Pipeline laden  ·  Laden & ausführen

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

Die folgenden Beispiele rufen den zugrunde liegenden Ledger-Op estimate_normals auf. Dieser Brücken-Op ist dieselbe Implementierung, angepasst an die Konvention fn(v, a, b); das Verhalten gilt unverändert (nur die Aufrufform unterscheidet sich).

• cylinder_axis_metrology — py -3.11 examples_3d/cylinder_axis_metrology.py

• feature_register — py -3.11 examples_3d/feature_register.py

• oriented_normals — py -3.11 examples_3d/oriented_normals.py

Typkompatible Folge-Operatoren (nehmen points als Eingabe)

identity · tb_points_to_voxel · tb_estimate_point_normals · tb_iss_keypoints · tb_project_points · tb_render_point_depth · tb_statistical_outlier_removal · tb_radius_outlier_removal

Gleiche Kategorie (typed)

tb_points_to_voxel · tb_estimate_point_normals · tb_iss_keypoints · tb_project_points · tb_render_point_depth · tb_statistical_outlier_removal · tb_radius_outlier_removal · tb_voxel_grid_downsample


*Provenance: ops.py — 2D 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.