Maneira de filtrar outliers da nuvem de pontos em lidr?
Eu tenho uma nuvem de pontos ALS. Consegui normalizar a altura com sucesso, mas estou me perguntando se há alguma maneira de remover / filtrar alguns pontos que são obviamente erros / outliers (pontos abaixo de 0 e alguns que estão 30-50m ou mesmo 100m acima das árvores mais altas). Os dados que estou usando foram baixados do Mapa Nacional do USGS com apenas pontos de solo já classificados.
Se eu normalizar com o tin()
algoritmo e criar meu chm direto da nuvem de pontos de normalização, meus valores de chm mín / máx serão:
values : -5.23, 129.98 (min, max)
e se eu normalizar com um dtm:
values : -14.65, 129.91 (min, max)
No final das contas, estou tentando segmentar árvores e gerar produtos de alturas de árvores, cobertura de dossel, densidade de árvores, etc. Mas não posso executar minha análise quando sei que a altura máxima da árvore será <30m em meu local de estudo.
Se eu tentar reclassificar o solo, isso ajudará com os pontos abaixo de 0? Mas isso não vai resolver o maximo 129m ...
Eu estava pensando que talvez fosse melhor suavizar meu chm e usar o chm / tree tops para segmentar árvores, pois estava tendo problemas para encontrar uma boa maneira de utilizar o li2012()
algoritmo.
Respostas
Não há 'avançado' outlier filtragem no lidR
entanto . Mas, para casos simples, você mesmo pode construir um método simples. Aqui estão algumas dicas e você pode modificar os exemplos para atender às suas necessidades.
Filtrar ponto de interesse usando limites
las <- filter_poi(las, Z >= 0, Z <= 30)
Filtrar valores discrepantes usando CHM de 95º percentil
Este é um exemplo retirado desta vinheta . Ele cria um raster de 95º percentil e remove o que é muito alto em relação a este mapa de altura.
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)
Filtrar outliers usando métricas baseadas em pontos
Não há exemplo dado, mas no final deste capítulo há uma seção que explica como construir um método de filtro de outlier bastante avançado compoint_metrics()
classify_noise () na v3.1.0
Eu coloco essas informações aqui para futuros leitores. Começando por v3.1.0
lidR
terá (ou 'já tem' dependendo de quando você estiver lendo) uma função classify_noise()
com vários algoritmos possíveis.