Segmentação/Classificação no R

Há algum tempo comecei a usar mais o software R para análises espaciais. Trata-se de um software de grande possibilidade para análise exploratória e modelagens estatísticas. O que eu não imaginei foi a possibilidade de utilizá-lo para sensoriamento remoto.

E o mais louco de tudo isso é a possibilidade de faze tais análises (por exemplo, classificação de imagem de satélite) sem a necessidade de pacotes específicos. Afinal, em sua maioria, estamos sempre trabalhando com estatística, independente da finalidade.

Resolvi, portanto, compartilhar aqui uma classificação não supervisionada que fiz baseada no algoritmos K-means. De início estava interessado em entender o processo de segmentação, como o de crescimento de região, disponível no software SPRING. Há diferentes algoritmos de segmentação de imagens e a ideia geral é agrupar pixels com características similares, como por exemplo, nível de cinza, textura e contraste, resultando em áreas com resposta espectral homogêneas (ou melhor, dentro de um padrão). Não sou especialista, por isso incentivo à todos que pesquisem mais a respeito no manual spring ou no artigo do Sadeck.

K-means

O algoritmo K-means, foi colocado no artigo do Sadeck como um possível algoritmo de segmentação. Contudo, por ele realizar uma análise de agrupamento (clustering), e definir classes de grupos a cada pixel, estarei o considerando aqui, como um algoritmo de classificação não supervisionado. Logo, o algoritmo K-means não está baseada no método de crescimento por região, que era meu objetivo inicial.

Oque faz o K-means? O algoritmo cria k grupos com respostas espectrais similares a partir dos valores dos pixels da(s) imagem(ns). Portanto, não consideram elementos como, contraste e textura. Esta abordagem classifica da imagem em k grupos (definidos à priori pelo usuário), que serão agrupados (classificados) estatisticamente em diferentes iterações de forma a reduzir o erro quadrático médio intra grupos e, por consequência, aumentar a distância entre os grupos (clusters). Para mais informações Kmeans.

Classificação não supervisionada no R

Como exemplo, farei uma análise da cobertura do município do Rio de Janeiro, usando uma cena do satélite LandSat 8 OLI, para a data de 2015.

Dados básicos da análise

fig1.png

Para a classificação vou usar a cena com todas as bandas mais o NDVI. Na figura abaixo, vemos a composição r=4, g=2 e b=1.

Resultado

Da cena utilizada, fizemos a classificação em seis grupos distintos, ilustrados abaixo.

fig2.png

O tempo de processamento é curtíssimo. Sim, eu sei. Esse processo não é nenhuma novidade. Contudo, acredito ser de grande valia por termos a possibilidade de nos apropriarmos dos resultados estatísticos para explorá-los, tanto no pré quanto no pós processamento.

Visualmente, poderíamos atribuir aos grupos as seguintes classes:

  1. classe 1, com cor verde: poderia ser classificada como áreas florestais
  2. classe 2, com cor roxa (ou coisa parecida): seriam as áreas urbanas
  3. classe 3, com cor laranja: seriam áreas florestais, mas com alguma diferença da classe 1 (possivelmente em diferente estágio ou nível de degradação)
  4. classe 4, em amarelo: que pouco aparecem, seriam áreas de areia
  5. classe 5, em azul: seriam corpos d’água
  6. classe 6, em vermelho: áreas urbanas, mas com resposta diferente da classe 2

Perspectivas futuras

Ainda não pude pesquisar, mas imagino que existam pacotes específicos do R para Sensoriamento Remoto, que poderão nos ajudar bastante em análises complementares.

Comentários são bem-vindos e caso também estejam explorando o universo R e tenham curiosidade, avisem que compartilho o script!

Até a próxima.

Anúncios

Sobre Felipe Barros

Geógrafo formado pela PUC-Rio, é mestre em Biodiversidade pelo Jardim Botânico do Rio de Janeiro e especialista em analise ambiental e gestão do território pela ENCE/IBGE. Trabalha com softwares livres de análise espacial, banco de dados e sensoriamento remoto.
Esse post foi publicado em Banco de Dados Geográficos. Bookmark o link permanente.