PCL - 过滤掉密集区域中未找到的点

Posted

技术标签:

【中文标题】PCL - 过滤掉密集区域中未找到的点【英文标题】:PCL - Filtering out points not found in dense area 【发布时间】:2016-04-06 22:58:28 【问题描述】:

我有一个对象的点云,然后我从位于特定平面内的所有点构建一个点云。这个点云看起来像这样:

我想过滤掉所有不在该矩形中的额外点。当我得到平面的所有点时,有一些不相关的点恰好在同一个平面上。我想过滤掉那些,所以我可以专门处理矩形中的点。

我对使用点云和对象建模非常陌生,所以我很难知道我在寻找什么。我尝试使用StatisticalOutlierRemoval,但是(不足为奇)当那些额外的分数本身有点密集时,它并不总是得到所有的额外分数。如果我将参数更改为更积极的过滤,它会开始从我感兴趣的矩形中删除点。

我知道有一大堆filters 可用,但我真的不知道它们是如何工作的,也不知道哪一个最适合解决这个问题。我可以通过反复试验来完成每一个,但我希望有人能指出我正确的方向。有什么方法可以得到我正在寻找的最终结果?

【问题讨论】:

【参考方案1】:

你可以试试:

根据云的尺寸和密度使用 Radious Outlier Removal 和 'r' (setRadiusSearch) 和 'k' (setMinNeighborsInRadius) 的值。通常情况下,这些值越高,过滤您有兴趣过滤的点的机会就越大。

使用Pass Through Filter,如果你知道你真正感兴趣的点的坐标,使用这些坐标用setFilterLimits构建一个“边界框”,这样框外的所有东西都会是过滤。

正如您所说,当您尝试更改 SOR 过滤器的参数时,它开始删除您不想删除的点,可能通过过滤器是您最好的选择。

希望对您有所帮助。

【讨论】:

【参考方案2】:

像 David 一样,我会尝试 RadiusOutlierRemoval。假设您的数据主要是二维的 - 确定矩形内云的密度(D 以点/r² 为单位)。矩形中最薄弱的点是一个只有 D/4 个邻居的角(最大半径不大于短边)。使用 X 的安全系数,您现在可以过滤其附近密度小于 D/(X*4) 的所有点。您从等于矩形较短边的半径 r 开始,然后删除具有小于 (D*r²)/(4*X) 邻居的点,以获得更大、更远的异常值簇。您以减小的半径重复此过程,以捕获更靠近您的矩形的较小集群。

【讨论】:

我最终使用了区域增长分割 (pointclouds.org/documentation/tutorials/…),然后我使用了得分最多的任何集群。这似乎很适合我的需求。有什么理由会是个坏主意吗?【参考方案3】:

点云有组织吗?如果是,您可以尝试使用中值滤波器吗? PCL 仅为点云的 z 维提供它。您可能需要修改您的点云以使其沿其他维度 (x,y) 过滤。

【讨论】:

以上是关于PCL - 过滤掉密集区域中未找到的点的主要内容,如果未能解决你的问题,请参考以下文章

PCL:过滤点云给定 2 线方程

PCL 在没有云副本的八叉树上应用过滤器

车牌验证问题

PCL:基于区域生长的点云分割——保存分割结果

PCL:基于区域生长的点云分割原理与实现

PCL:StatisticalOutlierRemoval ❤️ 统计滤波