Как отфильтровать выбросы из облака точек в lidr?
У меня есть облако точек ALS. Мне удалось успешно нормализовать высоту, но мне интересно, есть ли способ удалить / отфильтровать некоторые точки, которые явно являются ошибками / выбросами (точки ниже 0 и несколько точек на 30-50 м или даже 100 м выше самых высоких деревьев). Данные, которые я использую, были загружены с национальной карты USGS, и только наземные точки уже классифицированы.
Если я нормализую с помощью tin()
алгоритма и создаю свой chm прямо из облака точек нормализации, мои минимальные / максимальные значения chm будут:
values : -5.23, 129.98 (min, max)
и если я нормализую с помощью dtm:
values : -14.65, 129.91 (min, max)
В конечном итоге я пытаюсь сегментировать деревья и генерировать продукты высоты деревьев, покрытия кроны, плотности деревьев и т. Д. Но я не могу провести свой анализ, когда знаю, что максимальная высота дерева будет <30 м на моем участке исследования.
Если я попытаюсь изменить классификацию земли, поможет ли это с баллами ниже 0? Но это не касается максимума 129 м ...
Я подумал, может быть, мне лучше сгладить мой chm и использовать вершины chm / tree для сегментации деревьев, поскольку у меня возникли проблемы с поиском хорошего способа использования li2012()
алгоритма.
Ответы
«Продвинутой» фильтрации выбросов lidR
пока нет . Но для простых случаев вы можете построить простой метод самостоятельно. Вот несколько советов, и вы можете изменить примеры в соответствии со своими потребностями.
Отфильтруйте достопримечательности с помощью пороговых значений
las <- filter_poi(las, Z >= 0, Z <= 30)
Отфильтруйте высокие выбросы с помощью 95-го процентиля CHM
Это пример из этой виньетки . Он строит растр 95-го процентиля и удаляет то, что является слишком высоким относительно этой карты высот.
filter_noise = function(las, sensitivity)
{
p95 <- grid_metrics(las, ~quantile(Z, probs = 0.95), 10)
las <- merge_spatial(las, p95, "p95")
las <- filter_poi(las, Z < p95*sensitivity)
las$p95 <- NULL
return(las)
}
las <- filter_noise(las, sensitivity = 1.2)
Фильтрация выбросов с помощью точечных показателей
Примеров не приводится, но в конце этой главы есть раздел, в котором объясняется, как создать довольно продвинутый метод фильтрации выбросов с помощьюpoint_metrics()
classify_noise () в версии 3.1.0
Я поместил эту информацию здесь для будущих читателей. Начиная с v3.1.0
lidR
будет иметь (или «уже есть» в зависимости от того, когда вы читаете) функцию classify_noise()
с несколькими возможными алгоритмами.