Contenido

Introducción

La clasificación supervisada y no supervisada permite explorar diferentes tipos de atributos o clases por medio del análisis estadístico multivariado, este proceso identifica los valores de cada píxel de una o varias bandas de una imagen ráster, crea y evalua las clases o clúster, finalmente reclasifica de acuerdo a las probabilidades de cada clase. Este procedimiento es muy práctico para crear de forma automática un mapa de uso del suelo o de cobertura vegetal. Se utilizarán los datos de la base de datos nacional de cobertura de la tierra 2011 (NLCD 2011)

library(raster)
## Loading required package: sp
library(sp)
landsat5 <- stack("C:\\Users\\yarvis\\Music\\Files\\rsdata\\rs\\centralvalley-2011LT5.tif") # agrupamos las bandas e indicamos su ubicación 
names(landsat5) <- c("blue", "green", "red", "NIR", "SWIR1", "SWIR2")#construimos un vector con estas bandas y mostramos contenido del mismo

Clasificación no supervisada

En el método no supervisado se crean agrupamientos espectrales o clusters y el analista debe intentar asociar una clase temática a cada uno de dichos grupos. Se han propuesto numerosos algoritmos para crear estos clusters. En este ejercicio se explorará el algoritmo (kmeans), el cual es un metodo de agrupamiento o cluster, busca caracteristicas similares y a su vez diferentes entre grupos, esta basado en distancias.

# calculamos el indice NDVI 

ndvi <- (landsat5[["NIR"]] - landsat5[["red"]]) / (landsat5[["NIR"]] + landsat5[["red"]]) # extraemos del elemento de landsat las bandas para el calculo
e <- extent(-121.807,-121.725, 38.004,38.072)# se recorta una seccion de area ´del ndvi
ndvi <- crop(ndvi,e)
ndvi
## class      : RasterLayer 
## dimensions : 252, 304, 76608  (nrow, ncol, ncell)
## resolution : 0.0002694946, 0.0002694946  (x, y)
## extent     : -121.807, -121.725, 38.00413, 38.07204  (xmin, xmax, ymin, ymax)
## crs        : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
## source     : memory
## names      : layer 
## values     : -0.3360085, 0.7756007  (min, max)
nr <- getValues(ndvi) # visualizamos los valores del ndvi y los guardamos en nr
str(nr)
##  num [1:76608] 0.245 0.236 0.272 0.277 0.277 ...

¿cómo actua kmeans?

Realiza seleccion aleatoria de observaciones tantas como definamos, asigna cada observacion al punto mas cercano y calcula centroides de cada cluster. es rapido y su almacenamiento es ligero ya que almacena solamente os centroides.

set.seed(99)# se fija semilla para que los vslores no sean aleatorios
kmncluster<- kmeans(na.omit(nr), centers = 10, iter.max = 500,nstart = 5,algorithm = "Lloyd")# realizamos clustering, 10  centroides, 500 iteraciones
str(kmncluster) # que nos visualice las distintas inercias entre los grupos intra e inter asi como la inercia tota
## List of 9
##  $ cluster     : int [1:76608] 4 4 3 3 3 3 3 4 4 4 ...
##  $ centers     : num [1:10, 1] 0.55425 0.00498 0.29997 0.20892 -0.20902 ...
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr [1:10] "1" "2" "3" "4" ...
##   .. ..$ : NULL
##  $ totss       : num 6459
##  $ withinss    : num [1:10] 5.69 6.13 4.91 4.9 5.75 ...
##  $ tot.withinss: num 55.8
##  $ betweenss   : num 6403
##  $ size        : int [1:10] 8932 4550 7156 6807 11672 8624 8736 5040 9893 5198
##  $ iter        : int 108
##  $ ifault      : NULL
##  - attr(*, "class")= chr "kmeans"
knr <- setValues(ndvi, kmncluster$cluster)# muestra los valores del raster ndvi asignando los valores del clustering
knr <- raster(ndvi)
values(knr) <-  kmncluster$cluster# almacenamos el clustering en una variable 
knr
## class      : RasterLayer 
## dimensions : 252, 304, 76608  (nrow, ncol, ncell)
## resolution : 0.0002694946, 0.0002694946  (x, y)
## extent     : -121.807, -121.725, 38.00413, 38.07204  (xmin, xmax, ymin, ymax)
## crs        : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
## source     : memory
## names      : layer 
## values     : 1, 10  (min, max)
mycolor <- c("#daa520","#0000ff","#0000ff","#00ff00","#cbbeb5",
             "#c3ff5b", "#ff7373", "#00ff00", "#808080")# construimos un vector con los colores de la clasificacion de salida 
par(mfrow = c(1,2)) # permite visualizar varios graficos en un misma ventana contruye una matriz de graficos 
plot(ndvi, col = rev(terrain.colors(10)), main = "landsat-NDVI")#graficamos el ndvi
plot(knr, main = "Clasificación no supervisada", col = mycolor)# graficamos la clasificacion

Conclusiones

El algortimo kmeans permite el desarrollo de una clasificación no supervisada de forma sencilla, es no supervisado ya que actua de manera aleatoria, no tiene una variable dependiente y no a juicio del analista. La clasificación no supervisada puede ser eficiente cuando no hay un conocimiento previo

Bibliografía

  • M. Arango,J. W. Branch,V.Botero,(2005)Clasificación no supervisada de coberturas vegetales sobre imagenes digitales de sensores remotos landsat- ETM. Revista Facultad Nacional de Agronomía Medellin.