首页 > 解决方案 > 如果添加了平移,如何正确计算 3D Procrustes 问题中的旋转?

问题描述

我正在开发一个例程,该例程应该将感测的 3D 点云Q 与参考点云P最佳对齐。所涉及的变换包括旋转、平移和缩放(相似性)。有大量关于如何使用 SVD 计算转换的文献。我一直在关注这个:RJ Hanson 和 MJ Norris,“基于奇异值分解的测量分析”,SIAM 科学与统计计算杂志,第一卷。2,第 363-373 页,1981 年。

描述的算法如下:计算每个点集中的质心,计算中心点集;计算两个中心点集之间的协方差矩阵并对协方差矩阵执行 SVD:C = U * S * V',其中C是协方差矩阵,S是其奇异值的对角矩阵,UV是左侧和右奇异向量矩阵,分别。然后,您可以将变换的旋转分量计算为R = U' * V

如果转换由旋转和(可选)缩放组成,则该算法对我非常有效,但如果存在平移,则它会失败。到目前为止,我还不明白我做错了什么。我也没有找到任何有用的数字示例,包括翻译并导致成功。

如果有人想看看,我也会上传我的代码。

标签: 3drotationsvd

解决方案


正如 Mauricio Cele Lopez Belon 正确推测的那样,这是一个错误,而是一个思维错误。每当您在相似变换中进行非单位缩放时,要计算平移向量,您需要使用与缩放相乘的旋转矩阵: t = qC - s * R * pC,其中pCqC是参考的质心和感测点分别设置,R计算的纯旋转矩阵,s缩放。您需要使用此等式而不是t = qC - R * pC(您经常在论文中找到),以获得正确的结果。如果有人对工作和单元测试的 C# 代码感兴趣,我会很高兴发送(这个地方有点太长了)。


推荐阅读