Cluster de varredura usando QGIS

10

Estou procurando uma maneira de converter uma varredura classificada em polígonos com base em agrupamentos espaciais dentro de cada classe. Para que os clusters sejam considerados válidos, preciso que eles consistam em uma porcentagem mínima de células de uma das classes.

Por exemplo: Uma área composta de 70% (ou mais) de células da classe "1" será considerada como um cluster da classe "1", mesmo que a área seja misturada com 30% de células pertencentes a outras classes. A análise de agrupamento, portanto, deve ser baseada na distância entre células da mesma classe.

Outra opção poderia ser basear o agrupamento em um número mínimo de células dentro de uma determinada classe, juntamente com uma definição de uma área máxima de pesquisa.

Por exemplo: Dentro de uma área especificada, deve haver 100 células da "classe 1" para que seja considerado um cluster.  

A maioria das ferramentas relacionadas ao cluster parece funcionar apenas para vetores. Examinei a análise de cluster da SAGA tool, mas ela realmente não se encaixava no meu objetivo. Alguma idéia para resolver isso ou quais outras ferramentas podem ser úteis?

Spiran
fonte
Você pode converter a varredura em um vetor e usar as ferramentas de agrupamento de vetores.
CSK
Essa é uma opção, mas acho que é muito mais fácil fazer a análise em formato raster, se possível. A conversão em vetor provavelmente geraria polígonos onde muitos detalhes se perdem na união de células de varredura ou muitos pontos também são manipulados (conjunto de Big Data).
Spiran
3
Eu sei que essa não é uma solução QGIS, mas você poderia usar python ou R para criar uma função de vizinhança para criar uma nova varredura em que ela olha para cada célula e se> 70% das células na vizinhança pertencerem a uma classe então essa célula é reclassificada para essa classe?
Liam G
Isso poderia funcionar com certeza, obrigado! Eu sou novo em Python, mas vale a pena tentar.
Spiran

Respostas:

5

Se você preferir resolver esse problema na "lógica raster", existem alguns filtros que você pode considerar. A melhor opção dependerá da distribuição espacial de seus pixels de cada classe dentro dos seus valores "em segundo plano", mas aqui estão duas soluções possíveis:

se os patches que você deseja remover forem relativamente grandes, use "peneira" (raster> analysis> peneira no QGIS 3.2, que é baseado em gdal_sieve.py).

O script gdal_sieve.py remove polígonos de varredura menores que um tamanho de limite fornecido (em pixels) e substitui-os pelo valor de pixel do maior polígono vizinho. O resultado pode ser gravado de volta na banda de varredura existente ou copiado para um novo arquivo.

Se você tiver algo como um efeito "sal e pimenta" (muitos pixels isolados de classes diferentes, mas apenas alguns pixels por pequenas manchas), use um filtro majoritário (por exemplo, vá para as ferramentas adicionais em GRASS> raster> r. vizinhos> selecione a opção "mode". Observe que esse filtro afetará (levemente) seus limites.

r.neighbors - Torna cada valor de categoria de célula uma função dos valores de categoria atribuídos às células ao seu redor e armazena novos valores de célula em uma camada de mapa raster de saída

Você encontrará os mesmos arquivadores (filtro majoritário, classes de peneiramento) e outros (morfologia) nas ferramentas SAGA (SAGA> filtro raster), se preferir

radouxju
fonte
Foi exatamente assim que eu resolvi. Basicamente, usando a ferramenta de análise do neigborhood da grama junto com alguns cálculos ao lado. Esqueceu-se de postar a solução, muito obrigado pela sua contribuição.
Spiran 6/02/19