参考 https://github.com/MurrellGroup/Kabsch.jl
一个Kabsch算法的Julia实现,1个Julia包
Kabsch算法简要解析
作用 :求解两组对应点集之间的最优旋转矩阵,使得旋转后两组点的均方误差最小,常用于点集配准、三维对齐。
核心步骤(算法逻辑)
- 去中心化:分别计算两组点P、Q的质心,把点平移到以各自质心为原点,消除平移分量。
- 构造协方差矩阵:利用去中心化后的点计算协方差矩阵。
- SVD奇异值分解:对协方差矩阵做SVD分解,得到U、Σ、V。
- 修正反射:保证输出是合法旋转矩阵(行列式=1,避免镜像翻转)。
- 输出旋转矩阵R,用R作用于目标点集,完成对齐。
这个Julia包的特性
- 基础接口:输入两组点,返回旋转矩阵+两组质心;
superimposed直接输出对齐后的点。 - 批量处理:支持多组点集一次性批量求解多个旋转。
- 性能扩展:兼容
StaticArrays小矩阵高速运算;支持CUDA GPU加速大规模批量3D点。 - 典型场景:分子结构叠合(RMSD)、三维点云配准。
注意:Kabsch只求解旋转+平移 ,要求点是一一对应的;不解决点对应关系(对应关系未知要用ICP类算法)。