metrics op• 数据种类:pose × pose → table
• 调用: import fullseye as fs; fs.ledger.pose_error(R_est, t_est, R_gt, t_gt)(要直接调用实现,import metrics3d; metrics3d.pose_error(R_est, t_est, R_gt, t_gt);从台账取用则 ops3d.get("pose_error"))
• 经台账调用的返回值: fullseye.ledger.pose_error(...) 只返回声明的 out 类型 table 的值(底层函数还会返回辅助信息)。需要被丢弃的部分时,使用 fullseye.ledger.pose_error.raw(...),或直接调用 metrics3d.pose_error。
位姿误差 = (旋转角[度], 平移范数)。用于配准结果与 GT 的比较。→ (rot_deg, trans_err)。
计算:
• 旋转:将 dR = R_est.T @ R_gt 的旋转角 atan2(|axial(dR − dRᵀ)| / 2, (trace(dR) − 1) / 2) 换算为度(sin 取自反对称部分,cos 取自 trace。arccos 在 1 附近有 √ε 的下限, 曾把 1e-6° 以下答成 0 —— 2026-10-07 修正)。值域 [0, 180] 度。R_est == R_gt 时为 0。
• 平移:|t_est - t_gt|(欧几里得范数,与坐标同单位)。
参数:R_est、R_gt 为 (3, 3),t_est、t_gt 长度为 3。仅转换为 float,不检查形状和正交性 —— R 不是旋转矩阵(含反射、缩放)时 trace 公式失去意义,非 (3, 3) 时会出现矩阵乘法的 ValueError 或无意义的值。请将 register_fpfh / icp_point2point_3d / register_cross 返回的 (R, t) 与 GT 的 (R, t) 按同一约定(dst ≈ src @ R.T + t)传入。
返回值:(rot_deg, trans_err) 这 2 个 float。
注意:平移误差与旋转误差是耦合的(对于远离原点的对象,较小的旋转误差会表现为较大的平移误差)。若要看点云上的实际误差,请用 rmse_correspondence(对应已知)或 chamfer_distance 比较变换后的点云。
• blender_interop — 与 Blender 配合使用 —— 在 Blender 中建形、用 fullseye 测量(坐标轴、单位、真值数据的陷阱)
• measurement_uncertainty — 测量不确定度与校准知识 —— 为了能主张“测得准”
• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。
• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。
• itokawa_self_register — py -3.11 examples_3d/itokawa_self_register.py
table 作为输入)fuse_to_voxel · mesh_select_lod
metrics)chamfer_distance · hausdorff_distance · m3c2_distance · fscore · rmse_correspondence · normal_consistency · voxel_iou
*Provenance: metrics3d.py — 3D 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.