pose_error — 3D 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.