自学内容网 自学内容网

点云滤波ROR和SOR

点云滤波的算法细节可以通过两种常见方法进行:ROR(Radius Outlier Removal,半径离群点移除)SOR(Statistical Outlier Removal,统计离群点移除)。两者的目标都是通过移除点云中的离群点来提高点云质量,但它们使用不同的策略。

1. ROR (Radius Outlier Removal)

算法细节:
  • 原理:ROR 基于每个点在给定半径范围内的邻居点数量进行滤波。对于每个点,计算其在指定半径内的邻居点数量。如果该点的邻居数少于给定的阈值,则该点被视为离群点并移除。
  • 参数
    • 搜索半径 (radius):定义邻域的大小。即围绕每个点的半径范围。
    • 最小邻居数 (min_neighbors):在定义半径内,点云点需要满足的最少邻居数量。如果邻居数量少于该值,点将被视为离群点。
步骤:
  1. 对于点云中的每个点,搜索半径内的邻居点。
  2. 如果邻居点的数量低于阈值 min_neighbors,则该点被标记为离群点。
  3. 移除这些被标记的离群点。
应用场景:
  • 小规模噪声去除:当点云数据中存在一些零星的噪声点(通常由于传感器测量误差或环境干扰引起)时,ROR 能够有效去除这些独立存在的点。
  • 均匀分布的点云:ROR 适用于点云中点分布较为均匀的情况,因为该方法假定每个点在给定半径范围内应该有足够多的邻居。

2. SOR (Statistical Outlier Removal)

算法细节:
  • 原理:SOR 基于统计分析的方式来检测和移除离群点。对每个点计算其到最近邻居的平均距离,然后通过设定一个标准差阈值来决定该点是否为离群点。如果某点的平均距离超出某个标准差范围,则认为它是离群点。
  • 参数
    • k 邻居数 (k_neighbors):用于计算每个点的平均邻居距离的邻居数量。
    • 标准差乘数 (stddev_mult):用于判断离群点的标准差乘数。离群点定义为距离均值偏离超过一定倍数的点。
步骤:
  1. 对于点云中的每个点,找到其 k_neighbors 个最近邻点,并计算与这些邻居点的平均距离。
  2. 对所有点的平均距离计算全局均值和标准差。
  3. 如果某点的平均距离超出 mean + stddev_mult * stddev,则该点被视为离群点。
  4. 移除这些离群点。
    上述公式中的变量解释如下:
    mean + stddev_mult * stddev 是用于判断离群点的一个公式,主要用于基于统计分析的方法来检测异常数据点。在点云滤波的 SOR (Statistical Outlier Removal) 算法中,使用该公式可以帮助我们判断某个点是否与其周围的点相距过远,从而将其识别为离群点。

具体解释如下:

  1. mean:指所有点与其邻居点的平均距离的整体均值,也就是整个点云数据中所有点的邻居距离的平均值。

  2. stddev (standard deviation):标准差,表示这些邻居距离的离散程度。标准差越大,说明这些点的邻居距离变化越大,即点云中存在较大的局部密度差异。

  3. stddev_mult (standard deviation multiplier):标准差乘数,是一个超参数,用来调整判断离群点的严格程度。常常设定为一个大于1的值(比如 1.0, 2.0 等),表示我们允许某个点的邻居距离比均值多几个标准差范围,但超过这个倍数就认为是离群点。

公式解释:
  • mean + stddev_mult * stddev 是一个阈值,它定义了邻居距离的“正常范围”。如果某个点的邻居距离超出了这个阈值(比 mean 多了 stddev_mult 倍的 stddev),就认为这个点异常。

  • mean 是邻居距离的平均值,代表着“正常”距离。

  • stddev_mult * stddev 则是为了考虑允许的波动范围(也就是标准差乘以一个调整倍数,表示可以容忍一定的变化)。

应用:

在 SOR 算法中,对于每个点,计算其与 k 个最近邻的平均距离,然后与该点云的全局平均距离 mean 进行对比。如果该点的距离超过 mean + stddev_mult * stddev,则认为该点是离群点。

例如:

  • 如果 mean 是 5,stddev 是 1,stddev_mult 设为 2,那么阈值是 mean + 2 * 1 = 7
  • 如果某个点的邻居平均距离超过 7,它将被视为离群点,因为它远远偏离了点云的平均分布。
直观理解:
  • 设定较小的 stddev_mult(比如 1)时,允许的邻居距离变化较小,意味着滤波器会更加严格,会移除更多的点。
  • 设定较大的 stddev_mult(比如 2 或 3)时,允许的变化较大,滤波器会更加宽松,只有距离非常大的点才会被移除。

通过这种方式,可以有效去除那些不符合局部分布的异常点,从而提高点云的质量。

应用场景:
  • 点云分布不均的情况:SOR 适用于点分布不均匀的点云数据,因为它基于统计特性来决定哪些点是离群点,能够在局部密度变化较大的场景中表现良好。
  • 大范围噪声去除:当点云中存在较大比例的噪声点时,SOR 由于其基于统计分析,可以更灵活地处理这些噪声。
  • 多层次分布的点云:例如,在含有复杂几何结构的点云中,SOR 能有效检测并去除异常点。

总结对比:

  • ROR 的优点是实现简单,并且在点云分布较均匀时效果较好,但在点云密度不均时可能表现欠佳。
  • SOR 则更适合处理复杂分布的点云,能更好地适应不同密度的局部区域,但计算相对较为复杂,因为需要对点云的统计特性进行分析。

应用总结:

  • 如果点云数据比较稠密且分布均匀,且噪声点是零星的孤立点,ROR 是不错的选择。
  • 如果点云数据的分布存在较大变化,且噪声点成片或与其他点混杂在一起,SOR 更加适用。

原文地址:https://blog.csdn.net/qq_31638535/article/details/142865356

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!