Removing Points C++

Removing Points C++

本文关键字:C++ Points Removing      更新时间:2023-10-16

我在一个点云中有N个点(x_N,y_N,z_N)。点云形成球形物体的形状。我的问题是,我有点在我的云,突出明显沿着z轴(这是由于针对象插入我的对象在扫描期间)。我想去掉这些点。

我采取的一种方法是找到云中一组点与下一组点的斜率变化。(例如,我取前10个点,计算斜率变化量,并将其与后10个点的斜率变化量进行比较)。但这并不是很有效。有什么建议吗?

任何帮助都将非常感激。如果对我的问题有任何疑问,请告诉我。

如果确定它是一个球状物体,并且点是均匀分布的(没有一边比另一边有更多的点),取所有点的X, Y和Z的平均值。它就在球体的center旁边。如果该引脚不是很厚或很长(如果它与总数相比有几个点),您可以假设它是center

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


如果你知道球的半径和它的中心,简单地计算每个点到中心的距离,并比较半径

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

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

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

当然,如果您擅长编写代码来解决这个问题,那么这是没有帮助的。

  • 找到z的最高点,100%肯定是一个引脚或引脚的一部分。
  • 设置圆心为圆心并移除半径范围内的所有点
  • 对其他引脚再迭代两次