点云之间的转换

时间:2013-11-11 11:02:10

标签: kinect transformation point-cloud-library point-clouds

我希望能找到一些提示,从哪里开始处理我正在处理的问题。 我正在使用Kinect传感器捕获3d点云。我创建了一个已经工作的3d物体探测器。

这是我的任务:

假设我有一个点云1.我在云A中检测到一个物体,我知道物体的质心位置(x1,y1,z1)。现在我将传感器移动到路径上并创建新的云(例如云2)。在那个云2中,我看到了相同的对象,例如从侧面看,物体检测不正常。

我想将检测到的对象从云1转换为云2,以便在云2中​​获得质心。对我而言,听起来我需要一个矩阵(平移,旋转)来将点从1转换为2。 / p>

想法如何解决我的问题? 也许ICP?有更好的解决方案吗?

THX!

2 个答案:

答案 0 :(得分:1)

通常,此任务称为注册。它依赖于对云1中哪些点对应于点2中的哪些云的良好估计(更具体地,其给出云1中的点,云2中的哪个点表示检测到的对象上的相同位置)。 PCL库文档中有一个很好的overview

如果你有这样的信件,那么你很幸运,你可以直接计算一个轮换和翻译,如here所示。

如果没有,您需要估计该通信。对于大致对齐的点云,ICP会做到这一点,但如果您的点云尚未完全对齐,您可能需要首先估算点云中的“关键点”(例如书角,不同颜色等),计算如上所述的旋转和平移,然后执行ICP。正如DJDuff所提到的那样,ICP在实际上在已经近似对齐的点云上工作得更好,因为它使用两个指标中的一个估计对应关系,最小点对点距离或最小点到平面距离,维基百科,后者效果更好在实践中,但它确实涉及估计法线,这可能是棘手的。如果对应距离很远,那么转换也可能是这样。

答案 1 :(得分:0)

我认为您所询问的特别是Kinect传感器和Microsoft为其发布的API。

如果您不打算进行重建,可以查看Sensor Fusion命名空间中的AlignPointClouds功能。这应该自动处理,方法类似于@pnhgiol给出的答案。

另一方面,如果您正在进行重建以及点云变换,那么重建类就是您正在寻找的。所有这些都可以找到,here