Desejo segmentar imagens RGB para cobertura do solo usando k significa agrupar de forma que as diferentes regiões da imagem sejam marcadas por cores diferentes e, se possível, limites sejam criados separando regiões diferentes. Eu quero algo como:
disso:
É possível conseguir isso por meio do cluster K-means? Eu tenho pesquisado por toda a Internet e muitos tutoriais fazem isso por k, agrupando, mas somente depois de converter a imagem em escala de cinza. Quero fazê-lo apenas com uma imagem RGB. Existe alguma fonte que possa me ajudar a começar com isso? Por favor, sugira algo.
Respostas:
Eu criei uma solução para isso e escrevi um artigo no blog sobre um tópico muito semelhante, que vou resumir aqui. O script tem como objetivo extrair um rio de uma imagem NAIP de 4 bandas usando uma abordagem de classificação e segmentação de imagens.
Este exemplo segmenta uma imagem usando o agrupamento de troca rápida no espaço de cores (x, y) com 4 bandas (vermelho, verde, azul, NIR) em vez de usar o agrupamento K-means. A segmentação da imagem foi realizada usando o pacote scikit-image . Mais detalhes sobre uma variedade de algoritmos de segmentação de imagem em scikit-image aqui . Por uma questão de conveniência, eu costumava
arcpy
fazer grande parte do trabalho de GIS, embora isso deva ser bastante fácil de transportar para o GDAL.fonte
Você pode observar o agrupamento no scikit-learn . Você precisará ler os dados em matrizes numpy (eu sugiro rasterio ) e a partir daí você pode manipular os dados para que cada banda seja uma variável para classificação. Por exemplo, supondo que você tem as três bandas lido em python como
red
,green
eblue
matrizes numpy:Observe que o cluster do KMeans não leva em consideração a conectividade dentro do conjunto de dados.
fonte
rasterio
;)rasterio
.