Python:变换和叠加点集



是否有一个python包(可能在numpy中)来转换和叠加一组点(都是3D的),由矩阵定义并执行最小二乘拟合?

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

https://github.com/nghiaho12/rigid_transform_3D

https://github.com/jewettaij/superpose3d

https://github.com/jewettaij/superpose3d_cpp

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

如果你想允许其他类型的(线性)变换,(或者如果你有更高维度的点云),那么向下滚动到这个博客的底部,那里有用户评论:

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

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

干杯

-一个

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

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

返回 3x2 仿射矩阵。


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

最新更新