pose_error — 3D metrics op

• Data kinds: pose × pose → table

• Call: import fullseye as fs; fs.ledger.pose_error(R_est, t_est, R_gt, t_gt) (implementation को सीधे call करना हो तो import metrics3d; metrics3d.pose_error(R_est, t_est, R_gt, t_gt), registry से लेना हो तो ops3d.get("pose_error"))

• Ledger के ज़रिए return value: fullseye.ledger.pose_error(...) केवल घोषित out type table का value लौटाता है (मूल function सहायक जानकारी भी लौटाता है)। जो हिस्सा छोड़ दिया गया है उसकी ज़रूरत हो तो fullseye.ledger.pose_error.raw(...) का उपयोग करें, या metrics3d.pose_error को सीधे call करें।

उपयोग

pose error = (rotation angle [डिग्री], translation norm)। registration result की GT से तुलना। → (rot_deg, trans_err)।

गणना:

• Rotation: dR = R_est.T @ R_gt का rotation angle atan2(|axial(dR − dRᵀ)| / 2, (trace(dR) − 1) / 2) degree में बदला जाता है (sin skew-symmetric भाग से, cos trace से लिया जाता है। arccos में 1 के पास √ε का floor होता है और वह 1e-6° या उससे कम को 0 बताता था —— 2026-10-07 को ठीक किया गया)। मान-सीमा [0, 180] degree। R_est == R_gt हो तो 0।

• Translation: |t_est - t_gt| (Euclidean norm, coordinates वाली ही unit में)।

Arguments: R_est, R_gt (3, 3) हैं, t_est, t_gt की लंबाई 3 है। इन्हें केवल float में बदला जाता है, shape और orthogonality की जाँच नहीं होती — R rotation matrix न हो (reflection या scale शामिल) तो trace वाला सूत्र अर्थहीन हो जाता है, और (3, 3) के अलावा कुछ भी matrix product का ValueError या अर्थहीन मान देता है। register_fpfh / icp_point2point_3d / register_cross से लौटा (R, t) और GT का (R, t) एक ही convention (dst ≈ src @ R.T + t) में दें।

Returns: (rot_deg, trans_err), 2 float।

ध्यान दें: translation error rotation error से जुड़ा होता है (origin से दूर के object में छोटा rotation error बड़े translation error के रूप में दिखता है)। point cloud पर वास्तविक error देखने के लिए, transform के बाद के clouds की तुलना rmse_correspondence (correspondence ज्ञात) या chamfer_distance से करें।

पृष्ठभूमि guides (इस op के पीछे की physics और conventions)

• blender_interop — Blender के साथ उपयोग — shape बनाएँ, fullseye से मापें (सावधानियाँ: axes, units, ground truth)

• measurement_uncertainty — Measurement uncertainty और calibration — 'हम माप रहे हैं' कहने के लिए क्या चाहिए

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• itokawa_self_register — py -3.11 examples_3d/itokawa_self_register.py

वे अगले ops जिनसे type जुड़ता है (table को input के रूप में लेते हैं)

fuse_to_voxel · mesh_select_lod

इसी category के (metrics)

chamfer_distance · hausdorff_distance · m3c2_distance · fscore · rmse_correspondence · normal_consistency · voxel_iou


*Provenance: metrics3d.py — 3D operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.