refine op• 数据种类:points × points → pose
• 调用: import fullseye as fs; fs.ledger.icp_point2point_3d(src, dst, iters=50, init_R=None, init_t=None, tol=1e-06, max_corr_dist=None, trim_ratio=None, device='cpu', reproducible=False)(要直接调用实现,import match3d; match3d.icp_point2point_3d(src, dst, iters=50, init_R=None, init_t=None, tol=1e-06, max_corr_dist=None, trim_ratio=None, device='cpu', reproducible=False);从台账取用则 ops3d.get("icp_point2point_3d"))
• GPU:无(仅 CPU 参考实现)
用 point-to-point ICP(Kabsch/SVD)精化点群。
通过粗匹配估计获得(整数 NCC/Fourier-Mellin±3°/Hough±0.5voxel)从初始姿态(init_R,init_t)开始,src侧点被严格地变换为dst侧点。对齐。在每次迭代时,重新缝合最近邻对应关系(cKDTree)并使用 Kabsch 算法通过使用(SVD)计算和累积相对旋转和平移,即使对应关系未知,收敛到亚体素精度。
对于部分重叠和异常值,请使用 Trimmed ICP(仅采用小距离对应)。使用绝对距离门(max_corr_dist)来处理这个问题。最终的RMSE被实际采用。由于评估是基于对应关系(内点),因此即使在部分观察中也能准确反映姿势质量。
论据:
src:(N,3)移动侧点云(torch.Tensor或numpy.ndarray)。
dst:(M,3) 固定侧(参考)点组。
iters:最大迭代次数。
init_R: (3,3) 初始旋转。如果无,则它是单位矩阵。
init_t: (3,) 初始翻译。如果没有,则它是零向量。
tol:如果 RMSE 的相对改进低于该值,则收敛终止。
max_corr_dist:将超过此距离的对应关系视为异常值(使用 None 禁用)。
修剪比率:0<r<=1。在每次迭代中,只有前 r 个与最小最近邻距离对应
采用修整后的 ICP。对部分重叠有效(重叠率r)。禁用无。
device:放置返回值的torch设备(如“cpu”)。 SVD 是在 CPU 上使用 NumPy 求解的。
可重现:如果为 True,则减少量将独立于点顺序和 BLAS 线程数(默认 False = 与之前相同)。
平均值是math.fsum,互协方差H是ozakimm(Ozaki方案),方向是逐个元素计算的,RMSE也是math.fsum。
即使 src 中点的顺序发生变化,R·t·rmse 的位数仍保持不变(同一台计算机,同一 LAPACK)。在trim_ratio中断时
可以以不同的顺序选择相距完全相同的距离的点。在 200,000 个点时,每次重复 0.7 毫秒变为约 170 毫秒。
返回值:
R:(3,3)旋转。 dst ~= src @ R.T + t。 在有手电筒的环境中 torch.Tensor,如果没有,则相同的值numpy.ndarray(于2026-09-07
即使将主体转换为 numpy,为了兼容性,类型也保持不变。)
★ 同族中的 icp_point2plane 始终返回 numpy —— 在族中
由于类型未对齐,因此可以安全地向下游传递“np.asarray(R)”。
(两者都有效。保留这种错位以避免破坏性更改。)
t: (3,) 平移(与 R 类型相同)。
信息:字典。 “rmse”(招募的最终 RMSE),“iters”(实际迭代次数),
“融合”(布尔),“内点”(采用次数),“rmse_history”(列表)。
• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。
• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。
• gicp_register — py -3.11 examples_3d/gicp_register.py
• itokawa_self_register — py -3.11 examples_3d/itokawa_self_register.py
• itokawa_shape_match — py -3.11 examples_3d/itokawa_shape_match.py
• partial_overlap_icp — py -3.11 examples_3d/partial_overlap_icp.py
pose 作为输入)fuse_to_voxel · pose_error · bundle_adjust · mean_reprojection_error · optimize_pose_graph · relative_pose · mean_edge_error · rotation_translation_error
refine)refine_peak_newton · refine_translation_lk · refine_lm · refine_rotation_z · icp_point2plane
*Provenance: match3d.py — 3D 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.