删除点C ++

时间:2013-04-10 21:53:28

标签: c++ math 3d points point-clouds

我在点云中有N个点(x_N,y_N,z_N)。点云形成球形物体的形状。我的问题是我的云中的点在z轴上明显突出(这是由于在扫描过程中插入了对象的pin对象)。我想删除这些要点。

我采取的一种方法是找到我的云中一组点的斜率与下一组点相比的斜率变化。 (例如,我拿走前10个点,计算坡度的变化,并将其与下一个十点的坡度变化进行比较)。但这并不是那么好用。有什么建议?

非常感谢任何帮助。对我的问题有任何困惑,请告诉我。

3 个答案:

答案 0 :(得分:1)

如果它确定是一个类似于物体的球体并且点数相等(没有一侧比另一侧有更多的点),则取所有点的平均值X,Y和Z. 这将在球体的center旁边。如果该引脚不是很厚或很长(如果它与总数相比几分很少),您可以将其假设为center

然后,测量每个点到center的距离。 脱掉距离高于平均距离的那些。


如果你知道球体的半径及其中心,只需计算每个点到中心的距离,然后与半径进行比较。

答案 1 :(得分:0)

我有一个观察和相应的建议:

首先,观察:您似乎正在为一次性案例构建自定义解决方案。当您扫描另一个对象(引脚再次伸出)时,这将不起作用。

现在,建议:使用像meshlab这样的东西,你可以加载点云,选择点并删除它们。

当然,如果您正在编写代码来解决此问题,那么这没有帮助。

答案 2 :(得分:0)

  • 找到z中的最高点,即100%肯定是一个引脚或一个引脚。
  • 将点设置为球体的中心并移除所选半径内的所有点
  • 为其他引脚再次迭代两次