metrics op• Datenarten: points × points → measurement
• Aufruf: import fullseye as fs; fs.ledger.chamfer_distance(a, b, squared=False) (die Implementierung direkt: import metrics3d; metrics3d.chamfer_distance(a, b, squared=False); aus dem Register: ops3d.get("chamfer_distance"))
Die symmetrische Chamfer-Distanz = 0,5*(mean_a min_b + mean_b min_a). → Skalar. Kleiner heißt bessere Übereinstimmung.
Raises ValueError: wenn einer der beiden leer oder nicht (N,3) ist (der Mittelwert einer leeren Menge = ein stilles NaN).
Berechnung: mit scipy.spatial.cKDTree die Nächster-Nachbar-Distanz d_ab von jedem Punkt von a zu b ((Na,)) und d_ba von b zu a bestimmen, dann 0.5 * (mean(d_ab) + mean(d_ba)). Bei squared=True wird jede Distanz vor der Mittelung zur Potenz 2 erhoben (die Einheit wird Distanz^2; die Form für gradientenbasierte Optimierung). Standard ist die rohe Distanz (Einheit = Koordinateneinheit).
Eingabe: a, b sind Punktwolken (N, 3) / (M, 3) (Punktzahlen dürfen abweichen, keine Korrespondenz nötig). Werden nach float konvertiert. Koordinatensystem und Skala beider vorher angleichen (vergleicht man 2 Wolken vor der Registrierung, misst man bloß den Posenunterschied).
Rückgabewert: Python float. 0 für identische Punktwolken. Wertebereich [0, inf), keine Normierung (skaliert mit der Wolkengröße, daher zum Vergleichen z. B. durch die bbox-Diagonale teilen).
Hinweis: Als Mittelwert ist sie weniger anfällig für Ausreißer als Hausdorff, aber empfindlich für ungleichmäßige Punktdichte (der Mittelwert der dichteren Seite dominiert). Um die Dichte anzugleichen, vorher pc_poisson_disk / voxel_grid_downsample anwenden. Für schwellwertbasierte Bewertung fscore, für den schlechtesten Wert hausdorff_distance, bei bekannter Korrespondenz rmse_correspondence.
• blender_interop — Zusammen mit Blender — Form bauen, mit fullseye messen (Fallstricke: Achsen, Einheiten, Referenzdaten)
• measurement_uncertainty — Messunsicherheit und Kalibrierung — was nötig ist, um zu behaupten, dass man misst
• 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.
• itokawa_pose_canonical — py -3.11 examples_3d/itokawa_pose_canonical.py
• itokawa_shape_match — py -3.11 examples_3d/itokawa_shape_match.py
• mesh_lod_download — py -3.11 examples_3d/mesh_lod_download.py
• metrics_eval — py -3.11 examples_3d/metrics_eval.py
• poisson_surface_recon — py -3.11 examples_3d/poisson_surface_recon.py
measurement als Eingabe)vol_gaussian_psf · fuse_to_voxel · fresnel_reflectance · snell_angle
metrics)hausdorff_distance · m3c2_distance · fscore · rmse_correspondence · normal_consistency · voxel_iou · pose_error
*Provenance: metrics3d.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.