【问题标题】:Python: Transform and superimpose sets of pointsPython:变换和叠加点集
【发布时间】:2017-06-14 03:41:04
【问题描述】:

是否有 python 包(可能在 numpy 中)来转换一组点并将其叠加到由矩阵定义的另一组点(均为 3D 中)并执行最小二乘拟合?

【问题讨论】:

  • 你的意思是刚性转换?您可以考虑仿射或更一般的单应性。
  • 您的叠加是指缩放、旋转和平移还是只是旋转?
  • @MosesKoledoye 没有缩放。只有旋转和平移。

标签: python numpy scipy transform


【解决方案1】:

对于 有序 3D 点云,有几个存储库可以在 matlab、python 和 C++ 中进行刚体叠加:

https://github.com/nghiaho12/rigid_transform_3D

https://github.com/jewettaij/superpose3d

https://github.com/jewettaij/superpose3d_cpp

(最后两个存储库可以处理重新缩放/放大)。

如果您想允许其他类型的(线性)变换,(或者如果您有更高维度的点云),请向下滚动到用户 cmets 所在的博客底部:

http://nghiaho.com/?page_id=671

我还假设点云是有序的。 (换句话说,我假设您知道任一云中的哪些点对彼此对应。)如果不是这种情况,但如果点云对应于生物分子(蛋白质,RNA),那么您通常可以假设点云保持秩序但包含间隙(如果它们是从共同祖先进化而来的情况)。在这种情况下,您应该寻找蛋白质结构比对算法。 (无耻的插件:我写了一个叫“minrms”,但还有很多其他的。)但是如果你真的对点的顺序一无所知,那么这个问题确实是一个非常难的组合问题。在这种情况下,我怀疑最好的解决方案是概率算法,您可能需要搜索文献才能找到适合您特定需求的算法。

干杯

-a

【讨论】:

    【解决方案2】:

    这是使用 OpenCV 进行 2D 转换的一种方法:

    cv2.estimateRigidTransform(
            src_points,
            dst_points,
            fullAffine=False)
    

    返回一个 3x2 affine matrix


    对于任意维度,点云库中可能有相关函数。

    【讨论】:

      猜你喜欢
      • 2012-08-25
      • 2012-06-26
      • 2015-09-30
      • 2016-11-08
      • 2014-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      相关资源
      最近更新 更多