metrics op• Datenarten: pose × pose → table
• Aufruf: import fullseye as fs; fs.ledger.pose_error(R_est, t_est, R_gt, t_gt) (die Implementierung direkt: import metrics3d; metrics3d.pose_error(R_est, t_est, R_gt, t_gt); aus dem Register: ops3d.get("pose_error"))
• Rückgabewert über das Register: fullseye.ledger.pose_error(...) liefert nur den Wert des deklarierten Out-Typs table (die zugrunde liegende Funktion gibt zusätzlich Hilfsinformationen zurück). Wird das Verworfene gebraucht, nutze fullseye.ledger.pose_error.raw(...) oder rufe metrics3d.pose_error direkt auf.
Posenfehler = (Rotationswinkel [Grad], Translationsnorm). Zum Vergleich eines Registrierungsergebnisses mit der Ground Truth. → (rot_deg, trans_err).
Berechnung:
• Rotation: Der Drehwinkel von dR = R_est.T @ R_gt, atan2(|axial(dR − dRᵀ)| / 2, (trace(dR) − 1) / 2), wird in Grad umgerechnet (sin aus dem schiefsymmetrischen Teil, cos aus der Spur. arccos hat nahe 1 einen √ε-Boden und lieferte für 1e-6° und darunter 0 —— korrigiert am 2026-10-07). Wertebereich [0, 180] Grad. 0, wenn R_est == R_gt.
• Translation: |t_est - t_gt| (euklidische Norm, in derselben Einheit wie die Koordinaten).
Argumente: R_est, R_gt sind (3, 3), t_est, t_gt haben Länge 3. Sie werden nur in float umgewandelt, Form und Orthogonalität werden nicht geprüft — ist R keine Rotationsmatrix (mit Spiegelung oder Skalierung), verliert die trace-Formel ihren Sinn, und alles außer (3, 3) ergibt einen Matrixprodukt- ValueError oder einen sinnlosen Wert. Übergeben Sie das von register_fpfh / icp_point2point_3d / register_cross zurückgegebene (R, t) und das GT-(R, t) in derselben Konvention (dst ≈ src @ R.T + t).
Rückgabewert: (rot_deg, trans_err), 2 float-Werte.
Hinweis: Der Translationsfehler ist mit dem Rotationsfehler gekoppelt (bei Objekten fern vom Ursprung erscheint ein kleiner Rotationsfehler als großer Translationsfehler). Um den effektiven Fehler auf der Punktwolke zu sehen, vergleichen Sie die transformierten Wolken mit rmse_correspondence (Korrespondenzen bekannt) oder chamfer_distance.
• 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_self_register — py -3.11 examples_3d/itokawa_self_register.py
table als Eingabe)fuse_to_voxel · mesh_select_lod
metrics)chamfer_distance · hausdorff_distance · m3c2_distance · fscore · rmse_correspondence · normal_consistency · voxel_iou
*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.