register_cpd_rigid — 3D deform op

• 数据种类:points × points → pose

• 调用: import fullseye as fs; fs.ledger.register_cpd_rigid(src, dst, iters=50, w=0.0, tol=1e-08)(要直接调用实现,import deform3d; deform3d.register_cpd_rigid(src, dst, iters=50, w=0.0, tol=1e-08);从台账取用则 ops3d.get("register_cpd_rigid"))

用法

用 Coherent Point Drift(CPD)刚体版以 EM 估计旋转+平移。

用刚体变换把 src(移动侧 Y,M 点)对齐到 dst(固定侧 X,N 点)。CPD 把 dst 看作以 src 为中心的各向同性高斯混合的质心来处理,在 E 步更新软对应(posterior),在 M 步更新最大似然的刚体变换和方差。与 ICP 不同,对应不是硬性决定的,因此对初始偏差和部分离群值鲁棒。尺度固定为 1(纯刚体)。

参考: Myronenko & Song, "Point Set Registration: Coherent Point Drift", 2010。

参数:

src: (M,3) 移动侧点云。

dst: (N,3) 固定侧点云。

iters: 最大 EM 迭代次数。

w: 离群值(均匀分布)混合比 0≤w<1。0 表示无离群值。

tol: 方差 σ² 的相对变化小于该值时视为收敛并终止。

返回值:

R: (3,3) 旋转(dst ≈ src @ R.T + t)。

t: (3,) 平移。

info: dict。"sigma2"(最终方差)、"iters"、"converged"、"rmse"

(变换后 src 的最近邻 RMSE)。

异常:

ValueError: 形状非法、点数不足、w 超出范围,或 N*M 超过

CPD_MAX_PAIRS(25M)(因为每次迭代都要构建稠密的 (N,M) 责任矩阵。

请先对两个点云降采样再传入)。

参考(示例数据、文献)

• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。

• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。

可运行的示例(实际调用该算子并已验证的样例)

• motion_scene — py -3.11 examples_3d/motion_scene.py

类型可衔接的下一个算子(可接受 pose 作为输入)

fuse_to_voxel · pose_error · bundle_adjust · mean_reprojection_error · optimize_pose_graph · relative_pose · mean_edge_error · rotation_translation_error

同类别(deform)

tps_fit · tps_warp · register_nonrigid


*Provenance: deform3d.py — 3D 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*

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