【问题标题】:Point cloud denoising with PDAL使用 PDAL 进行点云去噪
【发布时间】:2018-12-24 21:14:38
【问题描述】:

我用地面激光雷达收集了非常密集的单返回点云,由大约 700 平方米的超过 800 万个点组成。它由我想删除的噪声点组成。我在 Python 3.6 的 PDAL 管道中使用 filters.outlier。

json = """{
  "pipeline":[
    {
      "type":"readers.las",
      "filename":"/LASfiles/9A-1B_subset15m.las"
    },
    {
      "type":"filters.outlier",
      "method":"radius",
      "radius":1.0,
      "min_k":4
    },
    {
      "type":"writers.las",
      "filename":"/LASfiles/9A-1B_sub15m_denoise.las"
    }
  ]
}"""

import pdal
pipeline = pdal.Pipeline(json)
pipeline.validate() 
pipeline.execute()

代码运行良好,但创建的点云与原始点云相同,我尝试更改半径值,但得到相同的结果。如果有人提示我出了什么问题,我将不胜感激。

【问题讨论】:

    标签: python-3.x point-clouds pdal


    【解决方案1】:

    这很容易。如果你再看看documentation,你会发现这个小sn-p:

    值得注意的是,两种过滤方法都只是将分类值 7 应用于噪声点(根据 LAS 规范)。要完全去除噪声点,用户可以在离群值过滤器下游的管道中添加范围过滤器。

    尝试在离群值过滤器之后将以下内容添加到您的管道中。

    {
        "type":"filters.range",
        "limits":"Classification![7:7]"
    }
    

    这将通过分类值不等于 7 的每个点(这将表示噪声),并丢弃所有其他点。

    【讨论】:

    • 感谢您对 @chambbj 的帮助。问题是我的 las 文件来自单次返回地面激光雷达而不是分类。在我的情况下,还有其他方法可以使用 PDAL 消除噪音吗?
    • @Sher 你试过我的推荐了吗?它会做你正在寻找的。即使您的数据开始时没有分类,异常值过滤器也会使用分类来标记噪声点,但会将它们留在文件中。范围过滤器将去除噪声点。
    • 是的,我做了,但是代码运行了 24 小时并没有完成,然后我停止了,因为我认为这段代码有问题。我会再试一次,让你知道。
    • 我显然不知道你的数据,但也许你需要重新考虑你在离群值过滤器中使用的半径。
    • 如果您在原始运行中更改了任何其他内容(在添加范围过滤器之前),也很高兴,因为您没有提及原始查询中冗长的运行时间。范围过滤器不应显着影响运行时间;大部分时间将花费在离群值过滤器本身内进行最近邻查询。
    猜你喜欢
    • 2018-12-08
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多