Editando a nuvem de pontos LiDAR para remover ruídos / outliers presentes abaixo e acima do solo?

10

Eu tenho dados LiDAR "sujos" contendo o primeiro e o último retorno e também inevitavelmente erros abaixo e acima do nível da superfície. (captura de tela)

insira a descrição da imagem aqui

Tenho SAGA, QGIS, ESRI e FME em mãos, mas nenhum método real. Qual seria um bom fluxo de trabalho para limpar esses dados? Existe um método totalmente automatizado ou, de alguma forma, eu excluiria manualmente?

Robert Buckley
fonte
Os dados da sua nuvem de pontos têm ruído baixo / alto classificado (classes 7 e 8 das especificações 1.4 R6)?
Aaron
O que você tentou com qualquer um desses produtos de software e onde ficou com ele? Você parece querer discutir opções em vez de fazer uma pergunta focada. É sempre bom discutir opções na sala de bate-papo GIS.
PolyGeo
1
Votar para reabrir, pois o moderador confunde as perguntas que solicitam software com as perguntas que solicitam métodos / maneiras de fazer alguma coisa. Respostas que listam apenas software não são respostas reais neste contexto. Explico melhor meu ponto de vista em gis.meta.stackexchange.com/questions/4380/… .
Andre Silva
1
Além disso, parece que o fechamento unilateral “amplo demais” foi usado excessivamente: gis.meta.stackexchange.com/questions/4816/… . Eu acho que o caso se aplica aqui. O que torna a questão singular é ter todos os tipos de discrepâncias na nuvem de pontos.
Andre Silva

Respostas:

9

Você parece ter discrepâncias:

  • i) abaixo da superfície do solo;
  • ii) acima da superfície do solo e verticalmente entre outras características reais acima do solo;
  • iii) pontos acima do solo com altura maior que todos os objetos de interesse, por exemplo, os causados ​​por nuvens ou pássaros (isso não é mostrado na figura, mas estou assumindo que também pode ser o caso).

Para 'i', a opção é usar um algoritmo de filtro de solo que possa levar em consideração 'erros negativos' para obter uma nuvem de pontos de terra LiDAR limpa. Veja o algoritmo MCC (Multiscale Curvature Classification) de Evans e Hudak (2007). É dito na página 4:

Os erros negativos são uma ocorrência comum nos dados LiDAR, que podem ser causados ​​pela dispersão dos fótons em um pulso de laser retornado. A dispersão aumenta o tempo para que um pulso de laser emitido retorne ao sensor da aeronave, inflando o cálculo da distância percorrida, causando um erro de medição em que a elevação da superfície é erroneamente registrada como estando abaixo das medições ao redor. Deve-se notar que as abordagens de classificação da curvatura podem potencialmente remover retornos válidos em torno dos erros negativos, o que pode expandir o artefato de borda em torno de um erro negativo para criar um efeito distinto de "cratera de bomba". Para lidar com os erros negativos, Haugerud e Harding sugeriram definir o parâmetro de tolerância à curvatura para quatro vezes o tamanho da célula interpolada e selecionar retornos que excedam esse limite de curvatura negativo. No entanto, deve-se notar que, sob certas circunstâncias, retornos que parecem ser erros negativos podem ser de fato retornos válidos (por exemplo, buracos). Portanto, a sugestão anterior para remover possíveis erros negativos pode ser implementada como um último loop de modelo opcional para empregar a critério do usuário, se necessário.

Abaixo, há um post com um exemplo sobre o uso do MCC-LIDAR:

Depois de ter uma nuvem de pontos de terra LiDAR precisa para fazer um DEM preciso, é possível normalizar a nuvem de pontos e excluir pontos que estão abaixo da superfície do DEM (aqueles com valores negativos). Usando a mesma abordagem, também é possível endereçar o número do ponto 'iii' removendo pontos acima de algum limite fixo. Veja, por exemplo:

Em seguida, ele nos deixa com 'ii', abordado pela respostalasnoise de AlecZ recomendada pelo LAStools. Ele também manipulará 'iii', e talvez parte de 'i' (o LAStools exige uma licença). Outras ferramentas criadas especificamente para verificar / remover discrepantes foram citadas aqui: a filters.outlierferramenta PDAL na resposta de Charlie Parr, que tem uma explicação detalhada sobre como a ferramenta funciona, e com a vantagem de que o PDAL é um software livre.

Em seguida, o que resta do processo automatizado (se houver algum erro externo) pode ser removido manualmente. Por exemplo:


Evans, Jeffrey S .; Hudak, Andrew T. 2007. Um algoritmo de curvatura de várias escalas para classificar LiDAR de retorno discreto em ambientes florestais . Transações IEEE em Geociência e Sensoriamento Remoto. 45 (4): 1029-1038.

Andre Silva
fonte
3

Vou recomendar PDAL a biblioteca de abstração de dados de pontos. Eu tive um bom sucesso usando o PDAL para um problema de filtragem semelhante. Eu gosto do PDAL porque é de código aberto, fornece suporte ao Python e facilita a reprodução do processamento e o controle dos meus parâmetros de filtragem. Também gosto porque possui 'pipelines' onde você pode encadear várias etapas (por exemplo, cortar, filtrar e exportar) e executá-las de uma só vez. Observe que, se você tem nuvens de pontos realmente grandes, o PDAL pode não ser tão rápido quanto algumas outras soluções (LASTools, QTM etc.).

Você poderia resolver o problema dos pontos periféricos com um pipeline PDAL semelhante ao seguinte:

{
"pipeline": [
    "input_utm.las",
    {
        "type":"filters.crop",
        "bounds":"([401900,415650],[7609100,7620200])"
    },
    {
        "type":"filters.outlier",
        "method":"statistical",
        "mean_k":12,
        "multiplier":2.0
    },
    {
        "type":"filters.range",
        "limits":"Classification![7:7]"
    },
    {
      "filename":"output.tif",
      "resolution":1.0,
      "output_type":"mean",
      "radius":3.0,
      "bounds":"([401900,415650],[7609100,7620200])",
      "type": "writers.gdal"
    }
    ]
}

Esse pipeline lê em um LAS, o recorta em uma extensão UTM especificada e, em seguida, executa um filtro que sinaliza todos os pontos externos, depois executa um segundo filtro que retém apenas pontos não externos (ou seja, o sinalizador de classificação! = 7) e depois exporta para GeoTIFF com uma resolução de 1 m. O filtro estatístico está executando um cálculo de distância média do vizinho mais próximo para testar se um ponto está ou não "muito distante" de seus vizinhos e, portanto, um valor externo.

A partir da documentação :

insira a descrição da imagem aqui

Charlie Parr
fonte
1
@AndreSilva editada! essencialmente, ele pergunta qual é a distância 'normal' para um ponto formar seus vizinhos (mean_k), e se a distância de um ponto for muito longe (maior que (multiplicador) * sigma acima da distância média), então é sinalizado como um outlier
Charlie Parr
1

Como o OP não limitou as soluções ao código aberto, sugiro o Quick Terrain Modeler ( QT Modeler ). Requer uma licença. Carregue a nuvem de pontos no QT e incline-a essencialmente para obter a visualização do perfil desejada, elástico no cluster que você deseja remover e apenas pressione Excluir.

auslander
fonte
1

Tive sorte usando simplesmente uma variação focal em uma varredura interpolada. Você atribui os valores de variação aos seus pontos e usa um limite para remover variações localmente altas, representando grandes desvios da estimativa do kernel local.

Você precisa garantir que a resolução da superfície interpolada seja um grão suficientemente pequeno para capturar a variação local no (s) ponto (s). O tamanho do kernel também terá efeito, mas para os valores extremos únicos, uma janela 3x3 deve ser suficiente. Você pode perder alguns pontos adicionais, mas com o lidar você tem muitos dados de sobra.

Jeffrey Evans
fonte
1

O Lastools fornece exatamente o que você precisa - scripts automatizados que removerão todos esses pontos para você. Há um custo de licenciamento para isso, no entanto, mas se esse é um processo que você deseja executar rapidamente como uma tarefa regular, usar o script lasnoise do conjunto de ferramentas é uma opção perfeita.

Como @Andre Silva observou, o ArcGIS possui um conjunto de ferramentas, que você pode usar após executar a ferramenta de geoprocessamento Create LAS Dataset. A partir daí, você pode entrar manualmente para reclassificar ou excluir esses pontos de ruído. A desvantagem é que não é um processo tão intuitivo ou eficaz quanto o QT Modeler (sugerido por @auslander), provavelmente o melhor programa para visualizar / analisar / manipular arquivos de las manualmente e com um custo de licença também. O ArcMap limitará o número de pontos visíveis ao editar sua nuvem de pontos, o que significa que você provavelmente terá que aumentar o zoom em áreas com ruído, removê-las ou reclassificá-las e depois passar como parte de um processo de limpeza manual. Mas isso fará o trabalho.

AlecZ
fonte
1

Como disse Andre Silva , o MCC-LIDAR é uma boa opção para extrair os pontos de referência, mas, pela minha experiência, será difícil se você tiver uma nuvem de pontos muito grande (500 milhões de pontos ou menos). Em outras palavras, ele retornará um erro e não executará o algoritmo, mesmo se você alterar as configurações (parâmetros de escala e curvatura). Além disso, pela minha experiência, ele mantém alguns dos "erros negativos" nos dados.

Minha alternativa é inverter a nuvem de pontos (os pontos abaixo do solo subirão e o acima do solo descerá). Para conseguir isso, carrego os dados no R e inverto a altura, execute o MCC-LIDAR e inverta os dados. Você provavelmente poderia fazer isso no QGIS ou no ArcGIS, mas dependendo do tamanho do seu conjunto de dados, pode demorar um pouco.

A ferramenta PDAL chão também é uma boa opção como ele funciona melhor com conjuntos de dados maiores, mas, novamente, alguns dos pontos abaixo chão ainda serão mantidos. A inversão do conjunto de dados ajudará novamente a resolver esse problema.

Para os pontos acima do solo, minha melhor abordagem é uma limpeza manual e a melhor ferramenta de código aberto que encontrei para isso é no CloudCompare. Você escolherá Segmentno menu da barra superior e poderá remover os pontos selecionados ou todos os outros. Eu usei o LAStools antes ( lasviewferramenta) para isso, mas a maneira como a interface 3D funciona não é tão fácil de usar.

Andre
fonte
Abordagem interessante ao inverter a nuvem de pontos para remover erros negativos. Foi fácil carregar um pointcloud de 500 milhões de pontos no R?
Andre Silva
Pode demorar alguns minutos. Normalmente, eu carrego de um arquivo ASCII usando o fread do pacote de desenvolvimento data.table, onde posso brincar com o número de threads a serem usados.
187 Andre Andre
1

Sou um suporte técnico da GreenValley International, a ferramenta de remoção de Outlier em nosso software principal LiDAR360 pode ser usada para remover esses erros o máximo possível e, portanto, melhorar a qualidade dos dados.

O algoritmo procurará primeiro os pontos vizinhos de cada ponto dentro de uma vizinhança definida pelo usuário e calculará a distância média do ponto aos pontos vizinhos. Então, a média e o desvio padrão dessas distâncias médias para todos os pontos são calculados. Se a distância média de um ponto a seus vizinhos for maior que a distância máxima (distância máxima = média + n * desvio padrão, onde n é um número múltiplo definido pelo usuário), ele será considerado um desvio e será removido do original Nuvem.

insira a descrição da imagem aqui

chenlh
fonte
-1

Como opção de código aberto, o 3D Forest possui algumas boas ferramentas para filtrar automaticamente, bem como ferramentas manuais para limpar nuvens de pontos. Você pode ter que tentar com diferentes parâmetros de filtro para obter o resultado necessário. Embora seja orientado para nuvens de pontos da floresta, muitas ferramentas são úteis em qualquer nuvem de pontos.

A_NeriWinter
fonte