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

*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 ändert die Ausgabe nicht (gemessen: identisch bei 0,1 / 0,5 / 0,9).*
*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_reflection_symmetry_score: Stufen (Doku-Website)
Reflexionssymmetrie-Score = chamfer(gespiegelt, Original) / Median-Abstand zum nächsten Nachbarn (kleiner = symmetrischer, skaleninvariant). -> float.
Die Punktwolke wird mit reflect_points an der Ebene gespiegelt, und der symmetrische Chamfer-Abstand zur Originalwolke (chamfer_distance:
Mittel der Mittelwerte der Nächste-Nachbar-Abstände in beide Richtungen) wird durch den Median des Nächste-Nachbar-Abstands der Originalwolke geteilt. Es ist die dimensionslose Größe "um wie viele Punktabstände das Spiegelbild von den Originalpunkten abweicht", daher ändert eine Multiplikation der Koordinaten mit einer Konstanten den Wert nicht.
• points: (N,3)-Punktwolke. plane_point / plane_normal: Kandidatenebene (die Normale wird intern normiert).
• fail-closed: Punktwolke leer oder nicht (N,3) (chamfer_distance wirft ValueError), oder alle Punkte fallen zusammen, sodass kein Abstand definiert ist (ValueError). Nur wenn Duplikate den Median-Abstand 0 machen, dient der RMS- Radius um den Schwerpunkt × 1e-12 als Untergrenze.
Hinweis zur Lesart: Auch bei exakt symmetrischer Form fallen die gespiegelten Punkte nicht genau auf die ursprünglichen Abtastpunkte, daher wird der Score nicht 0; seine Untergrenze liegt etwa bei einem Punktabstand (Messwerte siehe Tabelle von detect_reflection_symmetry). Statt per Schwellwert zu entscheiden, mehrere Kandidaten durchlaufen und das Minimum sowie den Abstand zum Zweitbesten (margin) betrachten. Um Kandidatenebenen außer den 3 PCA-Achsen zu testen, diese Funktion direkt über die Ebenenparameter durchlaufen.
Die 3d-Op reflection_symmetry_score, in die 2-D-Evolutionsregistry überbrückt. Die Implementierung ist dieselbe; nur die Aufrufkonvention ist an op(v, a, b) angepasst. Diese Op hat keine Stellgrößen; weder a noch b wird verwendet.
• 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.
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_reflection_symmetry_score 0.50 0.50
▸ Diese Pipeline laden · Laden & ausführen
Die folgenden Beispiele rufen den zugrunde liegenden Ledger-Op reflection_symmetry_score 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).
• dl_mesh_symmetry — py -3.11 examples_3d/dl_mesh_symmetry.py
• reflection_symmetry — py -3.11 examples_3d/reflection_symmetry.py
feature als Eingabe)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.