Облако точек снимает шум с помощью PDAL
У меня очень плотное облако единичных точек возврата, собранное наземным лидаром и состоящее из более чем 8 000 000 точек на площади около 700 квадратных метров. Он состоит из точек шума, которые я хотел бы удалить. Я использую filters.outlier в конвейере PDAL в Python 3.6.
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()
Код работает хорошо, но создает то же облако точек, что и исходное, я попытался изменить значения радиуса, но получил тот же результат. Я был бы очень признателен, если бы кто-нибудь дал мне подсказку о том, что идет не так.
1 ответ
Это довольно легко. Если вы еще раз посмотрите на документацию, вы найдете этот небольшой фрагмент:
Стоит отметить, что оба метода фильтрации просто применяют значение классификации 7 к точкам шума (согласно спецификации LAS). Чтобы полностью удалить точки шума, пользователи могут добавить фильтр диапазона в свой конвейер ниже по потоку от фильтра выбросов.
Попробуйте добавить следующее в свой конвейер, следуя фильтру выбросов.
{
"type":"filters.range",
"limits":"Classification![7:7]"
}
Это пройдет каждую точку со значением классификации, не равным 7 (что указывало бы на шум), и отбросит все остальные.